aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authortazjin <tazjin@tvl.su>2024-10-16 16:51:56 +0300
committerGitHub <noreply@github.com>2024-10-16 13:51:56 +0000
commit84655d3b2627687e14431adb49450cd6af1de40f (patch)
tree6bb9dfb55cb635434ac61346946fdf9dc481782e
parent40843cbda100489186a3c2737e29cf1346cb4d93 (diff)
downloadniri-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.rs35
-rw-r--r--src/input/mod.rs19
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 {