From f0013774934b5b601b27858bd4e07153585181fa Mon Sep 17 00:00:00 2001 From: Shubham Date: Wed, 7 Jun 2017 12:28:50 -0400 Subject: [PATCH 1/4] :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', () => { From 373decd07e3a14652d97ca0b85da3d9f472dd8ce Mon Sep 17 00:00:00 2001 From: Shubham Date: Wed, 7 Jun 2017 19:01:06 -0400 Subject: [PATCH 2/4] :art: --- atom/browser/native_window_mac.mm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/atom/browser/native_window_mac.mm b/atom/browser/native_window_mac.mm index 0845cf8eba62..87fa53f56188 100644 --- a/atom/browser/native_window_mac.mm +++ b/atom/browser/native_window_mac.mm @@ -207,7 +207,7 @@ bool ScopedDisableResize::disable_resize_ = false; - (void)windowWillMiniaturize:(NSNotification*)notification { NSWindow* window = shell_->GetNativeWindow(); - // store the current level to be restored in windowDidDeminiaturize + // store the current status window level to be restored in windowDidDeminiaturize level_ = NSStatusWindowLevel; [window setLevel:NSNormalWindowLevel]; } From 12b90a23049e583c1b8b2d8ed8b8443b1148bf66 Mon Sep 17 00:00:00 2001 From: Shubham Date: Thu, 15 Jun 2017 18:05:58 -0400 Subject: [PATCH 3/4] :bug: store current level fix --- atom/browser/native_window_mac.mm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/atom/browser/native_window_mac.mm b/atom/browser/native_window_mac.mm index 87fa53f56188..100baf96a073 100644 --- a/atom/browser/native_window_mac.mm +++ b/atom/browser/native_window_mac.mm @@ -208,7 +208,7 @@ bool ScopedDisableResize::disable_resize_ = false; - (void)windowWillMiniaturize:(NSNotification*)notification { NSWindow* window = shell_->GetNativeWindow(); // store the current status window level to be restored in windowDidDeminiaturize - level_ = NSStatusWindowLevel; + level_ = [window level]; [window setLevel:NSNormalWindowLevel]; } From 4935e8567f25e54f47ce0a66f08190e85d8ab865 Mon Sep 17 00:00:00 2001 From: Kevin Sawicki Date: Fri, 14 Jul 2017 10:07:06 -0700 Subject: [PATCH 4/4] Initialize level_ in initWithShell --- atom/browser/native_window_mac.mm | 4 ++-- spec/api-browser-window-spec.js | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/atom/browser/native_window_mac.mm b/atom/browser/native_window_mac.mm index 100baf96a073..30629a2f6329 100644 --- a/atom/browser/native_window_mac.mm +++ b/atom/browser/native_window_mac.mm @@ -86,6 +86,7 @@ bool ScopedDisableResize::disable_resize_ = false; if ((self = [super init])) { shell_ = shell; is_zooming_ = false; + level_ = [shell_->GetNativeWindow() level]; } return self; } @@ -217,8 +218,7 @@ bool ScopedDisableResize::disable_resize_ = false; } - (void)windowDidDeminiaturize:(NSNotification*)notification { - NSWindow* window = shell_->GetNativeWindow(); - [window setLevel:level_]; + [shell_->GetNativeWindow() setLevel:level_]; shell_->NotifyWindowRestore(); } diff --git a/spec/api-browser-window-spec.js b/spec/api-browser-window-spec.js index 2b1fc4a86b52..b1c0cddab001 100644 --- a/spec/api-browser-window-spec.js +++ b/spec/api-browser-window-spec.js @@ -620,7 +620,7 @@ describe('BrowserWindow module', function () { }) }) - describe.only('BrowserWindow.alwaysOnTop() resets level on minimize', function () { + describe('BrowserWindow.alwaysOnTop() resets level on minimize', function () { if (process.platform !== 'darwin') { return }