diff --git a/components/mobileshell/qml/actiondrawer/ActionDrawerOpenSurface.qml b/components/mobileshell/qml/actiondrawer/ActionDrawerOpenSurface.qml index 3da939dc..990a5751 100644 --- a/components/mobileshell/qml/actiondrawer/ActionDrawerOpenSurface.qml +++ b/components/mobileshell/qml/actiondrawer/ActionDrawerOpenSurface.qml @@ -56,6 +56,13 @@ MobileShell.SwipeArea { anchors.fill: parent + MouseArea { + anchors.fill: parent + acceptedButtons: Qt.NoButton + hoverEnabled: true + cursorShape: ShellSettings.Settings.convergenceModeEnabled ? Qt.PointingHandCursor : Qt.ArrowCursor + } + onSwipeStarted: (point) => startSwipeWithPoint(point) onSwipeEnded: endSwipe() onSwipeMove: (totalDeltaX, totalDeltaY, deltaX, deltaY) => updateOffset(deltaY); diff --git a/containments/homescreens/folio/qml/main.qml b/containments/homescreens/folio/qml/main.qml index 198cb9ee..e1134aaa 100644 --- a/containments/homescreens/folio/qml/main.qml +++ b/containments/homescreens/folio/qml/main.qml @@ -299,9 +299,10 @@ ContainmentItem { readonly property real topBarHeight: MobileShell.Constants.topPanelHeight readonly property real dockHeight: MobileShell.Constants.convergenceDockHeight readonly property real frameThickness: MobileShell.Constants.convergenceWorkspaceFrameThickness + readonly property real topBarHitHeight: topBarHeight + frameThickness readonly property real frameRadius: Math.min(MobileShell.Constants.convergenceWorkspaceFrameRadius, Math.max(0, Math.min(workAreaWidth, workAreaHeight) / 2)) readonly property real workAreaX: frameThickness - readonly property real workAreaY: topBarHeight + frameThickness + readonly property real workAreaY: topBarHitHeight readonly property real workAreaWidth: Math.max(0, width - frameThickness * 2) readonly property real workAreaHeight: Math.max(0, height - topBarHeight - dockHeight - frameThickness * 2) readonly property color chromeColor: Kirigami.Theme.backgroundColor @@ -322,7 +323,7 @@ ContainmentItem { Kirigami.Theme.colorSet: Kirigami.Theme.Window function updateInputRegion() { - const topBarRegion = Qt.rect(0, 0, width, topBarHeight) + const topBarRegion = Qt.rect(0, 0, width, topBarHitHeight) if (shouldHide && dockOffset >= dockHeight) { MobileShell.ShellUtil.setInputRegions(convergenceChrome, [ topBarRegion, @@ -405,11 +406,6 @@ ContainmentItem { showTime: true backgroundColor: "transparent" } - - TapHandler { - acceptedButtons: Qt.LeftButton - onTapped: MobileShellState.ShellDBusClient.openActionDrawer() - } } Shape { diff --git a/containments/panel/qml/StatusPanel.qml b/containments/panel/qml/StatusPanel.qml index f9fe91f8..f15346cc 100644 --- a/containments/panel/qml/StatusPanel.qml +++ b/containments/panel/qml/StatusPanel.qml @@ -64,7 +64,9 @@ Item { screen: Plasmoid.screen maximizedTracker: containmentItem.windowMaximizedTracker - visible: !MobileShellState.LockscreenDBusClient.lockscreenActive && !containmentItem.fullscreen + visible: !MobileShellState.LockscreenDBusClient.lockscreenActive + && !containmentItem.fullscreen + && !ShellSettings.Settings.convergenceModeEnabled } // Status bar component @@ -74,6 +76,8 @@ Item { StatusBarWrapper { id: statusBarWrapper z: 1 + visible: !ShellSettings.Settings.convergenceModeEnabled + enabled: visible anchors.fill: parent statusPanelHeight: MobileShell.Constants.topPanelHeight diff --git a/containments/panel/qml/main.qml b/containments/panel/qml/main.qml index 96bc99b4..8af38158 100644 --- a/containments/panel/qml/main.qml +++ b/containments/panel/qml/main.qml @@ -76,10 +76,13 @@ ContainmentItem { } readonly property real topBarHeight: gamingMode ? 0 : MobileShell.Constants.topPanelHeight - readonly property real panelHeight: (ShellSettings.Settings.convergenceModeEnabled || gamingMode) ? 0 : MobileShell.Constants.topPanelHeight readonly property real convergenceWorkspaceFrameThickness: ShellSettings.Settings.convergenceModeEnabled && !gamingMode ? MobileShell.Constants.convergenceWorkspaceFrameThickness : 0 + readonly property real topBarInputHeight: topBarHeight + convergenceWorkspaceFrameThickness + readonly property real panelHeight: gamingMode + ? 0 + : (ShellSettings.Settings.convergenceModeEnabled ? topBarInputHeight : MobileShell.Constants.topPanelHeight) onPanelHeightChanged: setWindowProperties() function setWindowProperties() { @@ -103,7 +106,9 @@ ContainmentItem { function updateTouchArea() { const hiddenTouchAreaThickness = Kirigami.Units.gridUnit; - if (MobileShellState.ShellDBusClient.panelState == "hidden") { + if (ShellSettings.Settings.convergenceModeEnabled) { + MobileShell.ShellUtil.setInputRegion(root.panel, Qt.rect(0, 0, root.panel.width, root.panel.height)); + } else if (MobileShellState.ShellDBusClient.panelState == "hidden") { MobileShell.ShellUtil.setInputRegion(root.panel, Qt.rect(0, 0, root.panel.width, hiddenTouchAreaThickness)); } else { MobileShell.ShellUtil.setInputRegion(root.panel, Qt.rect(0, 0, 0, 0)); @@ -155,20 +160,20 @@ ContainmentItem { visible: ShellSettings.Settings.convergenceModeEnabled && !ShellSettings.Settings.gamingModeEnabled color: "transparent" flags: Qt.FramelessWindowHint | Qt.WindowTransparentForInput - height: Math.max(1, root.topBarHeight + root.convergenceWorkspaceFrameThickness) + height: Math.max(1, root.topBarInputHeight) width: 1 LayerShell.Window.scope: "topbar-space" LayerShell.Window.layer: LayerShell.Window.LayerBottom LayerShell.Window.anchors: LayerShell.Window.AnchorTop | LayerShell.Window.AnchorLeft | LayerShell.Window.AnchorRight - LayerShell.Window.exclusionZone: Math.max(1, root.topBarHeight + root.convergenceWorkspaceFrameThickness) + LayerShell.Window.exclusionZone: Math.max(1, root.topBarInputHeight) LayerShell.Window.keyboardInteractivity: LayerShell.Window.KeyboardInteractivityNone } // Visual panel component StatusPanel { id: statusPanel - visible: !ShellSettings.Settings.gamingModeEnabled && !ShellSettings.Settings.convergenceModeEnabled + visible: !ShellSettings.Settings.gamingModeEnabled anchors.fill: parent containmentItem: root } diff --git a/tests/check-convergence-dock-invariant.sh b/tests/check-convergence-dock-invariant.sh index d9273366..fa2da8d6 100644 --- a/tests/check-convergence-dock-invariant.sh +++ b/tests/check-convergence-dock-invariant.sh @@ -8,6 +8,7 @@ repo_root="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)" constants="$repo_root/components/mobileshell/qml/components/Constants.qml" panel="$repo_root/containments/panel/qml/main.qml" +status_panel="$repo_root/containments/panel/qml/StatusPanel.qml" status_bar_template="$repo_root/layout-templates/org.kde.plasma.mobile.defaultStatusBar/contents/layout.js" taskpanel="$repo_root/containments/taskpanel/qml/main.qml" folio_main="$repo_root/containments/homescreens/folio/qml/main.qml" @@ -17,6 +18,7 @@ folio_home="$repo_root/containments/homescreens/folio/qml/FolioHomeScreen.qml" folio_backend="$repo_root/containments/homescreens/folio/homescreen.h" folio_backend_cpp="$repo_root/containments/homescreens/folio/homescreen.cpp" action_content="$repo_root/components/mobileshell/qml/actiondrawer/private/ContentContainer.qml" +action_open_surface="$repo_root/components/mobileshell/qml/actiondrawer/ActionDrawerOpenSurface.qml" action_landscape="$repo_root/components/mobileshell/qml/actiondrawer/private/LandscapeContentContainer.qml" quick_settings="$repo_root/components/mobileshell/qml/actiondrawer/private/QuickSettings.qml" quick_settings_panel="$repo_root/components/mobileshell/qml/actiondrawer/private/QuickSettingsPanel.qml" @@ -48,10 +50,21 @@ require_line "$panel" "root.panel.location = PlasmaCore.Types.TopEdge" require_line "$panel" "root.panel.offset = 0" require_line "$panel" "root.panel.visibilityMode = (!ShellSettings.Settings.convergenceModeEnabled && ShellSettings.Settings.autoHidePanelsEnabled) ? 3 : 0" require_line "$panel" "readonly property real topBarHeight: gamingMode ? 0 : MobileShell.Constants.topPanelHeight" -require_line "$panel" "readonly property real panelHeight: (ShellSettings.Settings.convergenceModeEnabled || gamingMode) ? 0 : MobileShell.Constants.topPanelHeight" -require_line "$panel" "height: Math.max(1, root.topBarHeight + root.convergenceWorkspaceFrameThickness)" -require_line "$panel" "LayerShell.Window.exclusionZone: Math.max(1, root.topBarHeight + root.convergenceWorkspaceFrameThickness)" -require_line "$panel" "visible: !ShellSettings.Settings.gamingModeEnabled && !ShellSettings.Settings.convergenceModeEnabled" +require_line "$panel" "readonly property real topBarInputHeight: topBarHeight + convergenceWorkspaceFrameThickness" +require_line "$panel" "? 0" +require_line "$panel" ": (ShellSettings.Settings.convergenceModeEnabled ? topBarInputHeight : MobileShell.Constants.topPanelHeight)" +require_line "$panel" "MobileShell.ShellUtil.setInputRegion(root.panel, Qt.rect(0, 0, root.panel.width, root.panel.height));" +require_line "$panel" "height: Math.max(1, root.topBarInputHeight)" +require_line "$panel" "LayerShell.Window.exclusionZone: Math.max(1, root.topBarInputHeight)" +require_line "$panel" "visible: !ShellSettings.Settings.gamingModeEnabled" + +require_line "$status_panel" "&& !ShellSettings.Settings.convergenceModeEnabled" +require_line "$status_panel" "visible: !ShellSettings.Settings.convergenceModeEnabled" +require_line "$status_panel" "MobileShell.ActionDrawerOpenSurface {" +require_line "$action_open_surface" "MouseArea {" +require_line "$action_open_surface" "acceptedButtons: Qt.NoButton" +require_line "$action_open_surface" "hoverEnabled: true" +require_line "$action_open_surface" "cursorShape: ShellSettings.Settings.convergenceModeEnabled ? Qt.PointingHandCursor : Qt.ArrowCursor" require_line "$status_bar_template" "panel.location = \"top\";" @@ -66,9 +79,9 @@ require_line "$folio_main" "id: convergenceChrome" require_line "$folio_main" "LayerShell.Window.scope: \"convergence-chrome\"" require_line "$folio_main" "height: Screen.height" require_line "$folio_main" "MobileShell.StatusBar {" -require_line "$folio_main" "onTapped: MobileShellState.ShellDBusClient.openActionDrawer()" require_line "$folio_main" "MobileShell.ShellUtil.setInputRegions(convergenceChrome, [" -require_line "$folio_main" "const topBarRegion = Qt.rect(0, 0, width, topBarHeight)" +require_line "$folio_main" "readonly property real topBarHitHeight: topBarHeight + frameThickness" +require_line "$folio_main" "const topBarRegion = Qt.rect(0, 0, width, topBarHitHeight)" require_line "$folio_main" "readonly property real dockHeight: MobileShell.Constants.convergenceDockHeight" require_line "$folio_main" "readonly property real revealStripHeight: MobileShell.Constants.convergenceDockRevealHeight" require_line "$folio_main" "import QtQuick.Shapes 1.8" @@ -76,7 +89,7 @@ require_line "$folio_main" "id: workspaceFrame" require_line "$folio_main" "readonly property real frameThickness: MobileShell.Constants.convergenceWorkspaceFrameThickness" require_line "$folio_main" "readonly property real frameRadius:" require_line "$folio_main" "readonly property real workAreaX: frameThickness" -require_line "$folio_main" "readonly property real workAreaY: topBarHeight + frameThickness" +require_line "$folio_main" "readonly property real workAreaY: topBarHitHeight" require_line "$folio_main" "readonly property real workAreaWidth: Math.max(0, width - frameThickness * 2)" require_line "$folio_main" "readonly property real workAreaHeight: Math.max(0, height - topBarHeight - dockHeight - frameThickness * 2)" require_line "$folio_main" "fillRule: ShapePath.OddEvenFill"