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();