Implement always-on-top for MacOS

Courtesy of @bruvzg.

(cherry picked from commit 2e8c7824c0)
This commit is contained in:
Pedro J. Estébanez 2018-01-30 20:39:53 +01:00 committed by Hein-Pieter van Braam
parent 1c25e50490
commit 4f0b5f7307
2 changed files with 16 additions and 0 deletions

View File

@ -222,6 +222,8 @@ public:
virtual bool is_window_minimized() const; virtual bool is_window_minimized() const;
virtual void set_window_maximized(bool p_enabled); virtual void set_window_maximized(bool p_enabled);
virtual bool is_window_maximized() const; virtual bool is_window_maximized() const;
virtual void set_window_always_on_top(bool p_enabled);
virtual bool is_window_always_on_top() const;
virtual void request_attention(); virtual void request_attention();
virtual String get_joy_guid(int p_device) const; virtual String get_joy_guid(int p_device) const;

View File

@ -1976,6 +1976,20 @@ void OS_OSX::move_window_to_foreground() {
[window_object orderFrontRegardless]; [window_object orderFrontRegardless];
} }
void OS_OSX::set_window_always_on_top(bool p_enabled) {
if (is_window_always_on_top() == p_enabled)
return;
if (p_enabled)
[window_object setLevel:NSFloatingWindowLevel];
else
[window_object setLevel:NSNormalWindowLevel];
}
bool OS_OSX::is_window_always_on_top() const {
return [window_object level] == NSFloatingWindowLevel;
}
void OS_OSX::request_attention() { void OS_OSX::request_attention() {
[NSApp requestUserAttention:NSCriticalRequest]; [NSApp requestUserAttention:NSCriticalRequest];