From 0acd1d04e175735631e69617cb636b9f12a38489 Mon Sep 17 00:00:00 2001 From: Ivan Molodetskikh Date: Sun, 13 Aug 2023 07:45:10 +0400 Subject: Use Alt as mod with winit backend --- src/input.rs | 19 +++++++++++++++---- src/tty.rs | 4 +++- src/winit.rs | 5 ++++- 3 files changed, 22 insertions(+), 6 deletions(-) (limited to 'src') diff --git a/src/input.rs b/src/input.rs index aa03a593..1b7c65ee 100644 --- a/src/input.rs +++ b/src/input.rs @@ -22,10 +22,16 @@ enum InputAction { ToggleFullscreen, } +pub enum CompositorMod { + Super, + Alt, +} + impl Niri { pub fn process_input_event( &mut self, change_vt: &mut dyn FnMut(i32), + compositor_mod: CompositorMod, event: InputEvent, ) { let _span = tracy_client::span!("process_input_event"); @@ -44,10 +50,15 @@ impl Niri { time, |_, mods, keysym| { if event.state() == KeyState::Pressed { + let mod_down = match compositor_mod { + CompositorMod::Super => mods.logo, + CompositorMod::Alt => mods.alt, + }; + // FIXME: these don't work in the Russian layout. I guess I'll need to // find a US keymap, then map keys somehow. match keysym.modified_sym() { - keysyms::KEY_E if mods.logo => { + keysyms::KEY_E if mod_down => { FilterResult::Intercept(InputAction::Quit) } keysym @ keysyms::KEY_XF86Switch_VT_1 @@ -55,13 +66,13 @@ impl Niri { let vt = (keysym - keysyms::KEY_XF86Switch_VT_1 + 1) as i32; FilterResult::Intercept(InputAction::ChangeVt(vt)) } - keysyms::KEY_t if mods.logo => { + keysyms::KEY_t if mod_down => { FilterResult::Intercept(InputAction::SpawnTerminal) } - keysyms::KEY_q if mods.logo => { + keysyms::KEY_q if mod_down => { FilterResult::Intercept(InputAction::CloseWindow) } - keysyms::KEY_f if mods.logo => { + keysyms::KEY_f if mod_down => { FilterResult::Intercept(InputAction::ToggleFullscreen) } _ => FilterResult::Forward, diff --git a/src/tty.rs b/src/tty.rs index 9594945a..0971fd43 100644 --- a/src/tty.rs +++ b/src/tty.rs @@ -28,6 +28,7 @@ use smithay::utils::DeviceFd; use smithay_drm_extras::edid::EdidInfo; use crate::backend::Backend; +use crate::input::CompositorMod; use crate::niri::OutputRenderElements; use crate::{LoopData, Niri}; @@ -111,7 +112,8 @@ impl Tty { .insert_source(input_backend, |event, _, data| { let tty = data.tty.as_mut().unwrap(); let mut change_vt = |vt| tty.change_vt(vt); - data.niri.process_input_event(&mut change_vt, event); + data.niri + .process_input_event(&mut change_vt, CompositorMod::Super, event); }) .unwrap(); diff --git a/src/winit.rs b/src/winit.rs index e63ac30c..3de74ce4 100644 --- a/src/winit.rs +++ b/src/winit.rs @@ -10,6 +10,7 @@ use smithay::reexports::calloop::LoopHandle; use smithay::utils::{Rectangle, Transform}; use crate::backend::Backend; +use crate::input::CompositorMod; use crate::niri::OutputRenderElements; use crate::{LoopData, Niri}; @@ -116,7 +117,9 @@ impl Winit { None, ); } - WinitEvent::Input(event) => niri.process_input_event(&mut |_| (), event), + WinitEvent::Input(event) => { + niri.process_input_event(&mut |_| (), CompositorMod::Alt, event) + } WinitEvent::Focus(_) => (), WinitEvent::Refresh => niri.queue_redraw(), }); -- cgit