diff options
Diffstat (limited to 'vm-manager/VmPanel.qml')
| -rw-r--r-- | vm-manager/VmPanel.qml | 35 |
1 files changed, 34 insertions, 1 deletions
diff --git a/vm-manager/VmPanel.qml b/vm-manager/VmPanel.qml index 7aecaab..cf224d6 100644 --- a/vm-manager/VmPanel.qml +++ b/vm-manager/VmPanel.qml @@ -78,6 +78,20 @@ Scope { else Virsh.act(vm, action); } + // Quickshell exits once no window is visible, and the drawer is closed + // most of the time, so a 1x1 transparent window holds the process open. + // Without it the shell quits and the keybind, which reaches it over IPC, + // has nothing left to talk to. + PanelWindow { + visible: true + implicitWidth: 1 + implicitHeight: 1 + color: "transparent" + exclusionMode: ExclusionMode.Ignore + mask: Region {} + WlrLayershell.keyboardFocus: WlrKeyboardFocus.None + } + LazyLoader { active: root.open @@ -102,7 +116,26 @@ Scope { MouseArea { anchors.fill: parent; onClicked: root.close() } } - Keys.onEscapePressed: root.confirming ? root.confirming = null : root.close() + // Keys reach an item, not the window, so something inside has to + // hold focus. The TextInput in a delete confirmation takes it when + // it appears; this takes it back whenever that is gone. + Item { + id: keyCatcher + anchors.fill: parent + focus: true + + Keys.onEscapePressed: { + if (root.confirming) root.confirming = null; + else root.close(); + } + + Connections { + target: root + function onConfirmingChanged() { + if (!root.confirming) keyCatcher.forceActiveFocus(); + } + } + } Rectangle { id: drawer |
