From 94ec10686ea05db5bde1bc81bcd2eaf01b43797f Mon Sep 17 00:00:00 2001 From: Ian Douglas Scott Date: Mon, 21 Apr 2025 14:21:57 -0700 Subject: [PATCH] backend/wayland: Support running without toplevel manager protocol --- src/backend/wayland/mod.rs | 28 ++++++++++++++++------------ src/backend/wayland/toplevel.rs | 2 +- 2 files changed, 17 insertions(+), 13 deletions(-) diff --git a/src/backend/wayland/mod.rs b/src/backend/wayland/mod.rs index 5290490..769035d 100644 --- a/src/backend/wayland/mod.rs +++ b/src/backend/wayland/mod.rs @@ -53,7 +53,7 @@ pub struct AppData { screencopy_state: ScreencopyState, seat_state: SeatState, shm_state: Shm, - toplevel_manager_state: ToplevelManagerState, + toplevel_manager_state: Option, sender: mpsc::Sender, capture_filter: CaptureFilter, captures: RefCell>>, @@ -78,27 +78,31 @@ impl AppData { let info = self.toplevel_info_state.info(&toplevel_handle); if let Some(cosmic_toplevel) = info.and_then(|x| x.cosmic_toplevel.as_ref()) { for seat in self.seat_state.seats() { - self.toplevel_manager_state - .manager - .activate(cosmic_toplevel, &seat); + if let Some(state) = &self.toplevel_manager_state { + state.manager.activate(cosmic_toplevel, &seat); + } } } } Cmd::CloseToplevel(toplevel_handle) => { let info = self.toplevel_info_state.info(&toplevel_handle); if let Some(cosmic_toplevel) = info.and_then(|x| x.cosmic_toplevel.as_ref()) { - self.toplevel_manager_state.manager.close(cosmic_toplevel); + if let Some(state) = &self.toplevel_manager_state { + state.manager.close(cosmic_toplevel); + } } } Cmd::MoveToplevelToWorkspace(toplevel_handle, workspace_handle, output) => { let info = self.toplevel_info_state.info(&toplevel_handle); if let Some(cosmic_toplevel) = info.and_then(|x| x.cosmic_toplevel.as_ref()) { - if self.toplevel_manager_state.manager.version() >= 2 { - self.toplevel_manager_state.manager.move_to_ext_workspace( - cosmic_toplevel, - &workspace_handle, - &output, - ); + if let Some(state) = &self.toplevel_manager_state { + if state.manager.version() >= 2 { + state.manager.move_to_ext_workspace( + cosmic_toplevel, + &workspace_handle, + &output, + ); + } } } } @@ -240,7 +244,7 @@ fn start(conn: Connection) -> mpsc::Receiver { dmabuf_state, workspace_state: WorkspaceState::new(®istry_state, &qh), // Create before toplevel info state toplevel_info_state: ToplevelInfoState::new(®istry_state, &qh), - toplevel_manager_state: ToplevelManagerState::new(®istry_state, &qh), + toplevel_manager_state: ToplevelManagerState::try_new(®istry_state, &qh), screencopy_state: ScreencopyState::new(&globals, &qh), registry_state, seat_state: SeatState::new(&globals, &qh), diff --git a/src/backend/wayland/toplevel.rs b/src/backend/wayland/toplevel.rs index 8bffb5b..c0fae3e 100644 --- a/src/backend/wayland/toplevel.rs +++ b/src/backend/wayland/toplevel.rs @@ -51,7 +51,7 @@ impl ToplevelInfoHandler for AppData { impl ToplevelManagerHandler for AppData { fn toplevel_manager_state(&mut self) -> &mut ToplevelManagerState { - &mut self.toplevel_manager_state + self.toplevel_manager_state.as_mut().unwrap() } fn capabilities(