From 783d47f78b9025e6bc16d170d509d22f3b65b016 Mon Sep 17 00:00:00 2001 From: adammeyer Date: Wed, 21 Sep 2016 22:49:06 -0400 Subject: [PATCH] custom window level as string --- atom/browser/api/atom_api_window.cc | 2 +- atom/browser/native_window.h | 2 +- atom/browser/native_window_mac.h | 2 +- atom/browser/native_window_mac.mm | 25 +++++++++++++++++++++---- atom/browser/native_window_views.cc | 2 +- atom/browser/native_window_views.h | 2 +- docs/api/browser-window.md | 5 ++--- 7 files changed, 28 insertions(+), 12 deletions(-) diff --git a/atom/browser/api/atom_api_window.cc b/atom/browser/api/atom_api_window.cc index 93bccfabd70..cdc085ab9b0 100644 --- a/atom/browser/api/atom_api_window.cc +++ b/atom/browser/api/atom_api_window.cc @@ -487,7 +487,7 @@ bool Window::IsClosable() { } void Window::SetAlwaysOnTop(bool top, mate::Arguments* args) { - int level = 0; + std::string level = "floating"; args->GetNext(&level); window_->SetAlwaysOnTop(top, level); } diff --git a/atom/browser/native_window.h b/atom/browser/native_window.h index ddc90ff63a5..4032861ac57 100644 --- a/atom/browser/native_window.h +++ b/atom/browser/native_window.h @@ -118,7 +118,7 @@ class NativeWindow : public base::SupportsUserData, virtual bool IsFullScreenable() = 0; virtual void SetClosable(bool closable) = 0; virtual bool IsClosable() = 0; - virtual void SetAlwaysOnTop(bool top, int level = 0) = 0; + virtual void SetAlwaysOnTop(bool top, const std::string& level) = 0; virtual bool IsAlwaysOnTop() = 0; virtual void Center() = 0; virtual void SetTitle(const std::string& title) = 0; diff --git a/atom/browser/native_window_mac.h b/atom/browser/native_window_mac.h index 9c909894bfc..4fd7bcc3c2a 100644 --- a/atom/browser/native_window_mac.h +++ b/atom/browser/native_window_mac.h @@ -64,7 +64,7 @@ class NativeWindowMac : public NativeWindow, bool IsFullScreenable() override; void SetClosable(bool closable) override; bool IsClosable() override; - void SetAlwaysOnTop(bool top, int level) override; + void SetAlwaysOnTop(bool top, const std::string& level) override; bool IsAlwaysOnTop() override; void Center() override; void SetTitle(const std::string& title) override; diff --git a/atom/browser/native_window_mac.mm b/atom/browser/native_window_mac.mm index c35f66b319c..6582ac3b115 100644 --- a/atom/browser/native_window_mac.mm +++ b/atom/browser/native_window_mac.mm @@ -943,11 +943,28 @@ bool NativeWindowMac::IsClosable() { return [window_ styleMask] & NSClosableWindowMask; } -void NativeWindowMac::SetAlwaysOnTop(bool top, int level) { - if (!level) { - level = NSFloatingWindowLevel; +void NativeWindowMac::SetAlwaysOnTop(bool top, std::string level) { + int intLevel; + if (level == "normal") { + intLevel = NSNormalWindowLevel; + } else if (level == "floating") { + intLevel = NSFloatingWindowLevel; + } else if (level == "torn-off-menu") { + intLevel = NSTornOffMenuWindowLevel; + } else if (level == "modal-panel") { + intLevel = NSModalPanelWindowLevel; + } else if (level == "main-menu") { + intLevel = NSMainMenuWindowLevel; + } else if (level == "status") { + intLevel = NSStatusWindowLevel; + } else if (level == "pop-up-menu") { + intLevel = NSPopUpMenuWindowLevel; + } else if (level == "screen-saver") { + intLevel = NSScreenSaverWindowLevel; + } else if (level == "dock") { + intLevel = NSDockWindowLevel; } - [window_ setLevel:(top ? level : NSNormalWindowLevel)]; + [window_ setLevel:(top ? intLevel : NSNormalWindowLevel)]; } bool NativeWindowMac::IsAlwaysOnTop() { diff --git a/atom/browser/native_window_views.cc b/atom/browser/native_window_views.cc index f01cfcc56eb..00699559738 100644 --- a/atom/browser/native_window_views.cc +++ b/atom/browser/native_window_views.cc @@ -682,7 +682,7 @@ bool NativeWindowViews::IsClosable() { #endif } -void NativeWindowViews::SetAlwaysOnTop(bool top, int level) { +void NativeWindowViews::SetAlwaysOnTop(bool top, const std::string& level) { window_->SetAlwaysOnTop(top, level); } diff --git a/atom/browser/native_window_views.h b/atom/browser/native_window_views.h index 608050c7ca9..0b4a9245db1 100644 --- a/atom/browser/native_window_views.h +++ b/atom/browser/native_window_views.h @@ -84,7 +84,7 @@ class NativeWindowViews : public NativeWindow, bool IsFullScreenable() override; void SetClosable(bool closable) override; bool IsClosable() override; - void SetAlwaysOnTop(bool top, int level) override; + void SetAlwaysOnTop(bool top, const std::string& level) override; bool IsAlwaysOnTop() override; void Center() override; void SetTitle(const std::string& title) override; diff --git a/docs/api/browser-window.md b/docs/api/browser-window.md index b109ac13c77..972952fb344 100644 --- a/docs/api/browser-window.md +++ b/docs/api/browser-window.md @@ -812,14 +812,13 @@ returns `true`. #### `win.setAlwaysOnTop(flag[, level])` * `flag` Boolean -* `level` Integer (optional) macOS +* `level` String (optional) _macOS_ - Options include (`normal`, `floating`, `torn-off-menu`, +`modal-panel`, `main-menu`, `status`, `pop-up-menu`, `screen-saver`, `dock`). Default is `floating`. Sets whether the window should show always on top of other windows. After setting this, the window is still a normal window, not a toolbox window which can not be focused on. -A custom level can be set on MacOS that will override the default `NSFloatingWindowLevel`. - #### `win.isAlwaysOnTop()` Returns whether the window is always on top of other windows.