diff options
| -rw-r--r-- | niri-config/src/lib.rs | 17 | ||||
| -rw-r--r-- | resources/default-config.kdl | 3 | ||||
| -rw-r--r-- | src/input/mod.rs | 22 | ||||
| -rw-r--r-- | wiki/Configuration:-Input.md | 10 |
4 files changed, 52 insertions, 0 deletions
diff --git a/niri-config/src/lib.rs b/niri-config/src/lib.rs index 9c1375ed..02c6ff41 100644 --- a/niri-config/src/lib.rs +++ b/niri-config/src/lib.rs @@ -156,6 +156,8 @@ pub enum TrackLayout { #[derive(knuffel::Decode, Debug, Default, PartialEq)] pub struct Touchpad { #[knuffel(child)] + pub off: bool, + #[knuffel(child)] pub tap: bool, #[knuffel(child)] pub dwt: bool, @@ -175,11 +177,15 @@ pub struct Touchpad { pub tap_button_map: Option<TapButtonMap>, #[knuffel(child)] pub left_handed: bool, + #[knuffel(child)] + pub disabled_on_external_mouse: bool, } #[derive(knuffel::Decode, Debug, Default, PartialEq)] pub struct Mouse { #[knuffel(child)] + pub off: bool, + #[knuffel(child)] pub natural_scroll: bool, #[knuffel(child, unwrap(argument), default)] pub accel_speed: f64, @@ -194,6 +200,8 @@ pub struct Mouse { #[derive(knuffel::Decode, Debug, Default, PartialEq)] pub struct Trackpoint { #[knuffel(child)] + pub off: bool, + #[knuffel(child)] pub natural_scroll: bool, #[knuffel(child, unwrap(argument), default)] pub accel_speed: f64, @@ -269,6 +277,8 @@ impl From<TapButtonMap> for input::TapButtonMap { #[derive(knuffel::Decode, Debug, Default, PartialEq)] pub struct Tablet { + #[knuffel(child)] + pub off: bool, #[knuffel(child, unwrap(argument))] pub map_to_output: Option<String>, #[knuffel(child)] @@ -2342,6 +2352,7 @@ mod tests { accel-profile "flat" scroll-method "two-finger" tap-button-map "left-middle-right" + disabled-on-external-mouse } mouse { @@ -2352,6 +2363,7 @@ mod tests { } trackpoint { + off natural-scroll accel-speed 0.0 accel-profile "flat" @@ -2504,6 +2516,7 @@ mod tests { track_layout: TrackLayout::Window, }, touchpad: Touchpad { + off: false, tap: true, dwt: true, dwtp: true, @@ -2514,8 +2527,10 @@ mod tests { scroll_method: Some(ScrollMethod::TwoFinger), tap_button_map: Some(TapButtonMap::LeftMiddleRight), left_handed: false, + disabled_on_external_mouse: true, }, mouse: Mouse { + off: false, natural_scroll: true, accel_speed: 0.4, accel_profile: Some(AccelProfile::Flat), @@ -2523,12 +2538,14 @@ mod tests { left_handed: false, }, trackpoint: Trackpoint { + off: true, natural_scroll: true, accel_speed: 0.0, accel_profile: Some(AccelProfile::Flat), scroll_method: Some(ScrollMethod::OnButtonDown), }, tablet: Tablet { + off: false, map_to_output: Some("eDP-1".to_owned()), left_handed: false, }, diff --git a/resources/default-config.kdl b/resources/default-config.kdl index d417b05d..800e72c4 100644 --- a/resources/default-config.kdl +++ b/resources/default-config.kdl @@ -21,6 +21,7 @@ input { // Next sections include libinput settings. // Omitting settings disables them, or leaves them at their default values. touchpad { + // off tap // dwt // dwtp @@ -28,9 +29,11 @@ input { // accel-speed 0.2 // accel-profile "flat" // scroll-method "two-finger" + // disabled-on-external-mouse } mouse { + // off // natural-scroll // accel-speed 0.2 // accel-profile "flat" diff --git a/src/input/mod.rs b/src/input/mod.rs index a36ea62b..893fd7de 100644 --- a/src/input/mod.rs +++ b/src/input/mod.rs @@ -2219,6 +2219,13 @@ pub fn apply_libinput_settings(config: &niri_config::Input, device: &mut input:: let is_touchpad = device.config_tap_finger_count() > 0; if is_touchpad { let c = &config.touchpad; + let _ = device.config_send_events_set_mode(if c.off { + input::SendEventsMode::DISABLED + } else if c.disabled_on_external_mouse { + input::SendEventsMode::DISABLED_ON_EXTERNAL_MOUSE + } else { + input::SendEventsMode::ENABLED + }); let _ = device.config_tap_set_enabled(c.tap); let _ = device.config_dwt_set_enabled(c.dwt); let _ = device.config_dwtp_set_enabled(c.dwtp); @@ -2272,6 +2279,11 @@ pub fn apply_libinput_settings(config: &niri_config::Input, device: &mut input:: && !is_trackpoint; if is_mouse { let c = &config.mouse; + 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_left_handed_set(c.left_handed); @@ -2291,6 +2303,11 @@ pub fn apply_libinput_settings(config: &niri_config::Input, device: &mut input:: if is_trackpoint { let c = &config.trackpoint; + 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); @@ -2310,6 +2327,11 @@ pub fn apply_libinput_settings(config: &niri_config::Input, device: &mut input:: let is_tablet = device.has_capability(input::DeviceCapability::TabletTool); if is_tablet { let c = &config.tablet; + let _ = device.config_send_events_set_mode(if c.off { + input::SendEventsMode::DISABLED + } else { + input::SendEventsMode::ENABLED + }); let _ = device.config_left_handed_set(c.left_handed); } } diff --git a/wiki/Configuration:-Input.md b/wiki/Configuration:-Input.md index baa43acb..65282fba 100644 --- a/wiki/Configuration:-Input.md +++ b/wiki/Configuration:-Input.md @@ -25,6 +25,7 @@ input { } touchpad { + // off tap // dwt // dwtp @@ -35,9 +36,11 @@ input { // tap-button-map "left-middle-right" // click-method "clickfinger" // left-handed + // disabled-on-external-mouse } mouse { + // off // natural-scroll // accel-speed 0.2 // accel-profile "flat" @@ -46,6 +49,7 @@ input { } trackpoint { + // off // natural-scroll // accel-speed 0.2 // accel-profile "flat" @@ -53,6 +57,7 @@ input { } tablet { + // off map-to-output "eDP-1" // left-handed } @@ -122,6 +127,10 @@ Most settings for the pointing devices are passed directly to libinput. Other Wayland compositors also use libinput, so it's likely you will find the same settings there. For flags like `tap`, omit them or comment them out to disable the setting. +A few settings are common between input devices: + +- `off`: if set, no events will be sent from this device. + A few settings are common between `touchpad`, `mouse` and `trackpoint`: - `natural-scroll`: if set, inverts the scrolling direction. @@ -137,6 +146,7 @@ Settings specific to `touchpad`s: - `dwtp`: disable-when-trackpointing. - `tap-button-map`: can be `left-right-middle` or `left-middle-right`, controls which button corresponds to a two-finger tap and a three-finger tap. - `click-method`: can be `button-areas` or `clickfinger`, changes the [click method](https://wayland.freedesktop.org/libinput/doc/latest/clickpad-softbuttons.html). +- `disabled-on-external-mouse`: do not send events while external pointer device is plugged in. Settings specific to `touchpad`, `mouse` and `tablet`: |
