1
0
mirror of https://github.com/AvengeMedia/DankMaterialShell.git synced 2026-04-04 12:52:06 -04:00

feat(ipc): add tray icon control commands (#1576)

Add IPC commands to interact with system tray icons:
  - `dms ipc call tray list` - list all tray items
  - `dms ipc call tray activate <id>` - activate (left-click) a tray item
  - `dms ipc call tray status <id>` - show tray item details
This commit is contained in:
xxyangyoulin
2026-02-03 22:36:35 +08:00
committed by GitHub
parent 22f16f1da3
commit 22ab5b9660

View File

@@ -2,6 +2,7 @@ import QtQuick
import Quickshell.Io
import Quickshell.Hyprland
import Quickshell.Wayland
import Quickshell.Services.SystemTray
import qs.Common
import qs.Services
import qs.Modules.Settings.DisplayConfig
@@ -1530,4 +1531,56 @@ Item {
target: "outputs"
}
IpcHandler {
function findTrayItem(itemId: string): var {
if (!itemId)
return null;
return SystemTray.items.values.find(item => {
const id = item?.id || "";
const title = item?.tooltipTitle || "";
const fullKey = title ? `${id}::${title}` : id;
return fullKey === itemId || id === itemId;
});
}
function list(): string {
const items = SystemTray.items.values;
if (items.length === 0)
return "No tray items available";
return items.map(item => {
const id = item?.id || "";
const title = item?.tooltipTitle || "";
const fullKey = title ? `${id}::${title}` : id;
const hasMenu = item?.hasMenu ? " [menu]" : "";
return fullKey + hasMenu;
}).join("\n");
}
function activate(itemId: string): string {
const item = findTrayItem(itemId);
if (!item)
return `ERROR: Tray item not found: ${itemId}`;
item.activate();
return `SUCCESS: Activated ${itemId}`;
}
function status(itemId: string): string {
const item = findTrayItem(itemId);
if (!item)
return `ERROR: Tray item not found: ${itemId}`;
const id = item?.id || "";
const title = item?.tooltipTitle || "";
const hasMenu = item?.hasMenu || false;
const onlyMenu = item?.onlyMenu || false;
return `id: ${id}\ntitle: ${title}\nhasMenu: ${hasMenu}\nonlyMenu: ${onlyMenu}`;
}
target: "tray"
}
}