Mark WM_TRANSIENT_FOR windows as toplevel parents

This commit is contained in:
Shawn Wallace 2025-05-13 00:46:02 -04:00
parent 4671f27282
commit ec9ff64c1e
4 changed files with 100 additions and 8 deletions

View file

@ -137,6 +137,7 @@ pub enum SurfaceRole {
pub struct Toplevel {
pub xdg: XdgSurfaceData,
pub toplevel: XdgToplevel,
pub parent: Option<XdgToplevel>,
pub min_size: Option<Vec2>,
pub max_size: Option<Vec2>,
pub states: Vec<xdg_toplevel::State>,
@ -1224,6 +1225,13 @@ impl Dispatch<XdgToplevel, SurfaceId> for State {
};
toplevel.app_id = app_id.into();
}
xdg_toplevel::Request::SetParent { parent } => {
let data = state.surfaces.get_mut(surface_id).unwrap();
let Some(SurfaceRole::Toplevel(toplevel)) = &mut data.role else {
unreachable!();
};
toplevel.parent = parent;
}
other => todo!("unhandled request {other:?}"),
}
}
@ -1247,6 +1255,7 @@ impl Dispatch<XdgSurface, SurfaceId> for State {
let t = Toplevel {
xdg: XdgSurfaceData::new(resource.clone()),
toplevel,
parent: None,
min_size: None,
max_size: None,
states: Vec::new(),