root panel window handles focus

This commit is contained in:
Benjamin Palko 2025-09-16 15:33:41 -04:00
parent bd826c14ac
commit f14cf072e9
5 changed files with 31 additions and 36 deletions

View file

@ -1,15 +1,36 @@
import qs.config import qs.config
import QtQuick import QtQuick
import Quickshell import Quickshell
import Quickshell.Hyprland
import Quickshell.Wayland import Quickshell.Wayland
PanelWindow { PanelWindow {
id: window id: window
required property string name
property alias background: background property alias background: background
required property string name
property bool canFocus: true
property bool focused: false
WlrLayershell.namespace: `lux-${name}` WlrLayershell.namespace: `lux-${name}`
WlrLayershell.layer: WlrLayer.Top
WlrLayershell.keyboardFocus: window.visible ? WlrKeyboardFocus.OnDemand : WlrKeyboardFocus.None
onVisibleChanged: {
if (!canFocus)
return;
focused = visible;
}
HyprlandFocusGrab {
active: window.focused
windows: [window]
onCleared: {
if (!window.canFocus)
return;
window.focused = false;
}
}
color: "transparent" color: "transparent"
Rectangle { Rectangle {

View file

@ -4,8 +4,6 @@ import qs.services
import QtQuick import QtQuick
import QtQuick.Controls import QtQuick.Controls
import QtQuick.Layouts import QtQuick.Layouts
import Quickshell.Hyprland
import Quickshell.Wayland
StyledPanelWindow { StyledPanelWindow {
id: window id: window
@ -17,15 +15,8 @@ StyledPanelWindow {
implicitHeight: 400 implicitHeight: 400
background.color: Styling.theme.base200 background.color: Styling.theme.base200
WlrLayershell.layer: WlrLayer.Top onFocusedChanged: {
WlrLayershell.keyboardFocus: window.visible ? WlrKeyboardFocus.OnDemand : WlrKeyboardFocus.None Visibility.configuration = focused;
HyprlandFocusGrab {
active: Visibility.configuration
windows: [window]
onCleared: {
Visibility.configuration = false;
}
} }
StyledTabBar { StyledTabBar {

View file

@ -20,6 +20,7 @@ StyledPanelWindow {
list.currentIndex = 0; list.currentIndex = 0;
search.clear(); search.clear();
} }
Visibility.launcher = focused;
} }
implicitWidth: rect.width implicitWidth: rect.width
implicitHeight: rect.height implicitHeight: rect.height

View file

@ -3,11 +3,9 @@ pragma ComponentBehavior: Bound
import qs.components import qs.components
import qs.config import qs.config
import qs.services import qs.services
import Quickshell.Hyprland
import QtQuick import QtQuick
import QtQuick.Layouts import QtQuick.Layouts
import Quickshell.Io import Quickshell.Io
import Quickshell.Wayland
import Quickshell.Widgets import Quickshell.Widgets
StyledPanelWindow { StyledPanelWindow {
@ -18,26 +16,19 @@ StyledPanelWindow {
implicitWidth: rect.width implicitWidth: rect.width
implicitHeight: rect.height implicitHeight: rect.height
WlrLayershell.layer: WlrLayer.Top
WlrLayershell.keyboardFocus: root.visible ? WlrKeyboardFocus.OnDemand : WlrKeyboardFocus.None
Process { Process {
id: process id: process
} }
onFocusedChanged: {
Visibility.powermenu = focused;
}
WrapperItem { WrapperItem {
id: rect id: rect
margin: 14 margin: 14
HyprlandFocusGrab {
active: Visibility.powermenu
windows: [root]
onCleared: {
Visibility.powermenu = false;
}
}
StyledListView { StyledListView {
id: list id: list

View file

@ -5,8 +5,6 @@ import qs.config
import qs.services import qs.services
import QtQuick import QtQuick
import QtQuick.Controls import QtQuick.Controls
import Quickshell.Hyprland
import Quickshell.Wayland
StyledPanelWindow { StyledPanelWindow {
id: root id: root
@ -18,15 +16,8 @@ StyledPanelWindow {
background.color: Styling.theme.base200 background.color: Styling.theme.base200
WlrLayershell.layer: WlrLayer.Top onFocusedChanged: {
WlrLayershell.keyboardFocus: root.visible ? WlrKeyboardFocus.OnDemand : WlrKeyboardFocus.None Visibility.storybook = focused;
HyprlandFocusGrab {
active: Visibility.storybook
windows: [root]
onCleared: {
Visibility.storybook = false;
}
} }
StyledTabBar { StyledTabBar {