shell: Recalculate tiling-layer when layer-shell updates

This commit is contained in:
Victoria Brekenfeld 2023-07-13 17:40:49 +02:00
parent a9489b50c5
commit 1868f6b0f7
5 changed files with 30 additions and 10 deletions

2
Cargo.lock generated
View file

@ -3734,7 +3734,7 @@ checksum = "a507befe795404456341dfab10cef66ead4c041f62b8b11bbb92bffe5d0953e0"
[[package]]
name = "smithay"
version = "0.3.0"
source = "git+https://github.com/smithay//smithay?rev=901f64d01e#901f64d01e3dc4ed7448884b821748dbb1ab5455"
source = "git+https://github.com/smithay//smithay?rev=b401646560#b401646560c43cc65f31a0731efe6b963c9d3e61"
dependencies = [
"appendlist",
"ash",

View file

@ -80,4 +80,4 @@ debug = true
lto = "fat"
[patch."https://github.com/Smithay/smithay.git"]
smithay = { git = "https://github.com/smithay//smithay", rev = "901f64d01e" }
smithay = { git = "https://github.com/smithay//smithay", rev = "b401646560" }

View file

@ -1394,8 +1394,13 @@ impl Shell {
})
};
let mut map = layer_map_for_output(&output);
map.map_layer(&layer_surface).unwrap();
{
let mut map = layer_map_for_output(&output);
map.map_layer(&layer_surface).unwrap();
}
for workspace in state.common.shell.workspaces.spaces_mut() {
workspace.tiling_layer.recalculate(&output);
}
if wants_focus {
Shell::set_focus(state, Some(&layer_surface.into()), &seat, None)

View file

@ -237,12 +237,23 @@ impl CompositorHandler for State {
self.common.shell.popups.commit(surface);
// re-arrange layer-surfaces (commits may change size and positioning)
if let Some(output) = self.common.shell.outputs().find(|o| {
let map = layer_map_for_output(o);
map.layer_for_surface(surface, WindowSurfaceType::ALL)
.is_some()
}) {
layer_map_for_output(output).arrange();
let layer_output = self
.common
.shell
.outputs()
.find(|o| {
let map = layer_map_for_output(o);
map.layer_for_surface(surface, WindowSurfaceType::ALL)
.is_some()
})
.cloned();
if let Some(output) = layer_output {
let changed = layer_map_for_output(&output).arrange();
if changed {
for workspace in self.common.shell.workspaces.spaces_mut() {
workspace.tiling_layer.recalculate(&output);
}
}
}
let mut scheduled_sessions = self.schedule_workspace_sessions(surface);

View file

@ -75,6 +75,10 @@ impl WlrLayerShellHandler for State {
map.unmap_layer(&layer);
}
for workspace in self.common.shell.workspaces.spaces_mut() {
workspace.tiling_layer.recalculate(&output);
}
// collect screencopy sessions needing an update
let mut scheduled_sessions = self.schedule_workspace_sessions(surface.wl_surface());
if let Some(sessions) = output.user_data().get::<PendingScreencopyBuffers>() {