From 8079f68fef0a0aa007f99625295cd330947ec1e1 Mon Sep 17 00:00:00 2001 From: "Danilo M." Date: Thu, 15 Oct 2026 12:48:16 +0200 Subject: feat(desktop): the mouse back button steps out of the drawer The side button (BTN_SIDE, Qt.BackButton) does what Escape does: closes the history, then leaves a page for the tiles, then closes the drawer. Both go through one back(). The first attempt let the press fall through to the full-surface click catcher under the panel, since nothing above it accepts that button; it never arrived while a page was open. A MouseArea on top with z: 1, taking only the back button, works, and left clicks still pass through it. Co-Authored-By: Claude Opus 5.5 --- desktop/Drawer.qml | 25 ++++++++++++++++++++----- 1 file changed, 20 insertions(+), 5 deletions(-) (limited to 'desktop') diff --git a/desktop/Drawer.qml b/desktop/Drawer.qml index 4285506..92c4fca 100644 --- a/desktop/Drawer.qml +++ b/desktop/Drawer.qml @@ -68,6 +68,14 @@ Scope { root.open = true; } + // One step out: history, then a page, then the drawer itself. Escape + // and the mouse's back button. + function back() { + if (root.history) root.history = false; + else if (root.page) root.page = ""; + else root.close(); + } + function close() { root.open = false; // Reset to the grid: a panel that reopens somewhere unexpected is @@ -114,6 +122,17 @@ Scope { onClicked: root.close() } + // The mouse's back button, anywhere on the surface. On top of + // everything and taking only that button, so left clicks pass + // through it: a back press left to fall through from below never + // arrived, because something on the page took it first. + MouseArea { + anchors.fill: parent + z: 1 + acceptedButtons: Qt.BackButton + onClicked: root.back() + } + // Keys reach a focused item, never the window: setting // keyboardFocus above is necessary but not sufficient, and // Keys.onEscapePressed on a PanelWindow never fires. See AGENTS.md. @@ -131,11 +150,7 @@ Scope { // content, a key pressed in any focused descendant bubbles up // to it. focus: true - Keys.onEscapePressed: { - if (root.history) root.history = false; - else if (root.page) root.page = ""; - else root.close(); - } + Keys.onEscapePressed: root.back() // Clicks on the panel must not reach the catcher behind it. MouseArea { anchors.fill: parent } -- cgit v1.2.3