kb focus fix from main

This commit is contained in:
end-4
2026-02-07 09:46:31 +01:00
parent c2f65e79bc
commit 10491f2362
4 changed files with 12 additions and 4 deletions
@@ -24,7 +24,7 @@ Scope {
WlrLayershell.namespace: "quickshell:overview" WlrLayershell.namespace: "quickshell:overview"
WlrLayershell.layer: WlrLayer.Top WlrLayershell.layer: WlrLayer.Top
// WlrLayershell.keyboardFocus: GlobalStates.overviewOpen ? WlrKeyboardFocus.OnDemand : WlrKeyboardFocus.None WlrLayershell.keyboardFocus: GlobalStates.overviewOpen ? WlrKeyboardFocus.OnDemand : WlrKeyboardFocus.None
color: "transparent" color: "transparent"
mask: Region { mask: Region {
@@ -22,8 +22,7 @@ Scope {
exclusiveZone: 0 exclusiveZone: 0
implicitWidth: sidebarWidth implicitWidth: sidebarWidth
WlrLayershell.namespace: "quickshell:sidebarRight" WlrLayershell.namespace: "quickshell:sidebarRight"
// Hyprland 0.49: Focus is always exclusive and setting this breaks mouse focus grab WlrLayershell.keyboardFocus: GlobalStates.sidebarRightOpen ? WlrKeyboardFocus.OnDemand : WlrKeyboardFocus.None
// WlrLayershell.keyboardFocus: WlrKeyboardFocus.Exclusive
color: "transparent" color: "transparent"
anchors { anchors {
@@ -25,6 +25,7 @@ Scope {
exclusionMode: ExclusionMode.Ignore exclusionMode: ExclusionMode.Ignore
WlrLayershell.namespace: "quickshell:wallpaperSelector" WlrLayershell.namespace: "quickshell:wallpaperSelector"
WlrLayershell.layer: WlrLayer.Overlay WlrLayershell.layer: WlrLayer.Overlay
WlrLayershell.keyboardFocus: WlrKeyboardFocus.OnDemand
color: "transparent" color: "transparent"
anchors.top: true anchors.top: true
@@ -52,9 +52,17 @@ Singleton {
} }
} }
function hasActive(element) {
return element?.activeFocus || Array.from(
element?.children
).some(
(child) => hasActive(child)
);
}
HyprlandFocusGrab { HyprlandFocusGrab {
id: grab id: grab
windows: [...root.persistent, ...root.dismissable] windows: root.dismissable.every(w => !w?.focusable) || root.dismissable.some(w => hasActive(w?.contentItem)) ? [...root.dismissable, ...root.persistent] : [...root.dismissable]
active: root.dismissable.length > 0 active: root.dismissable.length > 0
onCleared: () => { onCleared: () => {
root.dismiss(); root.dismiss();