73 lines
2.7 KiB
QML
73 lines
2.7 KiB
QML
pragma Singleton
|
|
|
|
import QtQuick
|
|
import Quickshell.Io
|
|
|
|
QtObject {
|
|
id: root
|
|
|
|
signal workspacesChanged(var workspaces)
|
|
signal workspaceActivated(int id, bool focused)
|
|
signal windowFocusChanged(var windowId)
|
|
signal windowOpenedOrChanged(var window)
|
|
|
|
readonly property bool available: Quickshell.env("NIRI_SOCKET") !== ""
|
|
|
|
property string focusedTitle: ""
|
|
property string focusedAppId: ""
|
|
property bool overviewOpen: false
|
|
|
|
property var _focusedProc: Process {
|
|
running: root.available
|
|
command: ["niri", "msg", "--json", "focused-window"]
|
|
stdout: StdioCollector {
|
|
onStreamFinished: {
|
|
try {
|
|
const w = JSON.parse(text);
|
|
if (w) {
|
|
root.focusedTitle = w.title || "";
|
|
root.focusedAppId = w.app_id || "";
|
|
} else {
|
|
root.focusedTitle = "";
|
|
root.focusedAppId = "";
|
|
}
|
|
} catch (e) {}
|
|
}
|
|
}
|
|
}
|
|
|
|
property var _eventStream: Process {
|
|
running: root.available
|
|
command: ["niri", "msg", "--json", "event-stream"]
|
|
stdout: SplitParser {
|
|
splitMarker: "\n"
|
|
onRead: line => {
|
|
try {
|
|
const ev = JSON.parse(line);
|
|
if (ev.WorkspacesChanged !== undefined)
|
|
root.workspacesChanged(ev.WorkspacesChanged.workspaces);
|
|
else if (ev.WorkspaceActivated !== undefined)
|
|
root.workspaceActivated(ev.WorkspaceActivated.id, ev.WorkspaceActivated.focused);
|
|
else if (ev.WindowFocusChanged !== undefined) {
|
|
root.windowFocusChanged(ev.WindowFocusChanged.id);
|
|
if (ev.WindowFocusChanged.id !== null)
|
|
root._focusedProc.running = true;
|
|
else {
|
|
root.focusedTitle = "";
|
|
root.focusedAppId = "";
|
|
}
|
|
} else if (ev.OverviewOpenedOrClosed !== undefined) {
|
|
root.overviewOpen = ev.OverviewOpenedOrClosed.is_open;
|
|
} else if (ev.WindowOpenedOrChanged !== undefined) {
|
|
root.windowOpenedOrChanged(ev.WindowOpenedOrChanged.window);
|
|
const w = ev.WindowOpenedOrChanged.window;
|
|
if (w.is_focused) {
|
|
root.focusedTitle = w.title || "";
|
|
root.focusedAppId = w.app_id || "";
|
|
}
|
|
}
|
|
} catch (e) {}
|
|
}
|
|
}
|
|
}
|
|
}
|