custom window level as string

This commit is contained in:
adammeyer 2016-09-21 22:49:06 -04:00
parent b35bde662a
commit 783d47f78b
7 changed files with 28 additions and 12 deletions

View file

@ -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);
}

View file

@ -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;

View file

@ -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;

View file

@ -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() {

View file

@ -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);
}

View file

@ -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;

View file

@ -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.