diff --git a/src/bridge/ui_commands.rs b/src/bridge/ui_commands.rs index 4bbca9e..9e51fb5 100644 --- a/src/bridge/ui_commands.rs +++ b/src/bridge/ui_commands.rs @@ -21,6 +21,7 @@ pub enum UiCommand { Drag(u32, u32), FocusLost, FocusGained, + Quit, } impl UiCommand { @@ -60,6 +61,9 @@ impl UiCommand { .command("if exists('#FocusGained') | doautocmd FocusGained | endif") .await .expect("Focus Gained Failed"), + UiCommand::Quit => { + nvim.command("qa!").await.ok(); // Ignoring result as it won't succeed since the app closed. + } } } diff --git a/src/window.rs b/src/window.rs index 99a3091..dff20d0 100644 --- a/src/window.rs +++ b/src/window.rs @@ -199,6 +199,10 @@ impl WindowWrapper { } } + pub fn handle_quit(&mut self) { + BRIDGE.queue_command(UiCommand::Quit); + } + pub fn handle_keyboard_input(&mut self, keycode: Option, text: Option) { let modifiers = self.context.keyboard().mod_state(); @@ -375,7 +379,7 @@ pub fn ui_loop() { .context .event_pump() .expect("Could not create sdl event pump"); - 'running: loop { + loop { let frame_start = Instant::now(); window.synchronize_settings(); @@ -386,12 +390,12 @@ pub fn ui_loop() { for event in event_pump.poll_iter() { match event { - Event::Quit { .. } => break 'running, + Event::Quit { .. } => window.handle_quit(), Event::KeyDown { - keycode: Some(received_keycode), + keycode: received_keycode, .. } => { - keycode = Some(received_keycode); + keycode = received_keycode; } Event::TextInput { text, .. } => keytext = Some(text), Event::MouseMotion { x, y, .. } => window.handle_pointer_motion(x, y),