diff --git a/atom/browser/native_window_mac.mm b/atom/browser/native_window_mac.mm index 9899caeb2b..9d8464295a 100644 --- a/atom/browser/native_window_mac.mm +++ b/atom/browser/native_window_mac.mm @@ -173,6 +173,7 @@ bool ScopedDisableResize::disable_resize_ = false; atom::NativeWindowMac* shell_; bool is_zooming_; int level_; + bool is_resizable_; } - (id)initWithShell:(atom::NativeWindowMac*)shell; @end @@ -335,6 +336,9 @@ bool ScopedDisableResize::disable_resize_ = false; } - (void)windowWillEnterFullScreen:(NSNotification*)notification { + // Setting resizable to true before entering fullscreen + is_resizable_ = shell_->IsResizable(); + shell_->SetResizable(true); // Hide the native toolbar before entering fullscreen, so there is no visual // artifacts. if (base::mac::IsAtLeastOS10_10() && @@ -394,6 +398,7 @@ bool ScopedDisableResize::disable_resize_ = false; } - (void)windowDidExitFullScreen:(NSNotification*)notification { + shell_->SetResizable(is_resizable_); shell_->NotifyWindowLeaveFullScreen(); } diff --git a/spec/api-browser-window-spec.js b/spec/api-browser-window-spec.js index 1d3075022e..a5d3345fdf 100644 --- a/spec/api-browser-window-spec.js +++ b/spec/api-browser-window-spec.js @@ -2180,6 +2180,25 @@ describe('BrowserWindow module', function () { }) }) + describe('fullscreen state with resizable set', function () { + // Only implemented on macOS. + if (process.platform !== 'darwin') return + + it('resizable flag should be set to true and restored', function (done) { + w.destroy() + w = new BrowserWindow({ resizable: false }) + w.once('enter-full-screen', () => { + assert.equal(w.isResizable(), true) + w.setFullScreen(false) + }) + w.once('leave-full-screen', () => { + assert.equal(w.isResizable(), false) + done() + }) + w.setFullScreen(true) + }) + }) + describe('fullscreen state', function () { // Only implemented on macOS. if (process.platform !== 'darwin') return