diff options
| author | Ivan Molodetskikh <yalterz@gmail.com> | 2024-04-09 22:37:10 +0400 |
|---|---|---|
| committer | Ivan Molodetskikh <yalterz@gmail.com> | 2024-04-09 23:42:01 +0400 |
| commit | dd011f1012e10b1e3a1dbe100cb603a457bba12a (patch) | |
| tree | 2fb853be8bbe1ee5afdf3dea4974768874a5e793 /src/handlers | |
| parent | 301a2c06613c76d2c16a85ab21ad132e5618454b (diff) | |
| download | niri-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.rs | 13 | ||||
| -rw-r--r-- | src/handlers/xdg_shell.rs | 6 |
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); |
