Merge pull request #1510 from zed-industries/toggle-full-screen

Antonio Scandurra created

Add `zed::ToggleFullScreen` bound to `ctrl-cmd-f`

Change summary

assets/keymaps/default.json            |  1 +
crates/gpui/src/app.rs                 |  9 +++++++++
crates/gpui/src/platform.rs            |  1 +
crates/gpui/src/platform/mac/window.rs | 12 ++++++++++++
crates/gpui/src/platform/test.rs       |  2 ++
crates/zed/src/zed.rs                  |  6 ++++++
6 files changed, 31 insertions(+)

Detailed changes

assets/keymaps/default.json 🔗

@@ -28,6 +28,7 @@
             "cmd-h": "zed::Hide",
             "alt-cmd-h": "zed::HideOthers",
             "cmd-m": "zed::Minimize",
+            "ctrl-cmd-f": "zed::ToggleFullScreen",
             "cmd-n": "workspace::NewFile",
             "cmd-shift-n": "workspace::NewWindow",
             "cmd-o": "workspace::Open",

crates/gpui/src/app.rs 🔗

@@ -1319,6 +1319,11 @@ impl MutableAppContext {
         window.zoom();
     }
 
+    pub fn toggle_window_full_screen(&self, window_id: usize) {
+        let (_, window) = &self.presenters_and_platform_windows[&window_id];
+        window.toggle_full_screen();
+    }
+
     fn prompt(
         &self,
         window_id: usize,
@@ -3683,6 +3688,10 @@ impl<'a, T: View> ViewContext<'a, T> {
         self.app.zoom_window(self.window_id)
     }
 
+    pub fn toggle_full_screen(&self) {
+        self.app.toggle_window_full_screen(self.window_id)
+    }
+
     pub fn prompt(
         &self,
         level: PromptLevel,

crates/gpui/src/platform.rs 🔗

@@ -123,6 +123,7 @@ pub trait Window: WindowContext {
     fn show_character_palette(&self);
     fn minimize(&self);
     fn zoom(&self);
+    fn toggle_full_screen(&self);
 }
 
 pub trait WindowContext {

crates/gpui/src/platform/mac/window.rs 🔗

@@ -601,6 +601,18 @@ impl platform::Window for Window {
             })
             .detach();
     }
+
+    fn toggle_full_screen(&self) {
+        let this = self.0.borrow();
+        let window = this.native_window;
+        this.executor
+            .spawn(async move {
+                unsafe {
+                    window.toggleFullScreen_(nil);
+                }
+            })
+            .detach();
+    }
 }
 
 impl platform::WindowContext for Window {

crates/gpui/src/platform/test.rs 🔗

@@ -294,6 +294,8 @@ impl super::Window for Window {
     fn minimize(&self) {}
 
     fn zoom(&self) {}
+
+    fn toggle_full_screen(&self) {}
 }
 
 pub fn platform() -> Platform {

crates/zed/src/zed.rs 🔗

@@ -51,6 +51,7 @@ actions!(
         ShowAll,
         Minimize,
         Zoom,
+        ToggleFullScreen,
         Quit,
         DebugElements,
         OpenSettings,
@@ -88,6 +89,11 @@ pub fn init(app_state: &Arc<AppState>, cx: &mut gpui::MutableAppContext) {
             cx.zoom_window();
         },
     );
+    cx.add_action(
+        |_: &mut Workspace, _: &ToggleFullScreen, cx: &mut ViewContext<Workspace>| {
+            cx.toggle_full_screen();
+        },
+    );
     cx.add_global_action(quit);
     cx.add_global_action(move |action: &OpenBrowser, cx| cx.platform().open_url(&action.url));
     cx.add_global_action(move |_: &IncreaseBufferFontSize, cx| {