[macOS, 3.x] Use occlusionState to determine when window is drawable.

This commit is contained in:
bruvzg 2023-10-11 11:49:38 +03:00
parent fe7ed984b5
commit d4c2e7ec2e
No known key found for this signature in database
GPG key ID: 7960FCF39844EC38
2 changed files with 7 additions and 1 deletions

View file

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

View file

@ -463,6 +463,10 @@ static NSCursor *cursorFromSelector(SEL selector, SEL fallback = nil) {
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
@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 {
return true;
return is_visible;
}
void OS_OSX::set_clipboard(const String &p_text) {
@ -3568,6 +3572,7 @@ OS_OSX::OS_OSX() {
im_position = Point2();
layered_window = false;
autoreleasePool = [[NSAutoreleasePool alloc] init];
is_visible = true;
eventSource = CGEventSourceCreate(kCGEventSourceStateHIDSystemState);
ERR_FAIL_COND(!eventSource);