void Window::SetAlwaysOnTop(bool top, mate::Arguments* args) {
std::string level = "floating";
+ int relativeLevel = 0;
args->GetNext(&level);
- window_->SetAlwaysOnTop(top, level);
+ args->GetNext(&relativeLevel);
+ window_->SetAlwaysOnTop(top, level, relativeLevel);
}
bool Window::IsAlwaysOnTop() {
virtual void SetClosable(bool closable) = 0;
virtual bool IsClosable() = 0;
virtual void SetAlwaysOnTop(bool top,
- const std::string& level = "floating") = 0;
+ const std::string& level = "floating",
+ int relativeLevel = 0) = 0;
virtual bool IsAlwaysOnTop() = 0;
virtual void Center() = 0;
virtual void SetTitle(const std::string& title) = 0;
bool IsFullScreenable() override;
void SetClosable(bool closable) override;
bool IsClosable() override;
- void SetAlwaysOnTop(bool top, const std::string& level) override;
+ void SetAlwaysOnTop(bool top, const std::string& level,
+ int relativeLevel) override;
bool IsAlwaysOnTop() override;
void Center() override;
void SetTitle(const std::string& title) override;
return [window_ styleMask] & NSClosableWindowMask;
}
-void NativeWindowMac::SetAlwaysOnTop(bool top, const std::string& level) {
+void NativeWindowMac::SetAlwaysOnTop(bool top, const std::string& level, int relativeLevel) {
int windowLevel = NSNormalWindowLevel;
+
if (top) {
if (level == "floating") {
windowLevel = NSFloatingWindowLevel;
windowLevel = NSDockWindowLevel;
}
}
- [window_ setLevel:windowLevel];
+
+ NSInteger newLevel = windowLevel + relativeLevel;
+ if (newLevel >= 0 && newLevel < CGWindowLevelForKey(kCGMaximumWindowLevelKey)) {
+ [window_ setLevel:newLevel];
+ } else {
+ [window_ setLevel:windowLevel];
+ }
}
bool NativeWindowMac::IsAlwaysOnTop() {
#endif
}
-void NativeWindowViews::SetAlwaysOnTop(bool top, const std::string& level) {
+void NativeWindowViews::SetAlwaysOnTop(bool top, const std::string& level,
+ int relativeLevel) {
window_->SetAlwaysOnTop(top);
}
bool IsFullScreenable() override;
void SetClosable(bool closable) override;
bool IsClosable() override;
- void SetAlwaysOnTop(bool top, const std::string& level) override;
+ void SetAlwaysOnTop(bool top, const std::string& level,
+ int relativeLevel) override;
bool IsAlwaysOnTop() override;
void Center() override;
void SetTitle(const std::string& title) override;