Add fetch_location command to window module

This commit is contained in:
Night_Hunter 2024-02-22 17:13:12 +13:00 committed by Héctor Ramón Jiménez
parent 6c00e615b9
commit 59885e9a36
No known key found for this signature in database
GPG key ID: 7CC46565708259A7
4 changed files with 51 additions and 0 deletions

View file

@ -106,6 +106,17 @@ pub fn move_to<Message>(id: Id, position: Point) -> Command<Message> {
Command::single(command::Action::Window(Action::Move(id, position)))
}
/// Fetches the window's location in logical coordinates.
pub fn fetch_location<Message>(
id: Id,
f: impl FnOnce(Option<Point>) -> Message + 'static,
) -> Command<Message> {
Command::single(command::Action::Window(Action::FetchLocation(
id,
Box::new(f),
)))
}
/// Changes the [`Mode`] of the window.
pub fn change_mode<Message>(id: Id, mode: Mode) -> Command<Message> {
Command::single(command::Action::Window(Action::ChangeMode(id, mode)))

View file

@ -42,6 +42,8 @@ pub enum Action<T> {
///
/// Unsupported on Wayland.
Move(Id, Point),
/// Fetch the current logical coordinates of the window.
FetchLocation(Id, Box<dyn FnOnce(Option<Point>) -> T + 'static>),
/// Change the [`Mode`] of the window.
ChangeMode(Id, Mode),
/// Fetch the current [`Mode`] of the window.
@ -135,6 +137,9 @@ impl<T> Action<T> {
}
Self::Minimize(id, minimized) => Action::Minimize(id, minimized),
Self::Move(id, position) => Action::Move(id, position),
Self::FetchLocation(id, o) => {
Action::FetchLocation(id, Box::new(move |s| f(o(s))))
}
Self::ChangeMode(id, mode) => Action::ChangeMode(id, mode),
Self::FetchMode(id, o) => {
Action::FetchMode(id, Box::new(move |s| f(o(s))))
@ -189,6 +194,9 @@ impl<T> fmt::Debug for Action<T> {
Self::Move(id, position) => {
write!(f, "Action::Move({id:?}, {position})")
}
Self::FetchLocation(id, _) => {
write!(f, "Action::FetchLocation({id:?})")
}
Self::ChangeMode(id, mode) => {
write!(f, "Action::SetMode({id:?}, {mode:?})")
}