From a95598d5e4cc3ebb42e84498800e767f922425ba Mon Sep 17 00:00:00 2001 From: Devin Lin Date: Sat, 13 Sep 2025 22:18:32 -0400 Subject: [PATCH] panels: Fix panels having partial opacity and convoluted vkbd colors A custom 0.95 opacity was added to the panels in https://invent.kde.org/plasma/plasma-mobile/-/merge_requests/642 for overlaying applications. This required some complicated logic and layering to mix with other modes of operation. Since this broke at some point, simplify the logic completely so that it's just a flat colour. This also fixes the navigation panel not having a colour when the keyboard is shown over the homescreen. --- .../mobileshell/qml/statusbar/StatusBar.qml | 2 -- containments/panel/qml/StatusBarWrapper.qml | 14 ++------------ .../qml/NavigationPanelComponent.qml | 3 +-- containments/taskpanel/qml/main.qml | 19 ++++++++++--------- 4 files changed, 13 insertions(+), 25 deletions(-) diff --git a/components/mobileshell/qml/statusbar/StatusBar.qml b/components/mobileshell/qml/statusbar/StatusBar.qml index 3d5f9145..fec1ed0d 100644 --- a/components/mobileshell/qml/statusbar/StatusBar.qml +++ b/components/mobileshell/qml/statusbar/StatusBar.qml @@ -50,8 +50,6 @@ Item { */ property bool disableSystemTray: false - property color colorScopeColor: Kirigami.Theme.backgroundColor - readonly property real textPixelSize: Math.round(11 * ShellSettings.Settings.statusBarScaleFactor) readonly property real smallerTextPixelSize: Math.round(9 * ShellSettings.Settings.statusBarScaleFactor) readonly property real elementSpacing: Math.round(Kirigami.Units.smallSpacing * 1.5) diff --git a/containments/panel/qml/StatusBarWrapper.qml b/containments/panel/qml/StatusBarWrapper.qml index 995926a6..f32f71f2 100644 --- a/containments/panel/qml/StatusBarWrapper.qml +++ b/containments/panel/qml/StatusBarWrapper.qml @@ -38,17 +38,7 @@ Item { showTime: !MobileShellState.LockscreenDBusClient.lockscreenActive // Don't show time on the lockscreen, since we already have a massive clock showDropShadow: root.transparentBackground - backgroundColor: { - if (root.transparentBackground) { - return "transparent"; - } - - if (state == "default") { - return Kirigami.Theme.backgroundColor; - } else { - return Qt.rgba(Kirigami.Theme.backgroundColor.r, Kirigami.Theme.backgroundColor.g, Kirigami.Theme.backgroundColor.b, 0.95); - } - } + backgroundColor: root.transparentBackground ? "transparent" : Kirigami.Theme.backgroundColor transform: [ Translate { @@ -97,4 +87,4 @@ Item { } } } -} \ No newline at end of file +} diff --git a/containments/taskpanel/qml/NavigationPanelComponent.qml b/containments/taskpanel/qml/NavigationPanelComponent.qml index 4c8e0e90..a2879488 100644 --- a/containments/taskpanel/qml/NavigationPanelComponent.qml +++ b/containments/taskpanel/qml/NavigationPanelComponent.qml @@ -21,13 +21,12 @@ import org.kde.kirigami as Kirigami MobileShell.NavigationPanel { id: root required property bool opaqueBar - required property var navbarState // background is: // - opaque if an app is shown or vkbd is shown // - translucent if the task switcher is open // - transparent if on the homescreen - backgroundColor: navbarState != "default" && opaqueBar ? Qt.rgba(Kirigami.Theme.backgroundColor.r, Kirigami.Theme.backgroundColor.g, Kirigami.Theme.backgroundColor.b, 0.95) : "transparent" + backgroundColor: opaqueBar ? Kirigami.Theme.backgroundColor : "transparent" foregroundColorGroup: opaqueBar ? Kirigami.Theme.Window : Kirigami.Theme.Complementary shadow: !opaqueBar diff --git a/containments/taskpanel/qml/main.qml b/containments/taskpanel/qml/main.qml index 2cac5862..243eb821 100644 --- a/containments/taskpanel/qml/main.qml +++ b/containments/taskpanel/qml/main.qml @@ -137,7 +137,12 @@ ContainmentItem { // only opaque if there are no maximized windows on this screen readonly property bool showingStartupFeedback: MobileShellState.ShellDBusObject.startupFeedbackModel.activeWindowIsStartupFeedback && startupFeedbackColorAnimation.visible && windowMaximizedTracker.windowCount === 1 - readonly property bool opaqueBar: (windowMaximizedTracker.showingWindow || isCurrentWindowFullscreen) && !showingStartupFeedback + readonly property bool opaqueBar: { + if (Keyboards.KWinVirtualKeyboard.visible) { + return true; + } + return (windowMaximizedTracker.showingWindow || isCurrentWindowFullscreen) && !showingStartupFeedback + } readonly property alias isCurrentWindowFullscreen: windowMaximizedTracker.isCurrentWindowFullscreen readonly property bool fullscreen: isCurrentWindowFullscreen || (ShellSettings.Settings.autoHidePanelsEnabled && opaqueBar) @@ -165,14 +170,9 @@ ContainmentItem { visible: !root.fullscreen } - Rectangle { + Item { id: navigationPanel anchors.fill: parent - // contrasting colour - Kirigami.Theme.colorSet: root.opaqueBar ? Kirigami.Theme.Window : Kirigami.Theme.Complementary - Kirigami.Theme.inherit: false - - color: navigationPanel.state == "default" && (Keyboards.KWinVirtualKeyboard.visible || root.opaqueBar) ? Kirigami.Theme.backgroundColor : "transparent" property real offset: 0 @@ -181,7 +181,6 @@ ContainmentItem { anchors.fill: parent opaqueBar: root.opaqueBar isVertical: root.inLandscape - navbarState: navigationPanel.state transform: [ Translate { @@ -223,7 +222,9 @@ ContainmentItem { SequentialAnimation { ParallelAnimation { PropertyAnimation { - properties: "offset"; easing.type: navigationPanel.state === "hidden" ? Easing.InExpo : Easing.OutExpo; duration: Kirigami.Units.longDuration + properties: "offset" + easing.type: navigationPanel.state === "hidden" ? Easing.InExpo : Easing.OutExpo + duration: Kirigami.Units.longDuration } } ScriptAction {