From e9813031f6e308984cb5547aa1049839cb75745f Mon Sep 17 00:00:00 2001 From: acheronfail Date: Wed, 24 Apr 2019 05:05:47 +1000 Subject: Add fullscreen support Fixes #34. Fixes #2012. --- src/event.rs | 43 ++++++++++++++++++++++++++++++++++++------- 1 file changed, 36 insertions(+), 7 deletions(-) (limited to 'src/event.rs') diff --git a/src/event.rs b/src/event.rs index ffedce2d..1f3e9ca5 100644 --- a/src/event.rs +++ b/src/event.rs @@ -188,25 +188,41 @@ impl<'a, N: Notify + 'a> input::ActionContext for ActionContext<'a, N> { Err(_) => warn!("Unable to start new Alacritty process: {} {:?}", alacritty, args), } } + + fn toggle_fullscreen(&mut self) { + self.window_changes.toggle_fullscreen(); + } + + #[cfg(target_os = "macos")] + fn toggle_simple_fullscreen(&mut self) { + self.window_changes.toggle_simple_fullscreen() + } } /// The ActionContext can't really have direct access to the Window /// with the current design. Event handlers that want to change the /// window must set these flags instead. The processor will trigger /// the actual changes. +#[derive(Default)] pub struct WindowChanges { pub hide: bool, + pub toggle_fullscreen: bool, + #[cfg(target_os = "macos")] + pub toggle_simple_fullscreen: bool, } impl WindowChanges { fn clear(&mut self) { - self.hide = false; + *self = WindowChanges::default(); + } + + fn toggle_fullscreen(&mut self) { + self.toggle_fullscreen = !self.toggle_fullscreen; } -} -impl Default for WindowChanges { - fn default() -> WindowChanges { - WindowChanges { hide: false } + #[cfg(target_os = "macos")] + fn toggle_simple_fullscreen(&mut self) { + self.toggle_simple_fullscreen = !self.toggle_simple_fullscreen; } } @@ -281,6 +297,8 @@ pub struct Processor { window_changes: WindowChanges, save_to_clipboard: bool, alt_send_esc: bool, + is_fullscreen: bool, + is_simple_fullscreen: bool, } /// Notify that the terminal was resized @@ -326,6 +344,8 @@ impl Processor { window_changes: Default::default(), save_to_clipboard: config.selection().save_to_clipboard, alt_send_esc: config.alt_send_esc(), + is_fullscreen: false, + is_simple_fullscreen: false, } } @@ -546,8 +566,17 @@ impl Processor { window.hide(); } - if self.window_changes.hide { - window.hide(); + #[cfg(target_os = "macos")] + { + if self.window_changes.toggle_simple_fullscreen && !self.is_fullscreen { + window.set_simple_fullscreen(!self.is_simple_fullscreen); + self.is_simple_fullscreen = !self.is_simple_fullscreen; + } + } + + if self.window_changes.toggle_fullscreen && !self.is_simple_fullscreen { + window.set_fullscreen(!self.is_fullscreen); + self.is_fullscreen = !self.is_fullscreen; } self.window_changes.clear(); -- cgit