diff options
Diffstat (limited to 'desktop/island/StatusPill.qml')
| -rw-r--r-- | desktop/island/StatusPill.qml | 17 |
1 files changed, 15 insertions, 2 deletions
diff --git a/desktop/island/StatusPill.qml b/desktop/island/StatusPill.qml index 915807b..99f1512 100644 --- a/desktop/island/StatusPill.qml +++ b/desktop/island/StatusPill.qml @@ -38,8 +38,17 @@ Capsule { signal openHeadphones() signal closePanel() signal openDrawer() - // Emitted just before a tray menu opens; the menu cannot report its close. + // A tray menu opening and closing. display() reports no close, so menus + // open through a QsMenuAnchor, whose closed fires on any dismissal: an + // entry picked (Quit included), Escape or a click elsewhere. signal menuShown() + signal menuClosed() + + QsMenuAnchor { + id: menuAnchor + anchor.window: pill.window + onClosed: pill.menuClosed() + } expanded: panel === "sound" || panel === "headphones" restWidth: restRow.implicitWidth + 24 @@ -100,8 +109,12 @@ Capsule { if (!wantsMenu) { item.activate(); return; } if (!item.hasMenu) return; const p = trayIcon.mapToItem(null, 0, trayIcon.height + 6); + if (menuAnchor.visible) menuAnchor.close(); + menuAnchor.menu = item.menu; + menuAnchor.anchor.rect.x = p.x; + menuAnchor.anchor.rect.y = p.y; pill.menuShown(); - item.display(pill.window, p.x, p.y); + menuAnchor.open(); } } } |
