From 0047272673f8cc3679299b2626a526b9a329b7de Mon Sep 17 00:00:00 2001 From: Ivan Molodetskikh Date: Wed, 9 Aug 2023 14:21:29 +0400 Subject: Implement TTY switching Having to pass backend around turns out to be a problem... --- src/input.rs | 10 ++++++++-- src/tty.rs | 10 +++++++++- src/winit.rs | 2 +- 3 files changed, 18 insertions(+), 4 deletions(-) (limited to 'src') diff --git a/src/input.rs b/src/input.rs index ad182645..f2a91082 100644 --- a/src/input.rs +++ b/src/input.rs @@ -15,7 +15,11 @@ enum InputAction { } impl Niri { - pub fn process_input_event(&mut self, event: InputEvent) { + pub fn process_input_event( + &mut self, + change_vt: &mut dyn FnMut(i32), + event: InputEvent, + ) { trace!("process_input_event"); match event { @@ -45,7 +49,9 @@ impl Niri { info!("quitting because Esc was pressed"); self.stop_signal.stop() } - InputAction::ChangeVt(vt) => todo!(), + InputAction::ChangeVt(vt) => { + (*change_vt)(vt); + } } } } diff --git a/src/tty.rs b/src/tty.rs index bc5fe907..b2a7e61a 100644 --- a/src/tty.rs +++ b/src/tty.rs @@ -117,7 +117,9 @@ impl Tty { let input_backend = LibinputInputBackend::new(libinput.clone()); event_loop .insert_source(input_backend, |event, _, data| { - data.niri.process_input_event(event) + 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); }) .unwrap(); @@ -440,4 +442,10 @@ impl Tty { )?; Ok(compositor) } + + fn change_vt(&mut self, vt: i32) { + if let Err(err) = self.session.change_vt(vt) { + error!("error changing VT: {err}"); + } + } } diff --git a/src/winit.rs b/src/winit.rs index d0994f7a..b1e9bf65 100644 --- a/src/winit.rs +++ b/src/winit.rs @@ -110,7 +110,7 @@ impl Winit { None, ); } - WinitEvent::Input(event) => niri.process_input_event(event), + WinitEvent::Input(event) => niri.process_input_event(&mut |_| (), event), _ => (), }); -- cgit