Browse Source

custom window level as string

adammeyer 8 years ago
parent
commit
783d47f78b

+ 1 - 1
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);
 }

+ 1 - 1
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;

+ 1 - 1
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;

+ 21 - 4
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() {

+ 1 - 1
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);
 }
 

+ 1 - 1
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;

+ 2 - 3
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.