From f0013774934b5b601b27858bd4e07153585181fa Mon Sep 17 00:00:00 2001 From: Shubham Date: Wed, 7 Jun 2017 12:28:50 -0400 Subject: [PATCH] :apple: Fix an issue where alwaysOnTop window disappears when restored from the application icon --- atom/browser/native_window_mac.mm | 10 ++++++++++ spec/api-browser-window-spec.js | 16 ++++++++++++++++ 2 files changed, 26 insertions(+) diff --git a/atom/browser/native_window_mac.mm b/atom/browser/native_window_mac.mm index e5192c8b6293..0845cf8eba62 100644 --- a/atom/browser/native_window_mac.mm +++ b/atom/browser/native_window_mac.mm @@ -75,6 +75,7 @@ bool ScopedDisableResize::disable_resize_ = false; @private atom::NativeWindowMac* shell_; bool is_zooming_; + int level_; } - (id)initWithShell:(atom::NativeWindowMac*)shell; @end @@ -204,11 +205,20 @@ bool ScopedDisableResize::disable_resize_ = false; shell_->NotifyWindowMoved(); } +- (void)windowWillMiniaturize:(NSNotification*)notification { + NSWindow* window = shell_->GetNativeWindow(); + // store the current level to be restored in windowDidDeminiaturize + level_ = NSStatusWindowLevel; + [window setLevel:NSNormalWindowLevel]; +} + - (void)windowDidMiniaturize:(NSNotification*)notification { shell_->NotifyWindowMinimize(); } - (void)windowDidDeminiaturize:(NSNotification*)notification { + NSWindow* window = shell_->GetNativeWindow(); + [window setLevel:level_]; shell_->NotifyWindowRestore(); } diff --git a/spec/api-browser-window-spec.js b/spec/api-browser-window-spec.js index 5c084cb178fd..2b1fc4a86b52 100644 --- a/spec/api-browser-window-spec.js +++ b/spec/api-browser-window-spec.js @@ -620,6 +620,22 @@ describe('BrowserWindow module', function () { }) }) + describe.only('BrowserWindow.alwaysOnTop() resets level on minimize', function () { + if (process.platform !== 'darwin') { + return + } + + it('resets the windows level on minimize', function () { + assert.equal(w.isAlwaysOnTop(), false) + w.setAlwaysOnTop(true, 'screen-saver') + assert.equal(w.isAlwaysOnTop(), true) + w.minimize() + assert.equal(w.isAlwaysOnTop(), false) + w.restore() + assert.equal(w.isAlwaysOnTop(), true) + }) + }) + describe('BrowserWindow.setAutoHideCursor(autoHide)', () => { if (process.platform !== 'darwin') { it('is not available on non-macOS platforms', () => {