diff options
| author | Ivan Molodetskikh <yalterz@gmail.com> | 2024-03-22 10:36:19 +0400 |
|---|---|---|
| committer | Ivan Molodetskikh <yalterz@gmail.com> | 2024-03-22 10:36:19 +0400 |
| commit | a0c8c39b06e672c633e09f3751d46fa8fed4f3a4 (patch) | |
| tree | 3aab3194216623e64dd0feac99f967aecd6723da | |
| parent | 977f1487c22b5d30051939b9572b99a31a9775ff (diff) | |
| download | niri-a0c8c39b06e672c633e09f3751d46fa8fed4f3a4.tar.gz niri-a0c8c39b06e672c633e09f3751d46fa8fed4f3a4.tar.bz2 niri-a0c8c39b06e672c633e09f3751d46fa8fed4f3a4.zip | |
Make binds accept wheel names
| -rw-r--r-- | niri-config/src/lib.rs | 54 | ||||
| -rw-r--r-- | src/input.rs | 16 | ||||
| -rw-r--r-- | src/ui/hotkey_overlay.rs | 12 |
3 files changed, 59 insertions, 23 deletions
diff --git a/niri-config/src/lib.rs b/niri-config/src/lib.rs index 937df0ad..1bf0ac2d 100644 --- a/niri-config/src/lib.rs +++ b/niri-config/src/lib.rs @@ -724,10 +724,19 @@ pub struct Bind { #[derive(Debug, PartialEq, Eq, Clone, Copy, Hash)] pub struct Key { - pub keysym: Keysym, + pub trigger: Trigger, pub modifiers: Modifiers, } +#[derive(Debug, PartialEq, Eq, Clone, Copy, Hash)] +pub enum Trigger { + Keysym(Keysym), + WheelDown, + WheelUp, + WheelLeft, + WheelRight, +} + bitflags! { #[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)] pub struct Modifiers : u8 { @@ -1499,12 +1508,23 @@ impl FromStr for Key { } } - let keysym = keysym_from_name(key, KEYSYM_CASE_INSENSITIVE); - if keysym.raw() == KEY_NoSymbol { - return Err(miette!("invalid key: {key}")); - } + let trigger = if key.eq_ignore_ascii_case("WheelDown") { + Trigger::WheelDown + } else if key.eq_ignore_ascii_case("WheelUp") { + Trigger::WheelUp + } else if key.eq_ignore_ascii_case("WheelLeft") { + Trigger::WheelLeft + } else if key.eq_ignore_ascii_case("WheelRight") { + Trigger::WheelRight + } else { + let keysym = keysym_from_name(key, KEYSYM_CASE_INSENSITIVE); + if keysym.raw() == KEY_NoSymbol { + return Err(miette!("invalid key: {key}")); + } + Trigger::Keysym(keysym) + }; - Ok(Key { keysym, modifiers }) + Ok(Key { trigger, modifiers }) } } @@ -1712,6 +1732,7 @@ mod tests { Mod+Comma { consume-window-into-column; } Mod+1 { focus-workspace 1; } Mod+Shift+E { quit skip-confirmation=true; } + Mod+WheelDown { focus-workspace-down; } } debug { @@ -1895,53 +1916,60 @@ mod tests { binds: Binds(vec![ Bind { key: Key { - keysym: Keysym::t, + trigger: Trigger::Keysym(Keysym::t), modifiers: Modifiers::COMPOSITOR, }, action: Action::Spawn(vec!["alacritty".to_owned()]), }, Bind { key: Key { - keysym: Keysym::q, + trigger: Trigger::Keysym(Keysym::q), modifiers: Modifiers::COMPOSITOR, }, action: Action::CloseWindow, }, Bind { key: Key { - keysym: Keysym::h, + trigger: Trigger::Keysym(Keysym::h), modifiers: Modifiers::COMPOSITOR | Modifiers::SHIFT, }, action: Action::FocusMonitorLeft, }, Bind { key: Key { - keysym: Keysym::l, + trigger: Trigger::Keysym(Keysym::l), modifiers: Modifiers::COMPOSITOR | Modifiers::SHIFT | Modifiers::CTRL, }, action: Action::MoveWindowToMonitorRight, }, Bind { key: Key { - keysym: Keysym::comma, + trigger: Trigger::Keysym(Keysym::comma), modifiers: Modifiers::COMPOSITOR, }, action: Action::ConsumeWindowIntoColumn, }, Bind { key: Key { - keysym: Keysym::_1, + trigger: Trigger::Keysym(Keysym::_1), modifiers: Modifiers::COMPOSITOR, }, action: Action::FocusWorkspace(1), }, Bind { key: Key { - keysym: Keysym::e, + trigger: Trigger::Keysym(Keysym::e), modifiers: Modifiers::COMPOSITOR | Modifiers::SHIFT, }, action: Action::Quit(true), }, + Bind { + key: Key { + trigger: Trigger::WheelDown, + modifiers: Modifiers::COMPOSITOR, + }, + action: Action::FocusWorkspaceDown, + }, ]), debug: DebugConfig { render_drm_device: Some(PathBuf::from("/dev/dri/renderD129")), diff --git a/src/input.rs b/src/input.rs index 80000efe..e6598719 100644 --- a/src/input.rs +++ b/src/input.rs @@ -3,7 +3,7 @@ use std::collections::HashSet; use std::time::Duration; use input::event::gesture::GestureEventCoordinates as _; -use niri_config::{Action, Binds, Modifiers}; +use niri_config::{Action, Binds, Modifiers, Trigger}; use niri_ipc::LayoutSwitchTarget; use smithay::backend::input::{ AbsolutePositionEvent, Axis, AxisSource, ButtonState, Device, DeviceCapability, Event, @@ -1731,7 +1731,7 @@ fn bound_action( let raw = raw?; for bind in &bindings.0 { - if bind.key.keysym != raw { + if bind.key.trigger != Trigger::Keysym(raw) { continue; } @@ -1911,7 +1911,7 @@ mod tests { let close_keysym = Keysym::q; let bindings = Binds(vec