From 735fb7895bce19d301769e9901d5f4659a7bae46 Mon Sep 17 00:00:00 2001 From: LilFishyChan Date: Tue, 17 Mar 2026 16:22:47 +0800 Subject: [PATCH] fix(SysTrayItem): anchor popup menu to icon instead of fixed coordinates - Improved anchor positioning to make the expanded menu follow the icon dynamically rather than using fixed absolute coordinates. - Replaced manual `rect` calculations with direct `item: root` binding. - Updated `gravity` and `edges` logic to properly support both vertical and horizontal bar orientations. --- .../quickshell/ii/modules/ii/bar/SysTray.qml | 5 ++++ .../ii/modules/ii/bar/SysTrayItem.qml | 25 +++++++++++-------- 2 files changed, 20 insertions(+), 10 deletions(-) diff --git a/dots/.config/quickshell/ii/modules/ii/bar/SysTray.qml b/dots/.config/quickshell/ii/modules/ii/bar/SysTray.qml index 56d33e0d4..69d98105a 100644 --- a/dots/.config/quickshell/ii/modules/ii/bar/SysTray.qml +++ b/dots/.config/quickshell/ii/modules/ii/bar/SysTray.qml @@ -29,6 +29,11 @@ Item { } function setExtraWindowAndGrabFocus(window) { + if (root.activeMenu && root.activeMenu !== window) { + if (typeof root.activeMenu.close === "function") + root.activeMenu.close(); + root.activeMenu = null; + } root.activeMenu = window; root.grabFocus(); } diff --git a/dots/.config/quickshell/ii/modules/ii/bar/SysTrayItem.qml b/dots/.config/quickshell/ii/modules/ii/bar/SysTrayItem.qml index 6230de0f8..d85b5fe6b 100644 --- a/dots/.config/quickshell/ii/modules/ii/bar/SysTrayItem.qml +++ b/dots/.config/quickshell/ii/modules/ii/bar/SysTrayItem.qml @@ -26,7 +26,11 @@ MouseArea { item.activate(); break; case Qt.RightButton: - if (item.hasMenu) menu.open(); + if (item.hasMenu) + if (menu.active && menu.item && typeof menu.item.close === "function") + menu.item.close(); + else + menu.open(); break; } event.accepted = true; @@ -44,15 +48,16 @@ MouseArea { sourceComponent: SysTrayMenu { Component.onCompleted: this.open(); trayItemMenuHandle: root.item.menu - anchor { - window: root.QsWindow.window - rect.x: root.x + (Config.options.bar.vertical ? 0 : QsWindow.window?.width) - rect.y: root.y + (Config.options.bar.vertical ? QsWindow.window?.height : 0) - rect.height: root.height - rect.width: root.width - edges: Config.options.bar.bottom ? (Edges.Top | Edges.Left) : (Edges.Bottom | Edges.Right) - gravity: Config.options.bar.bottom ? (Edges.Top | Edges.Left) : (Edges.Bottom | Edges.Right) - } + anchor { + window: root.QsWindow.window + item: root + gravity: Config.options.bar.vertical + ? (Config.options.bar.bottom ? Edges.Left : Edges.Right) + : (Config.options.bar.bottom ? Edges.Top : Edges.Bottom) + edges: Config.options.bar.vertical + ? (Config.options.bar.bottom ? Edges.Left : Edges.Right) + : (Config.options.bar.bottom ? Edges.Top : Edges.Bottom) + } onMenuOpened: (window) => root.menuOpened(window); onMenuClosed: { root.menuClosed();