From 14a8cd8256620c151693cf2098a91403aa76c3cb Mon Sep 17 00:00:00 2001 From: "Danilo M." Date: Mon, 14 Sep 2026 12:14:56 +0200 Subject: feat(desktop): the drawer, with the top reserved Left of DP-1 because conky holds the right; ExclusionMode.Normal so the bar the drawer is reached from stays visible and clickable. The top is an empty Item claiming the space the notification engine will fill, so the grid already sits where it will sit once that lands. --- desktop/shell.qml | 27 +++++++++++++++++++++++---- 1 file changed, 23 insertions(+), 4 deletions(-) (limited to 'desktop/shell.qml') diff --git a/desktop/shell.qml b/desktop/shell.qml index abddf36..ed219e5 100644 --- a/desktop/shell.qml +++ b/desktop/shell.qml @@ -10,13 +10,12 @@ // GNU General Public License for more details. import Quickshell +import Quickshell.Io import Quickshell.Wayland ShellRoot { - // Quickshell exits once no window is visible, and this shell's drawer is - // closed most of the time. A 1x1 transparent window with an empty mask - // holds the process open without drawing anything or catching a click. - // See AGENTS.md: without it the shell loads, reports no error, and quits. + // Quickshell exits once no window is visible, and the drawer is closed + // most of the time. See AGENTS.md. PanelWindow { visible: true implicitWidth: 1 @@ -26,4 +25,24 @@ ShellRoot { mask: Region {} WlrLayershell.keyboardFocus: WlrKeyboardFocus.None } + + Drawer { + id: drawer + modules: [] + } + + // The waybar launcher and the deep-link keybinds all reach this: + // qs -p ipc call drawer toggle -> the grid + // qs -p ipc call drawer open mail -> the mail page + // Quickshell 0.3.1 IPC requires every declared argument to be present, + // and a parameter with a JS default registers as QVariant, which IPC + // rejects. So the page name cannot be optional: `open` always takes a + // page, and the page-less grid is `toggle`, the zero-argument shape the + // appearance shell uses for its routes and the waybar launcher calls. + IpcHandler { + target: "drawer" + function open(page: string) { drawer.show(page); } + function toggle() { drawer.toggle(""); } + function close() { drawer.close(); } + } } -- cgit v1.2.3