From 1919ca724360c7f95d4600175d4b3d863ab8dbb0 Mon Sep 17 00:00:00 2001 From: bbedward Date: Tue, 28 Apr 2026 10:01:09 -0400 Subject: [PATCH] fix cherry pick issues --- quickshell/Common/I18n.qml | 4 ++ .../Modules/DankBar/Widgets/SystemTrayBar.qml | 52 +++++++++++++++++++ 2 files changed, 56 insertions(+) diff --git a/quickshell/Common/I18n.qml b/quickshell/Common/I18n.qml index 7fb7f796..55383211 100644 --- a/quickshell/Common/I18n.qml +++ b/quickshell/Common/I18n.qml @@ -115,4 +115,8 @@ Singleton { return translations[context][term]; return term; } + + function locale() { + return Qt.locale(); + } } diff --git a/quickshell/Modules/DankBar/Widgets/SystemTrayBar.qml b/quickshell/Modules/DankBar/Widgets/SystemTrayBar.qml index 66318e25..857a96b3 100644 --- a/quickshell/Modules/DankBar/Widgets/SystemTrayBar.qml +++ b/quickshell/Modules/DankBar/Widgets/SystemTrayBar.qml @@ -17,8 +17,11 @@ BasePill { enableCursor: false property var parentWindow: null + property var widgetData: null + property string section: "right" property bool isAtBottom: false property bool isAutoHideBar: false + property bool useOverflowPopup: !widgetData?.trayUseInlineExpansion readonly property var hiddenTrayIds: { const envValue = Quickshell.env("DMS_HIDE_TRAYIDS") || ""; return envValue ? envValue.split(",").map(id => id.trim().toLowerCase()) : []; @@ -41,6 +44,54 @@ BasePill { return `${id}::${tooltipTitle}`; } + function trayIconSourceFor(trayItem) { + let icon = trayItem && trayItem.icon; + if (typeof icon === 'string' || icon instanceof String) { + if (icon === "") + return ""; + if (icon.includes("?path=")) { + const split = icon.split("?path="); + if (split.length !== 2) + return icon; + const name = split[0]; + const path = split[1]; + let fileName = name.substring(name.lastIndexOf("/") + 1); + if (fileName.startsWith("dropboxstatus")) { + fileName = `hicolor/16x16/status/${fileName}`; + } + return `file://${path}/${fileName}`; + } + if (icon.startsWith("/") && !icon.startsWith("file://")) + return `file://${icon}`; + return icon; + } + return ""; + } + + function activateInlineTrayItem(trayItem, anchorItem) { + if (!trayItem) + return; + if (!trayItem.onlyMenu) { + trayItem.activate(); + return; + } + if (!trayItem.hasMenu) + return; + root.showForTrayItem(trayItem, anchorItem, parentScreen, root.isAtBottom, root.isVerticalOrientation, root.axis); + } + + function openInlineTrayContextMenu(trayItem, areaItem, mouse, anchorItem) { + if (!trayItem) { + return; + } + if (!trayItem.hasMenu) { + const gp = areaItem.mapToGlobal(mouse.x, mouse.y); + root.callContextMenuFallback(trayItem.id, Math.round(gp.x), Math.round(gp.y)); + return; + } + root.showForTrayItem(trayItem, anchorItem, parentScreen, root.isAtBottom, root.isVerticalOrientation, root.axis); + } + // ! TODO - replace with either native dbus client (like plugins use) or just a DMS cli or something function callContextMenuFallback(trayItemId, globalX, globalY) { const script = ['ITEMS=$(dbus-send --session --print-reply --dest=org.kde.StatusNotifierWatcher /StatusNotifierWatcher org.freedesktop.DBus.Properties.Get string:org.kde.StatusNotifierWatcher string:RegisteredStatusNotifierItems 2>/dev/null)', 'while IFS= read -r line; do', ' line="${line#*\\\"}"', ' line="${line%\\\"*}"', ' [ -z "$line" ] && continue', ' BUS="${line%%/*}"', ' OBJ="/${line#*/}"', ' ID=$(dbus-send --session --print-reply --dest="$BUS" "$OBJ" org.freedesktop.DBus.Properties.Get string:org.kde.StatusNotifierItem string:Id 2>/dev/null | grep -oP "(?<=\\\")(.*?)(?=\\\")" | tail -1)', ' if [ "$ID" = "$1" ]; then', ' dbus-send --session --type=method_call --dest="$BUS" "$OBJ" org.kde.StatusNotifierItem.ContextMenu int32:"$2" int32:"$3"', ' exit 0', ' fi', 'done <<< "$ITEMS"',].join("\n"); @@ -164,6 +215,7 @@ BasePill { property int dropTargetIndex: -1 property bool suppressShiftAnimation: false readonly property bool hasHiddenItems: allTrayItems.length > mainBarItems.length + readonly property bool inlineExpanded: hasHiddenItems && !useOverflowPopup && menuOpen visible: allTrayItems.length > 0 opacity: allTrayItems.length > 0 ? 1 : 0