compositor: give access to surface children and region metadata
This commit is contained in:
parent
a5ae27be84
commit
deb072afbb
|
@ -220,6 +220,16 @@ impl<U: Send + 'static, H: Handler + Send + 'static> CompositorToken<U, H> {
|
|||
unsafe { SurfaceData::<U>::get_parent(surface) }
|
||||
}
|
||||
|
||||
/// Retrieve the children of this surface
|
||||
///
|
||||
/// If the surface is not managed by the CompositorGlobal that provided this token, this
|
||||
/// will panic (having more than one compositor is not supported).
|
||||
pub fn get_children(&self, surface: &wl_surface::WlSurface) -> Vec<wl_surface::WlSurface> {
|
||||
assert!(resource_is_registered::<_, CompositorHandler<U, H>>(surface, self.hid),
|
||||
"Accessing the data of foreign surfaces is not supported.");
|
||||
unsafe { SurfaceData::<U>::get_children(surface) }
|
||||
}
|
||||
|
||||
/// Retrieve the role status this surface
|
||||
///
|
||||
/// If the surface is not managed by the CompositorGlobal that provided this token, this
|
||||
|
@ -258,6 +268,16 @@ impl<U: Send + 'static, H: Handler + Send + 'static> CompositorToken<U, H> {
|
|||
"Accessing the data of foreign surfaces is not supported.");
|
||||
unsafe { SurfaceData::<U>::remove_role(surface) }
|
||||
}
|
||||
|
||||
/// Retrieve the metadata associated with a wl_region
|
||||
///
|
||||
/// If the region is not managed by the CompositorGlobal that provided this token, this
|
||||
/// will panic (having more than one compositor is not supported).
|
||||
pub fn get_region_attributes(&self, region: &wl_region::WlRegion) -> RegionAttributes {
|
||||
assert!(resource_is_registered::<_, CompositorHandler<U, H>>(region, self.hid),
|
||||
"Accessing the data of foreign regions is not supported.");
|
||||
unsafe { RegionData::get_attributes(region) }
|
||||
}
|
||||
}
|
||||
|
||||
pub struct CompositorHandler<U, H> {
|
||||
|
|
|
@ -196,6 +196,17 @@ impl<U> SurfaceData<U> {
|
|||
child_guard.parent.as_ref().map(|p| p.clone_unchecked())
|
||||
}
|
||||
|
||||
/// Retrieve the parent surface (if any) of this surface
|
||||
pub unsafe fn get_children(child: &wl_surface::WlSurface) -> Vec<wl_surface::WlSurface> {
|
||||
let child_mutex = Self::get_data(child);
|
||||
let child_guard = child_mutex.lock().unwrap();
|
||||
child_guard
|
||||
.children
|
||||
.iter()
|
||||
.map(|p| p.clone_unchecked())
|
||||
.collect()
|
||||
}
|
||||
|
||||
/// Reorders a surface relative to one of its sibling
|
||||
///
|
||||
/// Fails if `relative_to` is not a sibling or parent of `surface`.
|
||||
|
|
Loading…
Reference in New Issue