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