better handling of quit

macos-click-through
Keith Simmons 5 years ago
parent 92d7f472e6
commit cebcaa86bc

@ -21,6 +21,7 @@ pub enum UiCommand {
Drag(u32, u32), Drag(u32, u32),
FocusLost, FocusLost,
FocusGained, FocusGained,
Quit
} }
impl UiCommand { impl UiCommand {
@ -60,6 +61,10 @@ impl UiCommand {
.command("if exists('#FocusGained') | doautocmd <nomodeline> FocusGained | endif") .command("if exists('#FocusGained') | doautocmd <nomodeline> FocusGained | endif")
.await .await
.expect("Focus Gained Failed"), .expect("Focus Gained Failed"),
UiCommand::Quit => {
nvim.command("qa!")
.await.ok(); // Ignoring result as it won't succeed since the app closed.
}
} }
} }

@ -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<Keycode>, text: Option<String>) { pub fn handle_keyboard_input(&mut self, keycode: Option<Keycode>, text: Option<String>) {
let modifiers = self.context.keyboard().mod_state(); let modifiers = self.context.keyboard().mod_state();
@ -375,7 +379,7 @@ pub fn ui_loop() {
.context .context
.event_pump() .event_pump()
.expect("Could not create sdl event pump"); .expect("Could not create sdl event pump");
'running: loop { loop {
let frame_start = Instant::now(); let frame_start = Instant::now();
window.synchronize_settings(); window.synchronize_settings();
@ -386,12 +390,9 @@ pub fn ui_loop() {
for event in event_pump.poll_iter() { for event in event_pump.poll_iter() {
match event { match event {
Event::Quit { .. } => break 'running, Event::Quit { .. } => window.handle_quit(),
Event::KeyDown { Event::KeyDown { keycode: received_keycode, .. } => {
keycode: Some(received_keycode), keycode = received_keycode;
..
} => {
keycode = Some(received_keycode);
} }
Event::TextInput { text, .. } => keytext = Some(text), Event::TextInput { text, .. } => keytext = Some(text),
Event::MouseMotion { x, y, .. } => window.handle_pointer_motion(x, y), Event::MouseMotion { x, y, .. } => window.handle_pointer_motion(x, y),

Loading…
Cancel
Save