aboutsummaryrefslogtreecommitdiff
path: root/src/handlers/xdg_shell.rs
diff options
context:
space:
mode:
authorIvan Molodetskikh <yalterz@gmail.com>2024-08-23 15:41:06 +0300
committerIvan Molodetskikh <yalterz@gmail.com>2024-08-23 15:41:06 +0300
commitc8839f7658588bfd7f0f41bf2c2726e526366abf (patch)
tree99a2efd437d61d2b1eeda7b96bc68aa940716ef6 /src/handlers/xdg_shell.rs
parentdfe3580607ff469837c23b34db34882b16d87a47 (diff)
downloadniri-c8839f7658588bfd7f0f41bf2c2726e526366abf.tar.gz
niri-c8839f7658588bfd7f0f41bf2c2726e526366abf.tar.bz2
niri-c8839f7658588bfd7f0f41bf2c2726e526366abf.zip
Implement window close transaction
Mainly visible with disabled animations.
Diffstat (limited to 'src/handlers/xdg_shell.rs')
-rw-r--r--src/handlers/xdg_shell.rs8
1 files changed, 6 insertions, 2 deletions
diff --git a/src/handlers/xdg_shell.rs b/src/handlers/xdg_shell.rs
index ec0b99e3..b77f566e 100644
--- a/src/handlers/xdg_shell.rs
+++ b/src/handlers/xdg_shell.rs
@@ -40,6 +40,7 @@ use crate::input::resize_grab::ResizeGrab;
use crate::input::DOUBLE_CLICK_TIME;
use crate::layout::workspace::ColumnWidth;
use crate::niri::{PopupGrabState, State};
+use crate::utils::transaction::Transaction;
use crate::utils::{get_monotonic_time, send_scale_transform, ResizeEdge};
use crate::window::{InitialConfigureState, ResolvedWindowRules, Unmapped, WindowRef};
@@ -485,16 +486,19 @@ impl XdgShellHandler for State {
self.backend.with_primary_renderer(|renderer| {
self.niri.layout.store_unmap_snapshot(renderer, &window);
});
+
+ let transaction = Transaction::new();
+ let blocker = transaction.blocker();
self.backend.with_primary_renderer(|renderer| {
self.niri
.layout
- .start_close_animation_for_window(renderer, &window);
+ .start_close_animation_for_window(renderer, &window, blocker);
});
let active_window = self.niri.layout.active_window().map(|(m, _)| &m.window);
let was_active = active_window == Some(&window);
- self.niri.layout.remove_window(&window);
+ self.niri.layout.remove_window(&window, transaction);
self.add_default_dmabuf_pre_commit_hook(surface.wl_surface());
if was_active {