diff options
| author | tazjin <tazjin@tvl.su> | 2024-10-16 16:51:56 +0300 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2024-10-16 13:51:56 +0000 |
| commit | 84655d3b2627687e14431adb49450cd6af1de40f (patch) | |
| tree | 6bb9dfb55cb635434ac61346946fdf9dc481782e | |
| parent | 40843cbda100489186a3c2737e29cf1346cb4d93 (diff) | |
| download | niri-84655d3b2627687e14431adb49450cd6af1de40f.tar.gz niri-84655d3b2627687e14431adb49450cd6af1de40f.tar.bz2 niri-84655d3b2627687e14431adb49450cd6af1de40f.zip | |
Implement input configuration for trackballs (#743)
* niri-config: add trackball configuration struct
The available options are mostly the same as for mice. I've verified that each
option is applicable to trackballs in the libinput CLI.
* input: apply trackball config settings
| -rw-r--r-- | niri-config/src/lib.rs | 35 | ||||
| -rw-r--r-- | src/input/mod.rs | 19 |
2 files changed, 54 insertions, 0 deletions
diff --git a/niri-config/src/lib.rs b/niri-config/src/lib.rs index dd81e665..d94b1363 100644 --- a/niri-config/src/lib.rs +++ b/niri-config/src/lib.rs @@ -70,6 +70,8 @@ pub struct Input { #[knuffel(child, default)] pub trackpoint: Trackpoint, #[knuffel(child, default)] + pub trackball: Trackball, + #[knuffel(child, default)] pub tablet: Tablet, #[knuffel(child, default)] pub touch: Touch, @@ -218,6 +220,22 @@ pub struct Trackpoint { pub middle_emulation: bool, } +#[derive(knuffel::Decode, Debug, Default, PartialEq)] +pub struct Trackball { + #[knuffel(child)] + pub off: bool, + #[knuffel(child)] + pub natural_scroll: bool, + #[knuffel(child, unwrap(argument), default)] + pub accel_speed: f64, + #[knuffel(child, unwrap(argument, str))] + pub accel_profile: Option<AccelProfile>, + #[knuffel(child)] + pub left_handed: bool, + #[knuffel(child)] + pub middle_emulation: bool, +} + #[derive(Debug, Clone, Copy, PartialEq, Eq)] pub enum ClickMethod { Clickfinger, @@ -2904,6 +2922,15 @@ mod tests { scroll-method "on-button-down" } + trackball { + off + natural-scroll + accel-speed 0.0 + accel-profile "flat" + left-handed + middle-emulation + } + tablet { map-to-output "eDP-1" } @@ -3091,6 +3118,14 @@ mod tests { scroll_method: Some(ScrollMethod::OnButtonDown), middle_emulation: false, }, + trackball: Trackball { + off: true, + natural_scroll: true, + accel_speed: 0.0, + accel_profile: Some(AccelProfile::Flat), + left_handed: true, + middle_emulation: true, + }, tablet: Tablet { off: false, map_to_output: Some("eDP-1".to_owned()), diff --git a/src/input/mod.rs b/src/input/mod.rs index f4beb9f0..ee201922 100644 --- a/src/input/mod.rs +++ b/src/input/mod.rs @@ -2718,6 +2718,25 @@ pub fn apply_libinput_settings(config: &niri_config::Input, device: &mut input:: } } + if is_trackball { + let c = &config.trackball; + let _ = device.config_send_events_set_mode(if c.off { + input::SendEventsMode::DISABLED + } else { + input::SendEventsMode::ENABLED + }); + let _ = device.config_scroll_set_natural_scroll_enabled(c.natural_scroll); + let _ = device.config_accel_set_speed(c.accel_speed); + let _ = device.config_middle_emulation_set_enabled(c.middle_emulation); + let _ = device.config_left_handed_set(c.left_handed); + + if let Some(accel_profile) = c.accel_profile { + let _ = device.config_accel_set_profile(accel_profile.into()); + } else if let Some(default) = device.config_accel_default_profile() { + let _ = device.config_accel_set_profile(default); + } + } + if is_trackpoint { let c = &config.trackpoint; let _ = device.config_send_events_set_mode(if c.off { |
