feat: subsurface reposition

This commit is contained in:
Ashley Wulber 2025-08-25 00:16:31 -04:00
parent 4eb7f9b2fe
commit 8e7b7e586f
No known key found for this signature in database
GPG key ID: 5216D4F46A90A820
3 changed files with 32 additions and 3 deletions

View file

@ -57,6 +57,13 @@ pub enum Action {
/// id of the subsurface
id: Id,
},
/// reposition the subsurface
Reposition {
/// id of the subsurface
id: Id,
x: i32,
y: i32,
},
}
impl fmt::Debug for Action {
@ -72,6 +79,11 @@ impl fmt::Debug for Action {
"Action::SubsurfaceAction::Destroy {{ id: {:?} }}",
id
),
Action::Reposition { id, x, y } => write!(
f,
"Action::SubsurfaceAction::Reposition {{ id: {:?}, x: {:?}, y: {:?} }}",
id, x, y
),
}
}
}

View file

@ -26,3 +26,15 @@ pub fn destroy_subsurface<Message>(id: SurfaceId) -> Task<Message> {
)),
))
}
pub fn reposition_subsurface<Message>(
id: SurfaceId,
x: i32,
y: i32,
) -> Task<Message> {
task::effect(Action::PlatformSpecific(
platform_specific::Action::Wayland(wayland::Action::Subsurface(
wayland::subsurface::Action::Reposition { id, x, y },
)),
))
}

View file

@ -784,7 +784,6 @@ impl SctkState {
}
}
_ = wl_surface.frame(&self.queue_handle, wl_surface.clone());
wl_surface.commit();
@ -1417,7 +1416,7 @@ impl SctkState {
}
},
Action::Subsurface(action) => match action {
platform_specific::wayland::subsurface::Action::Subsurface { subsurface: subsurface_settings } => {
subsurface::Action::Subsurface { subsurface: subsurface_settings } => {
let parent_id = subsurface_settings.parent;
if let Ok((_, parent, subsurface, common_surface, common)) = self.get_subsurface(subsurface_settings.clone()) {
// TODO Ashley: all surfaces should probably have an optional title for a11y if nothing else
@ -1437,7 +1436,7 @@ impl SctkState {
);
}
},
platform_specific::wayland::subsurface::Action::Destroy { id } => {
subsurface::Action::Destroy { id } => {
let mut destroyed = vec![];
if let Some(subsurface) = self.subsurfaces.iter().position(|s| s.id == id) {
let subsurface = self.subsurfaces.remove(subsurface);
@ -1457,6 +1456,12 @@ impl SctkState {
}
}
},
subsurface::Action::Reposition { id, x, y } => {
if let Some(subsurface) = self.subsurfaces.iter().find(|s| s.id == id) {
subsurface.instance.wl_subsurface.set_position(x, y);
subsurface.instance.wl_surface.commit();
}
},
},
};
Ok(())