fix: track focused window in NiriIpc singleton to fix window title always hidden

This commit is contained in:
Damocles 2026-04-15 17:47:47 +02:00
parent 30b9e5c479
commit d7ca7e405f
2 changed files with 41 additions and 47 deletions

View file

@ -11,6 +11,28 @@ QtObject {
signal windowFocusChanged(var windowId)
signal windowOpenedOrChanged(var window)
property string focusedTitle: ""
property string focusedAppId: ""
property var _focusedProc: Process {
running: true
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: true
command: ["niri", "msg", "--json", "event-stream"]
@ -23,10 +45,22 @@ QtObject {
root.workspacesChanged(ev.WorkspacesChanged.workspaces);
else if (ev.WorkspaceActivated !== undefined)
root.workspaceActivated(ev.WorkspaceActivated.id, ev.WorkspaceActivated.focused);
else if (ev.WindowFocusChanged !== undefined)
else if (ev.WindowFocusChanged !== undefined) {
root.windowFocusChanged(ev.WindowFocusChanged.id);
else if (ev.WindowOpenedOrChanged !== undefined)
if (ev.WindowFocusChanged.id !== null)
root._focusedProc.running = true;
else {
root.focusedTitle = "";
root.focusedAppId = "";
}
} 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) {}
}
}