Wayland compositor (wlroots)
git clone https://git.lucas.co/cce-compositor.git
fix: honor the window-management popup flag over the cce-cloud app_id heuristic
get_mode_for_window force-classified every cce-cloud* toplevel as Overlay,
ignoring the set_popup request the launcher makes through the cce
window-management protocol. Overlay's fresh-slot placement is a full-height
dock strip, so --json popups (which size themselves once, then obey the
configure) opened as a monitor-tall panel. An explicitly popup-flagged
toplevel now resolves to Popup mode, which sizes from the window's own
geometry/min-size. Focus-history transparency is unaffected: is_overlay_ui
matches the cce-cloud app_id independently of tiling mode.
Co-Authored-By: Claude Fable 5 <[email protected]>
src/server/window_manager.rs | 7 +++++++
1 file changed, 7 insertions(+)
diff --git a/src/server/window_manager.rs b/src/server/window_manager.rs
index bad0306..99bc071 100644
--- a/src/server/window_manager.rs
+++ b/src/server/window_manager.rs
@@ -1478,6 +1478,13 @@ impl WindowManager {
if app_id.as_deref() == Some("cce-notifier") || app_id.as_deref() == Some("cce-notification-daemon") || app_id.as_deref() == Some("clear-notification-daemon") {
return crate::tiling::TilingMode::Popup;
}
+ // An explicit set_popup via the cce window-management protocol beats the
+ // app_id heuristic below: a cce-cloud toplevel that flagged itself a popup
+ // sizes itself (dmenu-style) instead of taking the overlay dock's
+ // full-height fresh slot.
+ if (*win).tiling_mode == crate::tiling::TilingMode::Popup {
+ return crate::tiling::TilingMode::Popup;
+ }
if app_id.as_deref().map_or(false, |id| id.starts_with("cce-cloud")) {
return crate::tiling::TilingMode::Overlay;
}