bar: refractor tray model into a service

This commit is contained in:
end-4
2025-11-16 12:04:54 +01:00
parent 803f2ecb42
commit c71a2498d0
3 changed files with 36 additions and 16 deletions
@@ -1,10 +1,11 @@
import qs.modules.common
import qs.modules.common.widgets
import QtQuick import QtQuick
import QtQuick.Layouts import QtQuick.Layouts
import Quickshell import Quickshell
import Quickshell.Hyprland import Quickshell.Hyprland
import Quickshell.Services.SystemTray import Quickshell.Services.SystemTray
import qs.services
import qs.modules.common
import qs.modules.common.widgets
Item { Item {
id: root id: root
@@ -17,13 +18,8 @@ Item {
property bool showOverflowMenu: true property bool showOverflowMenu: true
property var activeMenu: null property var activeMenu: null
property bool smartTray: Config.options.bar.tray.filterPassive property list<var> pinnedItems: TrayService.pinnedItems
property list<var> itemsInUserList: SystemTray.items.values.filter(i => (Config.options.bar.tray.pinnedItems.includes(i.id) && (!smartTray || i.status !== Status.Passive))) property list<var> unpinnedItems: TrayService.unpinnedItems
property list<var> itemsNotInUserList: SystemTray.items.values.filter(i => (!Config.options.bar.tray.pinnedItems.includes(i.id) && (!smartTray || i.status !== Status.Passive)))
property bool invertPins: Config.options.bar.tray.invertPinnedItems
property list<var> pinnedItems: invertPins ? itemsNotInUserList : itemsInUserList
property list<var> unpinnedItems: invertPins ? itemsInUserList : itemsNotInUserList
onUnpinnedItemsChanged: { onUnpinnedItemsChanged: {
if (unpinnedItems.length == 0) root.closeOverflowMenu(); if (unpinnedItems.length == 0) root.closeOverflowMenu();
} }
@@ -1,11 +1,12 @@
import qs.modules.common
import qs.modules.common.widgets
import qs.modules.common.functions
import QtQuick import QtQuick
import Quickshell import Quickshell
import Quickshell.Services.SystemTray import Quickshell.Services.SystemTray
import Quickshell.Widgets import Quickshell.Widgets
import Qt5Compat.GraphicalEffects import Qt5Compat.GraphicalEffects
import qs.services
import qs.modules.common
import qs.modules.common.widgets
import qs.modules.common.functions
MouseArea { MouseArea {
id: root id: root
@@ -31,10 +32,7 @@ MouseArea {
event.accepted = true; event.accepted = true;
} }
onEntered: { onEntered: {
tooltip.text = item.tooltipTitle.length > 0 ? item.tooltipTitle tooltip.text = TrayService.getTooltipForItem(root.item);
: (item.title.length > 0 ? item.title : item.id);
if (item.tooltipDescription.length > 0) tooltip.text += " • " + item.tooltipDescription;
if (Config.options.bar.tray.showItemId) tooltip.text += "\n[" + item.id + "]";
} }
Loader { Loader {
@@ -0,0 +1,26 @@
pragma Singleton
import qs.modules.common
import QtQuick
import Quickshell
import Quickshell.Services.SystemTray
Singleton {
id: root
property bool smartTray: Config.options.bar.tray.filterPassive
property list<var> itemsInUserList: SystemTray.items.values.filter(i => (Config.options.bar.tray.pinnedItems.includes(i.id) && (!smartTray || i.status !== Status.Passive)))
property list<var> itemsNotInUserList: SystemTray.items.values.filter(i => (!Config.options.bar.tray.pinnedItems.includes(i.id) && (!smartTray || i.status !== Status.Passive)))
property bool invertPins: Config.options.bar.tray.invertPinnedItems
property list<var> pinnedItems: invertPins ? itemsNotInUserList : itemsInUserList
property list<var> unpinnedItems: invertPins ? itemsInUserList : itemsNotInUserList
function getTooltipForItem(item) {
var result = item.tooltipTitle.length > 0 ? item.tooltipTitle
: (item.title.length > 0 ? item.title : item.id);
if (item.tooltipDescription.length > 0) result += " • " + item.tooltipDescription;
if (Config.options.bar.tray.showItemId) result += "\n[" + item.id + "]";
return result;
}
}