From 4ecf1c2e719ebf36bd8b8d42f1f0d9cc8ccb93c7 Mon Sep 17 00:00:00 2001 From: Ottatop Date: Mon, 24 Jun 2024 12:33:28 -0500 Subject: [PATCH] Apply window rules earlier Fixes winit applications getting a wl_shm_pool protocol error Longer explanation: It seems if you immediately change a winit window's decoration mode after it binds xdg-decoration then winit no likey and it requests a shm buffer with 0 width leading to a protocol error. If the decoration window rule is applied earlier this doesn't happen --- src/handlers.rs | 9 ++++----- tests/lua_api.rs | 5 ----- 2 files changed, 4 insertions(+), 10 deletions(-) diff --git a/src/handlers.rs b/src/handlers.rs index 10a1f55..76083ea 100644 --- a/src/handlers.rs +++ b/src/handlers.rs @@ -206,9 +206,6 @@ impl CompositorHandler for State { let output = self.pinnacle.focused_output().cloned(); if let Some(output) = output.as_ref() { - tracing::debug!("Placing toplevel"); - unmapped_window.place_on_output(output); - output.with_state_mut(|state| { state.focus_stack.set_focus(unmapped_window.clone()) }); @@ -223,8 +220,6 @@ impl CompositorHandler for State { self.pinnacle.raise_window(unmapped_window.clone(), true); - self.pinnacle.apply_window_rules(&unmapped_window); - if let Some(focused_output) = output { if unmapped_window.is_on_active_tag() { self.update_keyboard_focus(&focused_output); @@ -243,6 +238,10 @@ impl CompositorHandler for State { } } } else { + if let Some(output) = self.pinnacle.focused_output().cloned() { + unmapped_window.place_on_output(&output); + } + self.pinnacle.apply_window_rules(&unmapped_window); // Still unmapped unmapped_window.on_commit(); self.pinnacle.ensure_initial_configure(surface); diff --git a/tests/lua_api.rs b/tests/lua_api.rs index 003df6f..03119cd 100644 --- a/tests/lua_api.rs +++ b/tests/lua_api.rs @@ -581,11 +581,6 @@ mod output { local focus_stack = Pinnacle.output.get_focused():keyboard_focus_stack() assert(#focus_stack == 5, "focus stack len != 5") - print(focus_stack[1].id) - print(focus_stack[2].id) - print(focus_stack[3].id) - print(focus_stack[4].id) - print(focus_stack[5].id) assert(focus_stack[1].id == 0, "focus stack at 1 id != 0") assert(focus_stack[2].id == 1, "focus stack at 2 id != 1")