aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorIvan Molodetskikh <yalterz@gmail.com>2024-05-04 11:37:58 +0400
committerIvan Molodetskikh <yalterz@gmail.com>2024-05-04 11:37:58 +0400
commit7093385b4d51978a26f9d8c7e2230b4302e5f872 (patch)
treeef6a8e15b74ada17792b509347bdfe0ee3ba5b47
parent3748f6cd6a044ec56c461c20f07fac9197ad1119 (diff)
downloadniri-7093385b4d51978a26f9d8c7e2230b4302e5f872.tar.gz
niri-7093385b4d51978a26f9d8c7e2230b4302e5f872.tar.bz2
niri-7093385b4d51978a26f9d8c7e2230b4302e5f872.zip
Update tile before taking unmap snapshot
-rw-r--r--src/layout/tile.rs11
-rw-r--r--src/layout/workspace.rs40
2 files changed, 35 insertions, 16 deletions
diff --git a/src/layout/tile.rs b/src/layout/tile.rs
index 68ee248e..f1816781 100644
--- a/src/layout/tile.rs
+++ b/src/layout/tile.rs
@@ -832,13 +832,16 @@ impl<W: LayoutElement> Tile<W> {
}
}
- pub fn store_unmap_snapshot_if_empty(&self, renderer: &mut GlesRenderer, scale: Scale<f64>) {
- let mut snapshot = self.unmap_snapshot.borrow_mut();
- if snapshot.is_some() {
+ pub fn store_unmap_snapshot_if_empty(
+ &mut self,
+ renderer: &mut GlesRenderer,
+ scale: Scale<f64>,
+ ) {
+ if self.unmap_snapshot.get_mut().is_some() {
return;
}
- *snapshot = Some(self.render_snapshot(renderer, scale));
+ *self.unmap_snapshot.get_mut() = Some(self.render_snapshot(renderer, scale));
}
fn render_snapshot(
diff --git a/src/layout/workspace.rs b/src/layout/workspace.rs
index 05d5f280..a14f804e 100644
--- a/src/layout/workspace.rs
+++ b/src/layout/workspace.rs
@@ -1194,11 +1194,6 @@ impl<W: LayoutElement> Workspace<W> {
}
pub fn store_unmap_snapshot_if_empty(&mut self, renderer: &mut GlesRenderer, window: &W::Id) {
- let (tile, _) = self
- .tiles_in_render_order()
- .find(|(tile, _)| tile.window().id() == window)
- .unwrap();
-
// FIXME: workspaces should probably cache their last used scale so they can be correctly
// rendered even with no outputs connected.
let output_scale = self
@@ -1207,16 +1202,37 @@ impl<W: LayoutElement> Workspace<W> {
.map(|o| Scale::from(o.current_scale().fractional_scale()))
.unwrap_or(Scale::from(1.));
- tile.store_unmap_snapshot_if_empty(renderer, output_scale);
+ let mut view_rect_ws = Rectangle::from_loc_and_size((self.view_pos(), 0), self.view_size);
+ for col in &mut self.columns {
+ let mut view_rect = view_rect_ws;
+ view_rect.loc -= col.render_offset();
+ if !col.is_fullscreen {
+ view_rect.loc.y -= self.working_area.loc.y + self.options.gaps;
+ }
+
+ for tile in &mut col.tiles {
+ if tile.window().id() == window {
+ tile.update(false, view_rect);
+ tile.store_unmap_snapshot_if_empty(renderer, output_scale);
+ return;
+ }
+
+ view_rect.loc.y -= tile.tile_size().h + self.options.gaps;
+ }
+
+ view_rect_ws.loc.x -= col.width() + self.options.gaps;
+ }
}
pub fn clear_unmap_snapshot(&mut self, window: &W::Id) {
- let (tile, _) = self
- .tiles_in_render_order()
- .find(|(tile, _)| tile.window().id() == window)
- .unwrap();
-
- let _ = tile.take_unmap_snapshot();
+ for col in &mut self.columns {
+ for tile in &mut col.tiles {
+ if tile.window().id() == window {
+ let _ = tile.take_unmap_snapshot();
+ return;
+ }
+ }
+ }
}
pub fn start_close_animation_for_window(