aboutsummaryrefslogtreecommitdiff
path: root/src/handlers
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
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')
-rw-r--r--src/handlers/compositor.rs7
-rw-r--r--src/handlers/xdg_shell.rs8
2 files changed, 11 insertions, 4 deletions
diff --git a/src/handlers/compositor.rs b/src/handlers/compositor.rs
index e833494c..9614883d 100644
--- a/src/handlers/compositor.rs
+++ b/src/handlers/compositor.rs
@@ -20,6 +20,7 @@ use smithay::{delegate_compositor, delegate_shm};
use super::xdg_shell::add_mapped_toplevel_pre_commit_hook;
use crate::niri::{ClientState, State};
use crate::utils::send_scale_transform;
+use crate::utils::transaction::Transaction;
use crate::window::{InitialConfigureState, Mapped, ResolvedWindowRules, Unmapped};
impl CompositorHandler for State {
@@ -193,11 +194,13 @@ impl CompositorHandler for State {
});
// Must start the close animation before window.on_commit().
+ let transaction = Transaction::new();
if !is_mapped {
+ 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);
});
}
@@ -216,7 +219,7 @@ impl CompositorHandler for State {
id: u64::from(id.get()),
});
- self.niri.layout.remove_window(&window);
+ self.niri.layout.remove_window(&window, transaction);
self.add_default_dmabuf_pre_commit_hook(surface);
if was_active {
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 {