mirror of
https://github.com/noctalia-dev/noctalia-shell.git
synced 2026-05-11 17:08:27 +08:00
Panels: proper focus management with the new architecture.
This commit is contained in:
@@ -28,8 +28,6 @@ Item {
|
||||
property real preferredHeight: 900
|
||||
property real preferredWidthRatio
|
||||
property real preferredHeightRatio
|
||||
property color panelBackgroundColor: Color.mSurface
|
||||
property color panelBorderColor: Color.mOutline
|
||||
property var buttonItem: null
|
||||
property bool forceAttachToBar: false
|
||||
|
||||
@@ -41,6 +39,9 @@ Item {
|
||||
property bool panelAnchorLeft: false
|
||||
property bool panelAnchorRight: false
|
||||
|
||||
// Keyboard focus
|
||||
property bool exclusiveKeyboard: true
|
||||
|
||||
// Track if window has been created (for lazy loading)
|
||||
property bool windowCreated: false
|
||||
|
||||
@@ -190,8 +191,7 @@ Item {
|
||||
placeholder: panelPlaceholder
|
||||
panelContent: root.panelContent
|
||||
panelWrapper: root // Pass reference to SmartPanel for keyboard handlers
|
||||
panelBackgroundColor: root.panelBackgroundColor
|
||||
panelBorderColor: root.panelBorderColor
|
||||
exclusiveKeyboard: root.exclusiveKeyboard
|
||||
|
||||
// Forward signals
|
||||
onPanelOpened: root.opened()
|
||||
|
||||
@@ -24,9 +24,8 @@ PanelWindow {
|
||||
// Reference to the SmartPanel wrapper (for keyboard handlers)
|
||||
property var panelWrapper: null
|
||||
|
||||
// Color properties (forwarded from SmartPanel)
|
||||
property color panelBackgroundColor: Color.mSurface
|
||||
property color panelBorderColor: Color.mOutline
|
||||
// Keyboard focus
|
||||
property bool exclusiveKeyboard: true
|
||||
|
||||
// Track whether panel is open
|
||||
property bool isPanelOpen: false
|
||||
@@ -129,17 +128,7 @@ PanelWindow {
|
||||
WlrLayershell.layer: WlrLayer.Top
|
||||
WlrLayershell.namespace: "noctalia-panel-content-" + placeholder.panelName + "-" + (placeholder.screen?.name || "unknown")
|
||||
WlrLayershell.exclusionMode: ExclusionMode.Ignore
|
||||
|
||||
// Different compositor handle the keyboard focus differently (inc. mouse)
|
||||
// This ensures all keyboard shortcuts work reliably (Escape, etc.)
|
||||
// Also ensures that the launcher get proper focus on launch.
|
||||
WlrLayershell.keyboardFocus: {
|
||||
if (CompositorService.isNiri) {
|
||||
return root.isPanelOpen ? WlrKeyboardFocus.Exclusive : WlrKeyboardFocus.None
|
||||
} else {
|
||||
return root.isPanelOpen ? WlrKeyboardFocus.OnDemand : WlrKeyboardFocus.None
|
||||
}
|
||||
}
|
||||
WlrLayershell.keyboardFocus: !root.isPanelOpen ? WlrKeyboardFocus.None : (exclusiveKeyboard ? WlrKeyboardFocus.Exclusive : WlrKeyboardFocus.OnDemand)
|
||||
|
||||
// Anchor to all edges to make fullscreen
|
||||
anchors {
|
||||
|
||||
Reference in New Issue
Block a user