feat(wayland): receives_input

This commit is contained in:
Nova
2024-08-06 19:12:44 -04:00
parent 4827561f88
commit 08135b03a2
3 changed files with 24 additions and 22 deletions

4
Cargo.lock generated
View File

@@ -2357,7 +2357,7 @@ checksum = "2f2b15926089e5526bb2dd738a2eb0e59034356e06eb71e1cd912358c0e62c4d"
[[package]] [[package]]
name = "stardust-xr" name = "stardust-xr"
version = "0.45.0" 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 = [ dependencies = [
"cluFlock", "cluFlock",
"dirs", "dirs",
@@ -2377,7 +2377,7 @@ dependencies = [
[[package]] [[package]]
name = "stardust-xr-schemas" name = "stardust-xr-schemas"
version = "1.5.3" 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 = [ dependencies = [
"flatbuffers", "flatbuffers",
"flexbuffers", "flexbuffers",

View File

@@ -64,6 +64,7 @@ impl CompositorHandler for WaylandState {
size: [256; 2].into(), size: [256; 2].into(),
}, },
z_order: 1, z_order: 1,
receives_input: false,
})); }));
let Some(panel_item) = surface_panel_item(parent) else { let Some(panel_item) = surface_panel_item(parent) else {

View File

@@ -10,7 +10,7 @@ use crate::nodes::{
Backend, ChildInfo, Geometry, PanelItem, PanelItemInitData, SurfaceId, ToplevelInfo, Backend, ChildInfo, Geometry, PanelItem, PanelItemInitData, SurfaceId, ToplevelInfo,
}, },
}; };
use color_eyre::eyre::Result; use color_eyre::eyre::{eyre, Result};
use mint::Vector2; use mint::Vector2;
use parking_lot::Mutex; use parking_lot::Mutex;
use rand::Rng; use rand::Rng;
@@ -239,6 +239,7 @@ impl XdgShellHandler for WaylandState {
}) })
.into(), .into(),
z_order: 1, z_order: 1,
receives_input: true,
})); }));
let Some(panel_item) = surface_panel_item(&parent) else { let Some(panel_item) = surface_panel_item(&parent) else {
@@ -421,31 +422,31 @@ impl Backend for XdgBackend {
size, size,
}); });
let toplevel = self.toplevel.lock().clone().unwrap(); let toplevel = self
let app_id = compositor::with_states(toplevel.wl_surface(), |states| { .toplevel
states .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 .data_map
.get::<XdgToplevelSurfaceData>() .get::<XdgToplevelSurfaceData>()
.unwrap() .ok_or(eyre!("Internal: XdgToplevelSurfaceData not found"))?;
let locked_data = xdg_toplevel_data
.lock() .lock()
.unwrap() .map_err(|_| eyre!("Internal: Failed to lock XdgToplevelSurfaceData"))?;
.title
.clone() Ok::<_, color_eyre::eyre::Report>((
}); locked_data.app_id.clone(),
let title = compositor::with_states(toplevel.wl_surface(), |states| { locked_data.title.clone(),
states ))
.data_map })?;
.get::<XdgToplevelSurfaceData>()
.unwrap()
.lock()
.unwrap()
.app_id
.clone()
});
let toplevel_cached_state = compositor::with_states(toplevel.wl_surface(), |states| { let toplevel_cached_state = compositor::with_states(toplevel.wl_surface(), |states| {
*states.cached_state.get::<SurfaceCachedState>().current() *states.cached_state.get::<SurfaceCachedState>().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 let size = toplevel
.current_state() .current_state()