Wayland compositor (wlroots)
git clone https://git.lucas.co/cce-compositor.git
overview: chrome departures never fire the on_app_exit reaction
Dismissing the cce-cloud launcher (Popup) — or any Overlay dock — went
through the same refocus funnel as a real app exit, so on_app_exit
"overview" zoomed the desktop out every time the launcher closed.
Chrome closes as part of USING it: the departing window's mode now
downgrades the camera reaction to Nothing (silent refocus), while
world windows (Floating/Tiled/Fullscreen) keep the configured
behavior.
Shadow-verified: launcher close leaves the mode untouched; a terminal
close still enters overview.
Co-Authored-By: Claude Fable 5 <[email protected]>
src/server/window_manager.rs | 17 ++++++++++++++++-
1 file changed, 16 insertions(+), 1 deletion(-)
diff --git a/src/server/window_manager.rs b/src/server/window_manager.rs
index 01fa677..a2a65ed 100644
--- a/src/server/window_manager.rs
+++ b/src/server/window_manager.rs
@@ -2687,7 +2687,22 @@ impl WindowManager {
// CAMERA does about it is the on_app_exit choice: pan to the
// fallback (the historic behavior), jump to overview, or stay
// exactly where the user left it.
- let behavior = self.on_app_exit;
+ //
+ // Chrome departing is not an app exit: dismissing the cce-cloud
+ // launcher (Popup) or an Overlay dock must never fire the camera
+ // reaction — those close as part of using them.
+ let departing_chrome = match (*seat).focused {
+ crate::seat::Focus::Window(w) if !w.is_null() => matches!(
+ (*w).tiling_mode,
+ crate::tiling::TilingMode::Popup | crate::tiling::TilingMode::Overlay
+ ),
+ _ => false,
+ };
+ let behavior = if departing_chrome {
+ crate::config::OnAppExit::Nothing
+ } else {
+ self.on_app_exit
+ };
(*seat).suppress_focus_pan = behavior != crate::config::OnAppExit::FocusPrevious;
if !next.is_null() {
(*seat).focus(crate::seat::Focus::Window(next));