diff --git a/atom/browser/native_window_mac.mm b/atom/browser/native_window_mac.mm index e5192c8b629..0845cf8eba6 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 5c084cb178f..2b1fc4a86b5 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', () => {