parent
b4d73064d9
commit
887e2b6cbc
11 changed files with 77 additions and 0 deletions
|
|
@ -617,6 +617,10 @@ impl Client {
|
|||
self.send(&ClientMessage::SetTapEnabled { device, enabled })
|
||||
}
|
||||
|
||||
pub fn set_input_natural_scrolling_enabled(&self, device: InputDevice, enabled: bool) {
|
||||
self.send(&ClientMessage::SetNaturalScrollingEnabled { device, enabled })
|
||||
}
|
||||
|
||||
pub fn set_input_drag_enabled(&self, device: InputDevice, enabled: bool) {
|
||||
self.send(&ClientMessage::SetDragEnabled { device, enabled })
|
||||
}
|
||||
|
|
|
|||
|
|
@ -330,6 +330,10 @@ pub enum ClientMessage<'a> {
|
|||
GetWorkspaceCapture {
|
||||
workspace: Workspace,
|
||||
},
|
||||
SetNaturalScrollingEnabled {
|
||||
device: InputDevice,
|
||||
enabled: bool,
|
||||
},
|
||||
}
|
||||
|
||||
#[derive(Encode, Decode, Debug)]
|
||||
|
|
|
|||
|
|
@ -104,6 +104,13 @@ impl InputDevice {
|
|||
pub fn set_drag_lock_enabled(self, enabled: bool) {
|
||||
get!().set_input_drag_lock_enabled(self, enabled);
|
||||
}
|
||||
|
||||
/// Sets whether natural scrolling is enabled for this device.
|
||||
///
|
||||
/// See <https://wayland.freedesktop.org/libinput/doc/latest/scrolling.html>
|
||||
pub fn set_natural_scrolling_enabled(self, enabled: bool) {
|
||||
get!().set_input_natural_scrolling_enabled(self, enabled);
|
||||
}
|
||||
}
|
||||
|
||||
/// A seat.
|
||||
|
|
|
|||
|
|
@ -119,6 +119,7 @@ pub trait InputDevice {
|
|||
fn set_tap_enabled(&self, enabled: bool);
|
||||
fn set_drag_enabled(&self, enabled: bool);
|
||||
fn set_drag_lock_enabled(&self, enabled: bool);
|
||||
fn set_natural_scrolling_enabled(&self, enabled: bool);
|
||||
}
|
||||
|
||||
#[derive(Debug, Copy, Clone, Hash, Eq, PartialEq)]
|
||||
|
|
|
|||
|
|
@ -296,6 +296,7 @@ struct MetalInputDevice {
|
|||
tap_enabled: Cell<Option<bool>>,
|
||||
drag_enabled: Cell<Option<bool>>,
|
||||
drag_lock_enabled: Cell<Option<bool>>,
|
||||
natural_scrolling_enabled: Cell<Option<bool>>,
|
||||
}
|
||||
|
||||
#[derive(Clone)]
|
||||
|
|
@ -354,6 +355,9 @@ impl MetalInputDevice {
|
|||
if let Some(enabled) = self.drag_lock_enabled.get() {
|
||||
dev.device().set_drag_lock_enabled(enabled);
|
||||
}
|
||||
if let Some(enabled) = self.natural_scrolling_enabled.get() {
|
||||
dev.device().set_natural_scrolling_enabled(enabled);
|
||||
}
|
||||
}
|
||||
|
||||
fn pre_pause(&self) {
|
||||
|
|
@ -465,6 +469,13 @@ impl InputDevice for MetalInputDevice {
|
|||
dev.device().set_drag_lock_enabled(enabled);
|
||||
}
|
||||
}
|
||||
|
||||
fn set_natural_scrolling_enabled(&self, enabled: bool) {
|
||||
self.natural_scrolling_enabled.set(Some(enabled));
|
||||
if let Some(dev) = self.inputdev.get() {
|
||||
dev.device().set_natural_scrolling_enabled(enabled);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
impl MetalInputDevice {
|
||||
|
|
|
|||
|
|
@ -296,6 +296,7 @@ impl MetalBackend {
|
|||
tap_enabled: Default::default(),
|
||||
drag_enabled: Default::default(),
|
||||
drag_lock_enabled: Default::default(),
|
||||
natural_scrolling_enabled: Default::default(),
|
||||
});
|
||||
slots[slot] = Some(dev.clone());
|
||||
self.device_holder
|
||||
|
|
|
|||
|
|
@ -1162,6 +1162,10 @@ impl InputDevice for XSeatKeyboard {
|
|||
fn set_drag_lock_enabled(&self, enabled: bool) {
|
||||
let _ = enabled;
|
||||
}
|
||||
|
||||
fn set_natural_scrolling_enabled(&self, enabled: bool) {
|
||||
let _ = enabled;
|
||||
}
|
||||
}
|
||||
|
||||
impl InputDevice for XSeatMouse {
|
||||
|
|
@ -1223,4 +1227,8 @@ impl InputDevice for XSeatMouse {
|
|||
fn set_drag_lock_enabled(&self, enabled: bool) {
|
||||
let _ = enabled;
|
||||
}
|
||||
|
||||
fn set_natural_scrolling_enabled(&self, enabled: bool) {
|
||||
let _ = enabled;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -512,6 +512,16 @@ impl ConfigProxyHandler {
|
|||
Ok(())
|
||||
}
|
||||
|
||||
fn handle_set_natural_scrolling_enabled(
|
||||
&self,
|
||||
device: InputDevice,
|
||||
enabled: bool,
|
||||
) -> Result<(), CphError> {
|
||||
let dev = self.get_device_handler_data(device)?;
|
||||
dev.device.set_natural_scrolling_enabled(enabled);
|
||||
Ok(())
|
||||
}
|
||||
|
||||
fn handle_set_drag_lock_enabled(
|
||||
&self,
|
||||
device: InputDevice,
|
||||
|
|
@ -1296,6 +1306,9 @@ impl ConfigProxyHandler {
|
|||
ClientMessage::GetWorkspaceCapture { workspace } => self
|
||||
.handle_get_workspace_capture(workspace)
|
||||
.wrn("get_workspace_capture")?,
|
||||
ClientMessage::SetNaturalScrollingEnabled { device, enabled } => self
|
||||
.handle_set_natural_scrolling_enabled(device, enabled)
|
||||
.wrn("set_natural_scrolling_enabled")?,
|
||||
}
|
||||
Ok(())
|
||||
}
|
||||
|
|
|
|||
|
|
@ -444,6 +444,10 @@ trait TestInputDevice: InputDevice {
|
|||
fn set_drag_lock_enabled(&self, enabled: bool) {
|
||||
let _ = enabled;
|
||||
}
|
||||
|
||||
fn set_natural_scrolling_enabled(&self, enabled: bool) {
|
||||
let _ = enabled;
|
||||
}
|
||||
}
|
||||
|
||||
impl<T: TestInputDevice> InputDevice for T {
|
||||
|
|
@ -502,4 +506,8 @@ impl<T: TestInputDevice> InputDevice for T {
|
|||
fn set_drag_lock_enabled(&self, enabled: bool) {
|
||||
<Self as TestInputDevice>::set_drag_lock_enabled(self, enabled)
|
||||
}
|
||||
|
||||
fn set_natural_scrolling_enabled(&self, enabled: bool) {
|
||||
<Self as TestInputDevice>::set_natural_scrolling_enabled(self, enabled)
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -9,6 +9,8 @@ use {
|
|||
sys::{
|
||||
libinput_device, libinput_device_config_accel_set_profile,
|
||||
libinput_device_config_accel_set_speed, libinput_device_config_left_handed_set,
|
||||
libinput_device_config_scroll_get_natural_scroll_enabled,
|
||||
libinput_device_config_scroll_set_natural_scroll_enabled,
|
||||
libinput_device_config_tap_get_drag_enabled,
|
||||
libinput_device_config_tap_get_drag_lock_enabled,
|
||||
libinput_device_config_tap_get_enabled, libinput_device_config_tap_set_drag_enabled,
|
||||
|
|
@ -146,6 +148,17 @@ impl<'a> LibInputDevice<'a> {
|
|||
_ => false,
|
||||
}
|
||||
}
|
||||
|
||||
pub fn set_natural_scrolling_enabled(&self, enabled: bool) {
|
||||
unsafe {
|
||||
libinput_device_config_scroll_set_natural_scroll_enabled(self.dev, enabled as _);
|
||||
}
|
||||
}
|
||||
|
||||
#[allow(dead_code)]
|
||||
pub fn natural_scrolling_enabled(&self) -> bool {
|
||||
unsafe { libinput_device_config_scroll_get_natural_scroll_enabled(self.dev) != 0 }
|
||||
}
|
||||
}
|
||||
|
||||
impl RegisteredDevice {
|
||||
|
|
|
|||
|
|
@ -75,6 +75,13 @@ extern "C" {
|
|||
pub fn libinput_device_config_tap_get_drag_lock_enabled(
|
||||
device: *mut libinput_device,
|
||||
) -> libinput_config_drag_lock_state;
|
||||
pub fn libinput_device_config_scroll_set_natural_scroll_enabled(
|
||||
device: *mut libinput_device,
|
||||
enable: c::c_int,
|
||||
) -> libinput_config_status;
|
||||
pub fn libinput_device_config_scroll_get_natural_scroll_enabled(
|
||||
device: *mut libinput_device,
|
||||
) -> c::c_int;
|
||||
|
||||
pub fn libinput_event_destroy(event: *mut libinput_event);
|
||||
pub fn libinput_event_get_type(event: *mut libinput_event) -> libinput_event_type;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue