summaryrefslogtreecommitdiffstats
path: root/home-configuration/config/quickshell/modules/notifications/NotificationFocus.qml
diff options
context:
space:
mode:
authorcoast <coasteen@proton.me>2026-09-07 07:07:22 +0330
committercoast <coasteen@proton.me>2026-09-07 07:07:22 +0330
commit7922ded35ff292e485c3369dab9726b9142ce526 (patch)
treeea47cb7bb569b5fb8c44ede3357f1a8b4b41722c /home-configuration/config/quickshell/modules/notifications/NotificationFocus.qml
parenta7cdf9580a901ed65f179417f6ed8a0848491b66 (diff)
downloadnix-7922ded35ff292e485c3369dab9726b9142ce526.tar.gz
nix-7922ded35ff292e485c3369dab9726b9142ce526.tar.bz2
nix-7922ded35ff292e485c3369dab9726b9142ce526.tar.xz
nix-7922ded35ff292e485c3369dab9726b9142ce526.tar.zst
a lot of quickshell
Diffstat (limited to 'home-configuration/config/quickshell/modules/notifications/NotificationFocus.qml')
-rw-r--r--home-configuration/config/quickshell/modules/notifications/NotificationFocus.qml123
1 files changed, 123 insertions, 0 deletions
diff --git a/home-configuration/config/quickshell/modules/notifications/NotificationFocus.qml b/home-configuration/config/quickshell/modules/notifications/NotificationFocus.qml
new file mode 100644
index 0000000..af52eaa
--- /dev/null
+++ b/home-configuration/config/quickshell/modules/notifications/NotificationFocus.qml
@@ -0,0 +1,123 @@
+import QtQuick
+import Quickshell
+import Quickshell.Io
+import "../../config.js" as Config
+
+Item {
+ id: root
+
+ property string pendingApp: ""
+
+ Process {
+ id: windowsProcess
+
+ command: ["niri", "msg", "-j", "windows"]
+
+ stdout: StdioCollector {
+ id: windowsOutput
+
+ onStreamFinished: {
+ var windows
+
+ try {
+ windows = JSON.parse(this.text)
+ } catch (error) {
+ console.error(
+ "Failed to parse niri windows:",
+ error
+ )
+
+ root.pendingApp = ""
+ return
+ }
+
+ var app = root.pendingApp.toLowerCase()
+ root.pendingApp = ""
+
+ if (Config.notificationVesktopNames.indexOf(app) !== -1) {
+ for (var i = 0; i < windows.length; i++) {
+ var niriWindow = windows[i]
+ var appId = (niriWindow.app_id || "").toLowerCase()
+
+ if (appId === Config.notificationVesktopAppId) {
+ console.log(
+ "FOCUSING VESKTOP WINDOW:",
+ niriWindow.id,
+ niriWindow.title
+ )
+
+ focusProcess.exec([
+ "niri",
+ "msg",
+ "action",
+ "focus-window",
+ "--id",
+ String(niriWindow.id)
+ ])
+
+ return
+ }
+ }
+
+ console.log(
+ "No matching Niri window found for:",
+ app
+ )
+
+ return
+ }
+
+ for (var j = 0; j < windows.length; j++) {
+ var window = windows[j]
+ var windowAppId = (window.app_id || "").toLowerCase()
+
+ if (
+ windowAppId === app ||
+ windowAppId === app + ".desktop"
+ ) {
+ console.log(
+ "FOCUSING WINDOW:",
+ window.id,
+ window.app_id,
+ window.title
+ )
+
+ focusProcess.exec([
+ "niri",
+ "msg",
+ "action",
+ "focus-window",
+ "--id",
+ String(window.id)
+ ])
+
+ return
+ }
+ }
+
+ console.log(
+ "No matching Niri window found for:",
+ app
+ )
+ }
+ }
+ }
+
+ Process {
+ id: focusProcess
+ }
+
+ function focusSource(notification) {
+ if (!notification)
+ return
+
+ root.pendingApp = notification.appName
+
+ windowsProcess.exec([
+ "niri",
+ "msg",
+ "-j",
+ "windows"
+ ])
+ }
+}