Merge pull request #83136 from bruvzg/occ_3x

[3.x] [macOS] Use occlusionState to determine when window is drawable.
This commit is contained in:
Rémi Verschelde 2023-11-14 11:37:24 +01:00
commit 814400bdd2
No known key found for this signature in database
GPG key ID: C3336907360768E1
2 changed files with 7 additions and 1 deletions

View file

@ -135,6 +135,7 @@ public:
bool resizable; bool resizable;
bool window_focused; bool window_focused;
bool on_top; bool on_top;
bool is_visible;
Size2 window_size; Size2 window_size;
Rect2 restore_rect; Rect2 restore_rect;

View file

@ -463,6 +463,10 @@ static NSCursor *cursorFromSelector(SEL selector, SEL fallback = nil) {
OS_OSX::singleton->window_focused = true; OS_OSX::singleton->window_focused = true;
}; };
- (void)windowDidChangeOcclusionState:(NSNotification *)notification {
OS_OSX::singleton->is_visible = ([OS_OSX::singleton->window_object occlusionState] & NSWindowOcclusionStateVisible) && [OS_OSX::singleton->window_object isVisible];
}
@end @end
@interface GodotContentView : NSOpenGLView <NSTextInputClient> { @interface GodotContentView : NSOpenGLView <NSTextInputClient> {
@ -2410,7 +2414,7 @@ String OS_OSX::get_system_dir(SystemDir p_dir, bool p_shared_storage) const {
} }
bool OS_OSX::can_draw() const { bool OS_OSX::can_draw() const {
return true; return is_visible;
} }
void OS_OSX::set_clipboard(const String &p_text) { void OS_OSX::set_clipboard(const String &p_text) {
@ -3568,6 +3572,7 @@ OS_OSX::OS_OSX() {
im_position = Point2(); im_position = Point2();
layered_window = false; layered_window = false;
autoreleasePool = [[NSAutoreleasePool alloc] init]; autoreleasePool = [[NSAutoreleasePool alloc] init];
is_visible = true;
eventSource = CGEventSourceCreate(kCGEventSourceStateHIDSystemState); eventSource = CGEventSourceCreate(kCGEventSourceStateHIDSystemState);
ERR_FAIL_COND(!eventSource); ERR_FAIL_COND(!eventSource);