diff --git a/Cargo.lock b/Cargo.lock index 9778358..db9b6db 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2357,7 +2357,7 @@ checksum = "2f2b15926089e5526bb2dd738a2eb0e59034356e06eb71e1cd912358c0e62c4d" [[package]] name = "stardust-xr" version = "0.45.0" -source = "git+https://github.com/StardustXR/core.git?branch=dev#52f75945be534b42006455395d89c91babbb1029" +source = "git+https://github.com/StardustXR/core.git?branch=dev#1b82b6c9fa43e080a03f103924fd282c21815176" dependencies = [ "cluFlock", "dirs", @@ -2377,7 +2377,7 @@ dependencies = [ [[package]] name = "stardust-xr-schemas" version = "1.5.3" -source = "git+https://github.com/StardustXR/core.git?branch=dev#52f75945be534b42006455395d89c91babbb1029" +source = "git+https://github.com/StardustXR/core.git?branch=dev#1b82b6c9fa43e080a03f103924fd282c21815176" dependencies = [ "flatbuffers", "flexbuffers", diff --git a/src/wayland/compositor.rs b/src/wayland/compositor.rs index 5199185..f9f9360 100644 --- a/src/wayland/compositor.rs +++ b/src/wayland/compositor.rs @@ -64,6 +64,7 @@ impl CompositorHandler for WaylandState { size: [256; 2].into(), }, z_order: 1, + receives_input: false, })); let Some(panel_item) = surface_panel_item(parent) else { diff --git a/src/wayland/xdg_shell.rs b/src/wayland/xdg_shell.rs index 48448ff..63dc524 100644 --- a/src/wayland/xdg_shell.rs +++ b/src/wayland/xdg_shell.rs @@ -10,7 +10,7 @@ use crate::nodes::{ Backend, ChildInfo, Geometry, PanelItem, PanelItemInitData, SurfaceId, ToplevelInfo, }, }; -use color_eyre::eyre::Result; +use color_eyre::eyre::{eyre, Result}; use mint::Vector2; use parking_lot::Mutex; use rand::Rng; @@ -239,6 +239,7 @@ impl XdgShellHandler for WaylandState { }) .into(), z_order: 1, + receives_input: true, })); let Some(panel_item) = surface_panel_item(&parent) else { @@ -421,31 +422,31 @@ impl Backend for XdgBackend { size, }); - let toplevel = self.toplevel.lock().clone().unwrap(); - let app_id = compositor::with_states(toplevel.wl_surface(), |states| { - states + let toplevel = self + .toplevel + .lock() + .clone() + .ok_or(eyre!("Internal: no toplevel"))?; + let (app_id, title) = compositor::with_states(toplevel.wl_surface(), |states| { + let xdg_toplevel_data = states .data_map .get::() - .unwrap() + .ok_or(eyre!("Internal: XdgToplevelSurfaceData not found"))?; + + let locked_data = xdg_toplevel_data .lock() - .unwrap() - .title - .clone() - }); - let title = compositor::with_states(toplevel.wl_surface(), |states| { - states - .data_map - .get::() - .unwrap() - .lock() - .unwrap() - .app_id - .clone() - }); + .map_err(|_| eyre!("Internal: Failed to lock XdgToplevelSurfaceData"))?; + + Ok::<_, color_eyre::eyre::Report>(( + locked_data.app_id.clone(), + locked_data.title.clone(), + )) + })?; let toplevel_cached_state = compositor::with_states(toplevel.wl_surface(), |states| { *states.cached_state.get::().current() }); - let toplevel_core_surface = CoreSurface::from_wl_surface(toplevel.wl_surface()).unwrap(); + let toplevel_core_surface = CoreSurface::from_wl_surface(toplevel.wl_surface()) + .ok_or(eyre!("Internal: Failed to get CoreSurface from WlSurface"))?; let size = toplevel .current_state()