Merge pull request #7296 from adammeyer/custom-window-level
Allow custom window level when sending window to top
This commit is contained in:
commit
de76bf5f63
8 changed files with 36 additions and 11 deletions
|
@ -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() {
|
||||||
|
|
|
@ -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);
|
||||||
|
|
|
@ -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;
|
||||||
|
|
|
@ -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;
|
||||||
|
|
|
@ -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() {
|
||||||
|
|
|
@ -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);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -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;
|
||||||
|
|
|
@ -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
|
||||||
|
|
Loading…
Add table
Reference in a new issue