mirror of
https://github.com/AvengeMedia/DankMaterialShell.git
synced 2026-04-15 02:02:08 -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:
@@ -2,6 +2,7 @@ import QtQuick
|
|||||||
import Quickshell.Io
|
import Quickshell.Io
|
||||||
import Quickshell.Hyprland
|
import Quickshell.Hyprland
|
||||||
import Quickshell.Wayland
|
import Quickshell.Wayland
|
||||||
|
import Quickshell.Services.SystemTray
|
||||||
import qs.Common
|
import qs.Common
|
||||||
import qs.Services
|
import qs.Services
|
||||||
import qs.Modules.Settings.DisplayConfig
|
import qs.Modules.Settings.DisplayConfig
|
||||||
@@ -1530,4 +1531,56 @@ Item {
|
|||||||
|
|
||||||
target: "outputs"
|
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"
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user