git.lucas.co / cce-compositor
Wayland compositor (wlroots)
git clone https://git.lucas.co/cce-compositor.git

commit523dd8c9c12fee91eeb2fdcc47eec2b53f2e4931
parent0626bde99a
authorLucas Galante <[email protected]>
date2026-06-16 12:29
fix(status): resolve focused window title for layer-shell surfaces (cce-cloud)

 src/server/status_server.rs  | 12 +++++++++++-
 src/server/window_manager.rs | 14 ++++++++++++++
 2 files changed, 25 insertions(+), 1 deletion(-)

diff --git a/src/server/status_server.rs b/src/server/status_server.rs
index d875656..334e730 100644
--- a/src/server/status_server.rs
+++ b/src/server/status_server.rs
@@ -262,7 +262,17 @@ pub unsafe fn build_status_update(wm: &crate::window_manager::WindowManager) ->
             "(none)".to_string()
         }
     } else {
-        "(none)".to_string()
+        let focused_layer = wm.focused_layer_surface();
+        if !focused_layer.is_null() {
+            let wlr_layer_surface = crate::ffi::wlr_layer_surface_v1_try_from_wlr_surface(focused_layer);
+            if !wlr_layer_surface.is_null() && !(*wlr_layer_surface).namespace.is_null() {
+                std::ffi::CStr::from_ptr((*wlr_layer_surface).namespace).to_string_lossy().into_owned()
+            } else {
+                "(none)".to_string()
+            }
+        } else {
+            "(none)".to_string()
+        }
     };
 
     StatusUpdate {
diff --git a/src/server/window_manager.rs b/src/server/window_manager.rs
index 7938ed5..511859b 100644
--- a/src/server/window_manager.rs
+++ b/src/server/window_manager.rs
@@ -1104,6 +1104,20 @@ impl WindowManager {
         std::ptr::null_mut()
     }
 
+    pub unsafe fn focused_layer_surface(&self) -> *mut ffi::wlr_surface {
+        let seats_list = &(*self.server).input_manager.seats as *const ffi::wl_list as *const WlList as *mut WlList;
+        let mut curr_seat = (*seats_list).next;
+        while curr_seat != seats_list {
+            let seat = crate::container_of!(curr_seat, crate::seat::Seat, link);
+            if let crate::seat::Focus::LayerSurface(s) = (*seat).focused {
+                return s;
+            }
+            curr_seat = (*curr_seat).next;
+        }
+        std::ptr::null_mut()
+    }
+
+
     pub unsafe fn update_status(&self) {
         if let Some(ref sender) = self.status_sender {
             let update = crate::status_server::build_status_update(self);