1
0
mirror of https://github.com/AvengeMedia/DankMaterialShell.git synced 2026-08-05 21:18:30 -04:00

fix(Hover): refactor & update hover tracking w/context menus

Fixes #2737
This commit is contained in:
purian23
2026-07-04 00:08:58 -04:00
parent 2861cc89c6
commit c554d973ef
30 changed files with 297 additions and 27 deletions
+11 -1
View File
@@ -2,6 +2,7 @@ import QtQuick
import Quickshell.Hyprland
import qs.Common
import qs.Services
import qs.Widgets
Item {
id: root
@@ -38,6 +39,7 @@ Item {
property bool keepContentLoaded: false
property bool keepPopoutsOpen: false
property var customKeyboardFocus: null
readonly property alias transientSurfaceTracker: _transientSurfaceTracker
property bool useOverlayLayer: false
signal opened
@@ -47,6 +49,10 @@ Item {
readonly property var contentLoader: impl.item ? impl.item.contentLoader : null
readonly property alias modalFocusScope: _modalFocusScope
TransientSurfaceTracker {
id: _transientSurfaceTracker
}
FocusScope {
id: _modalFocusScope
objectName: "modalFocusScope"
@@ -56,7 +62,7 @@ Item {
// Hyprland OnDemand grab delivers keyboard focus to the modal content surface.
HyprlandFocusGrab {
windows: root.contentWindow ? [root.contentWindow] : []
windows: (root.contentWindow ? [root.contentWindow] : []).concat(root.transientSurfaceTracker?.focusWindows ?? [])
active: KeyboardFocus.wantsGrab(root.shouldHaveFocus, root.customKeyboardFocus)
property var restoreToplevel: null
@@ -79,11 +85,13 @@ Item {
}
function close() {
transientSurfaceTracker?.closeAll?.();
if (impl.item)
impl.item.close();
}
function instantClose() {
transientSurfaceTracker?.closeAll?.();
if (impl.item && typeof impl.item.instantClose === "function")
impl.item.instantClose();
}
@@ -175,6 +183,8 @@ Item {
Connections {
target: root
function onShouldBeVisibleChanged() {
if (!root.shouldBeVisible)
root.transientSurfaceTracker?.closeAll?.();
if (impl.item && impl.item.shouldBeVisible !== root.shouldBeVisible)
impl.item.shouldBeVisible = root.shouldBeVisible;
}