From 3f5a54aa887e26711221aea4766432785143497a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Hu=E1=BB=B3nh=20Thi=E1=BB=87n=20L=E1=BB=99c?= Date: Tue, 14 Jul 2026 01:58:02 +0700 Subject: [PATCH] fix(dash): resolve pointer cursor hover issue in connected mode (#2845) * fix(dash): cursor not changing to pointer in Connected Mode (#2831) Replaces the full-screen background dismissal MouseArea in DankPopoutConnected.qml with four edge strips that exclude the popup body. The full-screen MouseArea at z:-1 was suppressing child cursorShape propagation on Wayland when combined with the full-screen input mask. Blame: the connected popout architecture itself (the issue does not repro in Separate Mode where background dismissal lives in a separate PanelWindow). * fix(dash): resolve pointer cursor hover issue in connected mode --- .../Modules/DankDash/DankDashPopout.qml | 7 +++ .../Modules/DankDash/MediaDropdownOverlay.qml | 7 +-- quickshell/Widgets/DankPopoutConnected.qml | 57 +++++++++++++++---- 3 files changed, 54 insertions(+), 17 deletions(-) diff --git a/quickshell/Modules/DankDash/DankDashPopout.qml b/quickshell/Modules/DankDash/DankDashPopout.qml index 4dfbd3e8a..d31e09150 100644 --- a/quickshell/Modules/DankDash/DankDashPopout.qml +++ b/quickshell/Modules/DankDash/DankDashPopout.qml @@ -226,6 +226,13 @@ DankPopout { LayoutMirroring.enabled: I18n.isRtl LayoutMirroring.childrenInherit: true + MouseArea { + anchors.fill: parent + z: -1 + enabled: root.__dropdownType !== 0 + onClicked: root.__hideDropdowns() + } + implicitWidth: Math.max(700, pages.implicitWidth + (Theme.spacingM * 2)) implicitHeight: contentColumn.height + Theme.spacingM * 2 color: "transparent" diff --git a/quickshell/Modules/DankDash/MediaDropdownOverlay.qml b/quickshell/Modules/DankDash/MediaDropdownOverlay.qml index 2293dd55f..0488df066 100644 --- a/quickshell/Modules/DankDash/MediaDropdownOverlay.qml +++ b/quickshell/Modules/DankDash/MediaDropdownOverlay.qml @@ -6,6 +6,7 @@ import qs.Widgets Item { id: root + visible: dropdownType !== 0 LayoutMirroring.enabled: I18n.isRtl LayoutMirroring.childrenInherit: true @@ -582,10 +583,4 @@ Item { } } - MouseArea { - anchors.fill: parent - z: -1 - enabled: dropdownType !== 0 - onClicked: closeRequested() - } } diff --git a/quickshell/Widgets/DankPopoutConnected.qml b/quickshell/Widgets/DankPopoutConnected.qml index 9bdbc5b54..31f97b8e4 100644 --- a/quickshell/Widgets/DankPopoutConnected.qml +++ b/quickshell/Widgets/DankPopoutConnected.qml @@ -996,18 +996,53 @@ Item { height: root.renderedAlignedHeight + contentContainer.verticalConnectorExtent * 2 } - MouseArea { - anchors.fill: parent - enabled: shouldBeVisible && backgroundInteractive - acceptedButtons: Qt.LeftButton | Qt.RightButton | Qt.MiddleButton + Item { + id: backgroundClickCatcher z: -1 - onClicked: mouse => { - const clickX = mouse.x; - const clickY = mouse.y; - const outsideContent = clickX < root.alignedX || clickX > root.alignedX + root.alignedWidth || clickY < root.renderedAlignedY || clickY > root.renderedAlignedY + root.renderedAlignedHeight; - if (!outsideContent) - return; - backgroundClicked(); + enabled: shouldBeVisible && backgroundInteractive + x: 0 + y: 0 + width: parent.width + height: parent.height + + // Four edge strips that exclude the popup body, so cursor shapes + // inside the content propagate correctly (full-screen MouseAreas + // at z:-1 can suppress child cursorShape on Wayland). + MouseArea { + x: 0 + y: 0 + width: parent.width + height: root.renderedAlignedY + enabled: parent.enabled + acceptedButtons: Qt.LeftButton | Qt.RightButton | Qt.MiddleButton + onClicked: backgroundClicked() + } + MouseArea { + x: 0 + y: root.renderedAlignedY + root.renderedAlignedHeight + width: parent.width + height: Math.max(0, parent.height - root.renderedAlignedY - root.renderedAlignedHeight) + enabled: parent.enabled + acceptedButtons: Qt.LeftButton | Qt.RightButton | Qt.MiddleButton + onClicked: backgroundClicked() + } + MouseArea { + x: 0 + y: root.renderedAlignedY + width: root.alignedX + height: root.renderedAlignedHeight + enabled: parent.enabled + acceptedButtons: Qt.LeftButton | Qt.RightButton | Qt.MiddleButton + onClicked: backgroundClicked() + } + MouseArea { + x: root.alignedX + root.alignedWidth + y: root.renderedAlignedY + width: Math.max(0, parent.width - root.alignedX - root.alignedWidth) + height: root.renderedAlignedHeight + enabled: parent.enabled + acceptedButtons: Qt.LeftButton | Qt.RightButton | Qt.MiddleButton + onClicked: backgroundClicked() } }