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

commit9d57ea7faef4b3ea9f7c9dc0e3d67d9dee1b6067
parent2da1e60fe6
authorLucas Galante <[email protected]>
date2026-06-16 15:55
fix: delay IPC server startup until WAYLAND_DISPLAY is set

 src/server/run_server.rs     |  2 ++
 src/server/window_manager.rs | 10 ++++++++--
 2 files changed, 10 insertions(+), 2 deletions(-)

diff --git a/src/server/run_server.rs b/src/server/run_server.rs
index 8ad9239..f496475 100644
--- a/src/server/run_server.rs
+++ b/src/server/run_server.rs
@@ -169,6 +169,8 @@ pub fn run_server() {
 
     std::env::set_var("WAYLAND_DISPLAY", &socket_str);
 
+    server.wm.start_ipc();
+
     let status_sender = crate::status_server::spawn_status_server();
     server.wm.status_sender = Some(status_sender);
 
diff --git a/src/server/window_manager.rs b/src/server/window_manager.rs
index 8ed97c6..ff36bde 100644
--- a/src/server/window_manager.rs
+++ b/src/server/window_manager.rs
@@ -141,8 +141,7 @@ impl WindowManager {
             return Err("Failed to create timer event source");
         }
 
-        let rx = crate::ipc_server::spawn_ipc_server();
-        self.ipc_rx = Some(rx);
+        self.ipc_rx = None;
         self.ipc_timer = ffi::wl_event_loop_add_timer(event_loop, Some(handle_ipc_timer), self as *mut WindowManager as *mut _);
         if self.ipc_timer.is_null() {
             return Err("Failed to create IPC timer event source");
@@ -168,6 +167,13 @@ impl WindowManager {
         Ok(())
     }
 
+    pub fn start_ipc(&mut self) {
+        if self.ipc_rx.is_none() {
+            let rx = crate::ipc_server::spawn_ipc_server();
+            self.ipc_rx = Some(rx);
+        }
+    }
+
     pub unsafe fn deinit(&mut self) {
         if !self.global.is_null() {
             ffi::wl_global_destroy(self.global);