aboutsummaryrefslogtreecommitdiff
path: root/src/handlers
diff options
context:
space:
mode:
authorIvan Molodetskikh <yalterz@gmail.com>2024-06-27 11:36:24 +0400
committerIvan Molodetskikh <yalterz@gmail.com>2024-06-28 10:39:35 +0400
commitdc92d80b9f8de761df2aa0bfc90b61d53b9c0831 (patch)
tree9436ec6c92f9f967aa309a6f1ca6aa5b8ab5cb8a /src/handlers
parent0757ad08e776665603cba238301295ad27132d06 (diff)
downloadniri-dc92d80b9f8de761df2aa0bfc90b61d53b9c0831.tar.gz
niri-dc92d80b9f8de761df2aa0bfc90b61d53b9c0831.tar.bz2
niri-dc92d80b9f8de761df2aa0bfc90b61d53b9c0831.zip
Implement initial window screencasting
Diffstat (limited to 'src/handlers')
-rw-r--r--src/handlers/compositor.rs9
-rw-r--r--src/handlers/xdg_shell.rs6
2 files changed, 15 insertions, 0 deletions
diff --git a/src/handlers/compositor.rs b/src/handlers/compositor.rs
index 845b720d..34030124 100644
--- a/src/handlers/compositor.rs
+++ b/src/handlers/compositor.rs
@@ -209,6 +209,9 @@ impl CompositorHandler for State {
let window = mapped.window.clone();
let output = output.clone();
+ #[cfg(feature = "xdp-gnome-screencast")]
+ let id = mapped.id();
+
// This is a commit of a previously-mapped toplevel.
let is_mapped =
with_renderer_surface_state(surface, |state| state.buffer().is_some())
@@ -235,6 +238,12 @@ impl CompositorHandler for State {
let active_window = self.niri.layout.active_window().map(|(m, _)| &m.window);
let was_active = active_window == Some(&window);
+ #[cfg(feature = "xdp-gnome-screencast")]
+ self.niri
+ .stop_casts_for_target(crate::pw_utils::CastTarget::Window {
+ id: u64::from(id.get()),
+ });
+
self.niri.layout.remove_window(&window);
if was_active {
diff --git a/src/handlers/xdg_shell.rs b/src/handlers/xdg_shell.rs
index 30b2f5d8..f3337786 100644
--- a/src/handlers/xdg_shell.rs
+++ b/src/handlers/xdg_shell.rs
@@ -466,6 +466,12 @@ impl XdgShellHandler for State {
let window = mapped.window.clone();
let output = output.clone();
+ #[cfg(feature = "xdp-gnome-screencast")]
+ self.niri
+ .stop_casts_for_target(crate::pw_utils::CastTarget::Window {
+ id: u64::from(mapped.id().get()),
+ });
+
self.backend.with_primary_renderer(|renderer| {
self.niri.layout.store_unmap_snapshot(renderer, &window);
});