Files
omarchycn/test/shell.d/fixtures/tray-menu-activation/shell.qml
T

76 lines
1.9 KiB
QML

import QtQuick
import Quickshell
import Quickshell.Services.SystemTray
ShellRoot {
id: root
property string resultPath: Quickshell.env("OMARCHY_QML_TEST_RESULT")
property var trayItem: null
property int attempts: 0
property string lastState: ""
function shellQuote(value) {
return "'" + String(value).replace(/'/g, "'\\''") + "'"
}
function writeResult(ok, message) {
var payload = JSON.stringify({ ok: ok, message: String(message || "") })
if (resultPath) {
Quickshell.execDetached(["bash", "-lc", "printf '%s' " + shellQuote(payload) + " > " + shellQuote(resultPath)])
}
}
function findTrayItem() {
var values = SystemTray.items.values
var ids = []
for (var i = 0; i < values.length; i++) {
ids.push(String(values[i].id || ""))
if (String(values[i].id || "") === "omarchy-test-tray") return values[i]
}
lastState = "items=" + ids.join(",")
return null
}
function triggerSignIn() {
var rows = menuOpener.children.values
var labels = []
for (var i = 0; i < rows.length; i++) {
var row = rows[i]
labels.push(String(row.text || ""))
if (!row.isSeparator && String(row.text || "") === "Sign in") {
row.triggered()
writeResult(true, "triggered Sign in")
return true
}
}
lastState = "item=" + String(root.trayItem ? root.trayItem.id : "") + " rows=" + labels.join(",")
return false
}
QsMenuOpener {
id: menuOpener
menu: root.trayItem ? root.trayItem.menu : null
}
Timer {
interval: 100
running: true
repeat: true
onTriggered: {
root.attempts++
if (!root.trayItem) root.trayItem = root.findTrayItem()
if (root.trayItem && root.triggerSignIn()) {
stop()
return
}
if (root.attempts >= 50) {
root.writeResult(false, "timed out waiting for tray menu Sign in row; " + root.lastState)
stop()
}
}
}
}