Wayland compositor (wlroots)
git clone https://git.lucas.co/cce-compositor.git
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);