1
0
Fork 0
forked from wry/wry

tree: support toggling floating with double clicks

This commit is contained in:
Julian Orth 2024-03-03 14:18:46 +01:00
parent a588b9044d
commit d425768760
11 changed files with 137 additions and 14 deletions

View file

@ -465,6 +465,14 @@ impl Client {
*self.on_new_input_device.borrow_mut() = Some(Rc::new(f));
}
pub fn set_double_click_interval(&self, usec: u64) {
self.send(&ClientMessage::SetDoubleClickIntervalUsec { usec });
}
pub fn set_double_click_distance(&self, dist: i32) {
self.send(&ClientMessage::SetDoubleClickDistance { dist });
}
pub fn connector_set_position(&self, connector: Connector, x: i32, y: i32) {
self.send(&ClientMessage::ConnectorSetPosition { connector, x, y });
}

View file

@ -346,6 +346,12 @@ pub enum ClientMessage<'a> {
connector: Connector,
transform: Transform,
},
SetDoubleClickIntervalUsec {
usec: u64,
},
SetDoubleClickDistance {
dist: i32,
},
}
#[derive(Serialize, Deserialize, Debug)]

View file

@ -10,6 +10,7 @@ use {
Axis, Direction, ModifiedKeySym, Workspace,
},
serde::{Deserialize, Serialize},
std::time::Duration,
};
/// An input device.
@ -257,6 +258,8 @@ impl Seat {
}
/// Toggles whether the currently focused window is floating.
///
/// You can do the same by double-clicking on the header.
pub fn toggle_floating(self) {
get!().toggle_floating(self);
}
@ -329,3 +332,28 @@ pub fn on_new_seat<F: Fn(Seat) + 'static>(f: F) {
pub fn on_new_input_device<F: Fn(InputDevice) + 'static>(f: F) {
get!().on_new_input_device(f)
}
/// Sets the maximum time between two clicks to be registered as a double click by the
/// compositor.
///
/// This only affects interactions with the compositor UI and has no effect on
/// applications.
///
/// The default is 400 ms.
pub fn set_double_click_time(duration: Duration) {
let usec = duration.as_micros().min(u64::MAX as u128);
get!().set_double_click_interval(usec as u64)
}
/// Sets the maximum distance between two clicks to be registered as a double click by the
/// compositor.
///
/// This only affects interactions with the compositor UI and has no effect on
/// applications.
///
/// Setting a negative distance disables double clicks.
///
/// The default is 5.
pub fn set_double_click_distance(distance: i32) {
get!().set_double_click_distance(distance)
}