diff options
| author | Gregor Kleen <gkleen@yggdrasil.li> | 2026-03-06 19:30:48 +0100 |
|---|---|---|
| committer | Gregor Kleen <gkleen@yggdrasil.li> | 2026-03-06 19:30:48 +0100 |
| commit | 16a7fb7e8cfb9a682e411891c0cb81e0aa0a1b15 (patch) | |
| tree | 51e39719158102da5e23491acb90e68950d19a50 | |
| parent | 72abd9db7c907fc1a6ef7bf8d2483649aa3bc949 (diff) | |
| download | nixos-16a7fb7e8cfb9a682e411891c0cb81e0aa0a1b15.tar nixos-16a7fb7e8cfb9a682e411891c0cb81e0aa0a1b15.tar.gz nixos-16a7fb7e8cfb9a682e411891c0cb81e0aa0a1b15.tar.bz2 nixos-16a7fb7e8cfb9a682e411891c0cb81e0aa0a1b15.tar.xz nixos-16a7fb7e8cfb9a682e411891c0cb81e0aa0a1b15.zip | |
niri: screenshare indicators
| -rw-r--r-- | accounts/gkleen@sif/niri.nix | 18 | ||||
| -rw-r--r-- | accounts/gkleen@sif/shell/quickshell/Bar.qml | 8 | ||||
| -rw-r--r-- | accounts/gkleen@sif/shell/quickshell/Services/NiriService.qml | 10 |
3 files changed, 35 insertions, 1 deletions
diff --git a/accounts/gkleen@sif/niri.nix b/accounts/gkleen@sif/niri.nix index b701b4c2..80abfc1a 100644 --- a/accounts/gkleen@sif/niri.nix +++ b/accounts/gkleen@sif/niri.nix | |||
| @@ -711,6 +711,24 @@ in { | |||
| 711 | (sleaf "match" { app-id = "^org\\.gnome\\.Papers$"; }) | 711 | (sleaf "match" { app-id = "^org\\.gnome\\.Papers$"; }) |
| 712 | (sleaf "default-column-display" "tabbed") | 712 | (sleaf "default-column-display" "tabbed") |
| 713 | ]) | 713 | ]) |
| 714 | (plain "window-rule" [ | ||
| 715 | (sleaf "match" { is-window-cast-target = true; }) | ||
| 716 | (plain "border" [ | ||
| 717 | (sleaf "width" 2) | ||
| 718 | (sleaf "active-gradient" { | ||
| 719 | from = "hsla(20 100% 45% 1)"; | ||
| 720 | to = "hsla(340 100% 37.5% 1)"; | ||
| 721 | angle = 29; | ||
| 722 | relative-to = "workspace-view"; | ||
| 723 | }) | ||
| 724 | (sleaf "inactive-gradient" { | ||
| 725 | from = "hsla(20 50% 27.7% 1)"; | ||
| 726 | to = "hsla(340 50% 23% 1)"; | ||
| 727 | angle = 29; | ||
| 728 | relative-to = "workspace-view"; | ||
| 729 | }) | ||
| 730 | ]) | ||
| 731 | ]) | ||
| 714 | 732 | ||
| 715 | (plain "layer-rule" [ | 733 | (plain "layer-rule" [ |
| 716 | (sleaf "match" { namespace = "^notifications$"; }) | 734 | (sleaf "match" { namespace = "^notifications$"; }) |
diff --git a/accounts/gkleen@sif/shell/quickshell/Bar.qml b/accounts/gkleen@sif/shell/quickshell/Bar.qml index 54ac2d3c..e8bd6245 100644 --- a/accounts/gkleen@sif/shell/quickshell/Bar.qml +++ b/accounts/gkleen@sif/shell/quickshell/Bar.qml | |||
| @@ -32,8 +32,14 @@ PanelWindow { | |||
| 32 | implicitHeight: 21 | 32 | implicitHeight: 21 |
| 33 | color: "transparent" | 33 | color: "transparent" |
| 34 | 34 | ||
| 35 | property bool haveScreenshare: Array.from(NiriService.casts).some(cast => cast.target.Output?.name == bar.screen.name) | ||
| 36 | |||
| 35 | Rectangle { | 37 | Rectangle { |
| 36 | color: bar.haveMaximizedWindow ? "black" : Qt.rgba(0, 0, 0, 0.75) | 38 | color: { |
| 39 | if (bar.haveScreenshare) | ||
| 40 | return bar.haveMaximizedWindow ? Qt.rgba(0.2, 0, 0, 1) : Qt.rgba(0.2, 0, 0, 0.75); | ||
| 41 | return bar.haveMaximizedWindow ? "black" : Qt.rgba(0, 0, 0, 0.75); | ||
| 42 | } | ||
| 37 | anchors.fill: parent | 43 | anchors.fill: parent |
| 38 | // bottomLeftRadius: 8 | 44 | // bottomLeftRadius: 8 |
| 39 | // bottomRightRadius: 8 | 45 | // bottomRightRadius: 8 |
diff --git a/accounts/gkleen@sif/shell/quickshell/Services/NiriService.qml b/accounts/gkleen@sif/shell/quickshell/Services/NiriService.qml index 6dbff134..cd4ed125 100644 --- a/accounts/gkleen@sif/shell/quickshell/Services/NiriService.qml +++ b/accounts/gkleen@sif/shell/quickshell/Services/NiriService.qml | |||
| @@ -74,6 +74,10 @@ Singleton { | |||
| 74 | eventWindowFocusTimestampChanged(event.WindowFocusTimestampChanged); | 74 | eventWindowFocusTimestampChanged(event.WindowFocusTimestampChanged); |
| 75 | else if (event.CastsChanged) | 75 | else if (event.CastsChanged) |
| 76 | root.casts = event.CastsChanged.casts | 76 | root.casts = event.CastsChanged.casts |
| 77 | else if (event.CastStartedOrChanged) | ||
| 78 | eventCastStartedOrChanged(event.CastStartedOrChanged); | ||
| 79 | else if (event.CastStopped) | ||
| 80 | eventCastStopped(event.CastStopped); | ||
| 77 | else if (event.Ok && !eventStreamSocket.acked) { eventStreamSocket.acked = true; } | 81 | else if (event.Ok && !eventStreamSocket.acked) { eventStreamSocket.acked = true; } |
| 78 | else if (event.OverviewOpenedOrClosed) {} | 82 | else if (event.OverviewOpenedOrClosed) {} |
| 79 | else if (event.ConfigLoaded) {} | 83 | else if (event.ConfigLoaded) {} |
| @@ -203,4 +207,10 @@ Singleton { | |||
| 203 | return win; | 207 | return win; |
| 204 | }); | 208 | }); |
| 205 | } | 209 | } |
| 210 | function eventCastStartedOrChanged(data) { | ||
| 211 | root.casts = [...Array.from(root.casts).filter(cast => cast.stream_id !== data.cast.stream_id), data.cast]; | ||
| 212 | } | ||
| 213 | function eventCastStopped(data) { | ||
| 214 | root.casts = Array.from(root.casts).filter(cast => cast.stream_id !== data.stream_id); | ||
| 215 | } | ||
| 206 | } | 216 | } |
