Merge pull request #7296 from adammeyer/custom-window-level

Allow custom window level when sending window to top
This commit is contained in:
Cheng Zhao 2016-09-28 19:18:12 +08:00 committed by GitHub
commit de76bf5f63
8 changed files with 36 additions and 11 deletions

View file

@ -499,8 +499,10 @@ bool Window::IsClosable() {
return window_->IsClosable(); return window_->IsClosable();
} }
void Window::SetAlwaysOnTop(bool top) { void Window::SetAlwaysOnTop(bool top, mate::Arguments* args) {
window_->SetAlwaysOnTop(top); std::string level = "floating";
args->GetNext(&level);
window_->SetAlwaysOnTop(top, level);
} }
bool Window::IsAlwaysOnTop() { bool Window::IsAlwaysOnTop() {

View file

@ -136,7 +136,7 @@ class Window : public mate::TrackableObject<Window>,
bool IsFullScreenable(); bool IsFullScreenable();
void SetClosable(bool closable); void SetClosable(bool closable);
bool IsClosable(); bool IsClosable();
void SetAlwaysOnTop(bool top); void SetAlwaysOnTop(bool top, mate::Arguments* args);
bool IsAlwaysOnTop(); bool IsAlwaysOnTop();
void Center(); void Center();
void SetPosition(int x, int y, mate::Arguments* args); void SetPosition(int x, int y, mate::Arguments* args);

View file

@ -118,7 +118,8 @@ class NativeWindow : public base::SupportsUserData,
virtual bool IsFullScreenable() = 0; virtual bool IsFullScreenable() = 0;
virtual void SetClosable(bool closable) = 0; virtual void SetClosable(bool closable) = 0;
virtual bool IsClosable() = 0; virtual bool IsClosable() = 0;
virtual void SetAlwaysOnTop(bool top) = 0; virtual void SetAlwaysOnTop(bool top,
const std::string& level = "floating") = 0;
virtual bool IsAlwaysOnTop() = 0; virtual bool IsAlwaysOnTop() = 0;
virtual void Center() = 0; virtual void Center() = 0;
virtual void SetTitle(const std::string& title) = 0; virtual void SetTitle(const std::string& title) = 0;

View file

@ -64,7 +64,7 @@ class NativeWindowMac : public NativeWindow,
bool IsFullScreenable() override; bool IsFullScreenable() override;
void SetClosable(bool closable) override; void SetClosable(bool closable) override;
bool IsClosable() override; bool IsClosable() override;
void SetAlwaysOnTop(bool top) override; void SetAlwaysOnTop(bool top, const std::string& level) override;
bool IsAlwaysOnTop() override; bool IsAlwaysOnTop() override;
void Center() override; void Center() override;
void SetTitle(const std::string& title) override; void SetTitle(const std::string& title) override;

View file

@ -943,12 +943,32 @@ bool NativeWindowMac::IsClosable() {
return [window_ styleMask] & NSClosableWindowMask; return [window_ styleMask] & NSClosableWindowMask;
} }
void NativeWindowMac::SetAlwaysOnTop(bool top) { void NativeWindowMac::SetAlwaysOnTop(bool top, const std::string& level) {
[window_ setLevel:(top ? NSFloatingWindowLevel : NSNormalWindowLevel)]; int windowLevel = NSNormalWindowLevel;
if (top) {
if (level == "floating") {
windowLevel = NSFloatingWindowLevel;
} else if (level == "torn-off-menu") {
windowLevel = NSTornOffMenuWindowLevel;
} else if (level == "modal-panel") {
windowLevel = NSModalPanelWindowLevel;
} else if (level == "main-menu") {
windowLevel = NSMainMenuWindowLevel;
} else if (level == "status") {
windowLevel = NSStatusWindowLevel;
} else if (level == "pop-up-menu") {
windowLevel = NSPopUpMenuWindowLevel;
} else if (level == "screen-saver") {
windowLevel = NSScreenSaverWindowLevel;
} else if (level == "dock") {
windowLevel = NSDockWindowLevel;
}
}
[window_ setLevel:windowLevel];
} }
bool NativeWindowMac::IsAlwaysOnTop() { bool NativeWindowMac::IsAlwaysOnTop() {
return [window_ level] == NSFloatingWindowLevel; return [window_ level] != NSNormalWindowLevel;
} }
void NativeWindowMac::Center() { void NativeWindowMac::Center() {

View file

@ -682,7 +682,7 @@ bool NativeWindowViews::IsClosable() {
#endif #endif
} }
void NativeWindowViews::SetAlwaysOnTop(bool top) { void NativeWindowViews::SetAlwaysOnTop(bool top, const std::string& level) {
window_->SetAlwaysOnTop(top); window_->SetAlwaysOnTop(top);
} }

View file

@ -84,7 +84,7 @@ class NativeWindowViews : public NativeWindow,
bool IsFullScreenable() override; bool IsFullScreenable() override;
void SetClosable(bool closable) override; void SetClosable(bool closable) override;
bool IsClosable() override; bool IsClosable() override;
void SetAlwaysOnTop(bool top) override; void SetAlwaysOnTop(bool top, const std::string& level) override;
bool IsAlwaysOnTop() override; bool IsAlwaysOnTop() override;
void Center() override; void Center() override;
void SetTitle(const std::string& title) override; void SetTitle(const std::string& title) override;

View file

@ -823,9 +823,11 @@ Returns `Boolean` - Whether the window can be manually closed by user.
On Linux always returns `true`. On Linux always returns `true`.
#### `win.setAlwaysOnTop(flag)` #### `win.setAlwaysOnTop(flag[, level])`
* `flag` Boolean * `flag` Boolean
* `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 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 setting this, the window is still a normal window, not a toolbox window which