void Window::SetAlwaysOnTop(bool top, mate::Arguments* args) {
std::string level = "floating";
int relativeLevel = 0;
+ std::string error;
+
args->GetNext(&level);
args->GetNext(&relativeLevel);
- window_->SetAlwaysOnTop(top, level, relativeLevel);
+
+ window_->SetAlwaysOnTop(top, level, relativeLevel, &error);
+
+ if (!error.empty()) {
+ args->ThrowError(error);
+ }
}
bool Window::IsAlwaysOnTop() {
virtual bool IsClosable() = 0;
virtual void SetAlwaysOnTop(bool top,
const std::string& level = "floating",
- int relativeLevel = 0) = 0;
+ int relativeLevel = 0,
+ std::string* error = nullptr) = 0;
virtual bool IsAlwaysOnTop() = 0;
virtual void Center() = 0;
virtual void SetTitle(const std::string& title) = 0;
void SetClosable(bool closable) override;
bool IsClosable() override;
void SetAlwaysOnTop(bool top, const std::string& level,
- int relativeLevel) override;
+ int relativeLevel, std::string* error) 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, int relativeLevel) {
+void NativeWindowMac::SetAlwaysOnTop(bool top, const std::string& level, int relativeLevel,
+ std::string* error) {
int windowLevel = NSNormalWindowLevel;
+ CGWindowLevel maxWindowLevel = CGWindowLevelForKey(kCGMaximumWindowLevelKey);
if (top) {
if (level == "floating") {
}
NSInteger newLevel = windowLevel + relativeLevel;
- if (newLevel >= 0 && newLevel < CGWindowLevelForKey(kCGMaximumWindowLevelKey)) {
+
+ if (newLevel >= 0 && newLevel <= maxWindowLevel) {
[window_ setLevel:newLevel];
} else {
- [window_ setLevel:windowLevel];
+ *error = std::string([[NSString stringWithFormat:
+ @"relativeLevel must be between 0 and %d", maxWindowLevel] UTF8String]);
}
}
}
void NativeWindowViews::SetAlwaysOnTop(bool top, const std::string& level,
- int relativeLevel) {
+ int relativeLevel, std::string* error) {
window_->SetAlwaysOnTop(top);
}
void SetClosable(bool closable) override;
bool IsClosable() override;
void SetAlwaysOnTop(bool top, const std::string& level,
- int relativeLevel) override;
+ int relativeLevel, std::string& error) override;
bool IsAlwaysOnTop() override;
void Center() override;
void SetTitle(const std::string& title) override;