aboutsummaryrefslogtreecommitdiff
path: root/src/handlers
diff options
context:
space:
mode:
authorIvan Molodetskikh <yalterz@gmail.com>2024-04-09 22:37:10 +0400
committerIvan Molodetskikh <yalterz@gmail.com>2024-04-09 23:42:01 +0400
commitdd011f1012e10b1e3a1dbe100cb603a457bba12a (patch)
tree2fb853be8bbe1ee5afdf3dea4974768874a5e793 /src/handlers
parent301a2c06613c76d2c16a85ab21ad132e5618454b (diff)
downloadniri-dd011f1012e10b1e3a1dbe100cb603a457bba12a.tar.gz
niri-dd011f1012e10b1e3a1dbe100cb603a457bba12a.tar.bz2
niri-dd011f1012e10b1e3a1dbe100cb603a457bba12a.zip
Implement window closing animations
Diffstat (limited to 'src/handlers')
-rw-r--r--src/handlers/compositor.rs13
-rw-r--r--src/handlers/xdg_shell.rs6
2 files changed, 17 insertions, 2 deletions
diff --git a/src/handlers/compositor.rs b/src/handlers/compositor.rs
index 9b164865..2e657151 100644
--- a/src/handlers/compositor.rs
+++ b/src/handlers/compositor.rs
@@ -187,8 +187,6 @@ impl CompositorHandler for State {
let window = mapped.window.clone();
let output = output.clone();
- window.on_commit();
-
// This is a commit of a previously-mapped toplevel.
let is_mapped =
with_renderer_surface_state(surface, |state| state.buffer().is_some())
@@ -197,6 +195,17 @@ impl CompositorHandler for State {
false
});
+ // Must start the close animation before window.on_commit().
+ if !is_mapped {
+ self.backend.with_primary_renderer(|renderer| {
+ self.niri
+ .layout
+ .start_close_animation_for_window(renderer, &window);
+ });
+ }
+
+ window.on_commit();
+
if !is_mapped {
// The toplevel got unmapped.
//
diff --git a/src/handlers/xdg_shell.rs b/src/handlers/xdg_shell.rs
index c31c6404..2cbaad25 100644
--- a/src/handlers/xdg_shell.rs
+++ b/src/handlers/xdg_shell.rs
@@ -382,6 +382,12 @@ impl XdgShellHandler for State {
let window = mapped.window.clone();
let output = output.clone();
+ self.backend.with_primary_renderer(|renderer| {
+ self.niri
+ .layout
+ .start_close_animation_for_window(renderer, &window);
+ });
+
let active_window = self.niri.layout.active_window().map(|(m, _)| &m.window);
let was_active = active_window == Some(&window);