Add an OS.is_window_focused() getter
This makes it possible to know whether the window is focused at a given time, without having to track the focus state manually using `NOTIFICATION_WM_FOCUS_IN` and `NOTIFICATION_WM_FOCUS_OUT`. This partially addresses #33928.
This commit is contained in:
@ -124,6 +124,7 @@ public:
|
||||
bool maximized;
|
||||
bool zoomed;
|
||||
bool resizable;
|
||||
bool window_focused;
|
||||
|
||||
Size2 window_size;
|
||||
Rect2 restore_rect;
|
||||
@ -277,6 +278,7 @@ public:
|
||||
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 bool is_window_focused() const;
|
||||
virtual void request_attention();
|
||||
virtual String get_joy_guid(int p_device) const;
|
||||
|
||||
|
||||
@ -397,9 +397,6 @@ static Vector2 get_mouse_pos(NSPoint locationInWindow, CGFloat backingScaleFacto
|
||||
}
|
||||
|
||||
- (void)windowDidBecomeKey:(NSNotification *)notification {
|
||||
//_GodotInputWindowFocus(window, GL_TRUE);
|
||||
//_GodotPlatformSetCursorMode(window, window->cursorMode);
|
||||
|
||||
if (OS_OSX::singleton->get_main_loop()) {
|
||||
get_mouse_pos(
|
||||
[OS_OSX::singleton->window_object mouseLocationOutsideOfEventStream],
|
||||
@ -408,25 +405,31 @@ static Vector2 get_mouse_pos(NSPoint locationInWindow, CGFloat backingScaleFacto
|
||||
|
||||
OS_OSX::singleton->get_main_loop()->notification(MainLoop::NOTIFICATION_WM_FOCUS_IN);
|
||||
}
|
||||
|
||||
OS_OSX::singleton->window_focused = true;
|
||||
}
|
||||
|
||||
- (void)windowDidResignKey:(NSNotification *)notification {
|
||||
//_GodotInputWindowFocus(window, GL_FALSE);
|
||||
//_GodotPlatformSetCursorMode(window, Godot_CURSOR_NORMAL);
|
||||
if (OS_OSX::singleton->get_main_loop())
|
||||
OS_OSX::singleton->get_main_loop()->notification(MainLoop::NOTIFICATION_WM_FOCUS_OUT);
|
||||
|
||||
OS_OSX::singleton->window_focused = false;
|
||||
}
|
||||
|
||||
- (void)windowDidMiniaturize:(NSNotification *)notification {
|
||||
OS_OSX::singleton->wm_minimized(true);
|
||||
if (OS_OSX::singleton->get_main_loop())
|
||||
OS_OSX::singleton->get_main_loop()->notification(MainLoop::NOTIFICATION_WM_FOCUS_OUT);
|
||||
|
||||
OS_OSX::singleton->window_focused = false;
|
||||
};
|
||||
|
||||
- (void)windowDidDeminiaturize:(NSNotification *)notification {
|
||||
OS_OSX::singleton->wm_minimized(false);
|
||||
if (OS_OSX::singleton->get_main_loop())
|
||||
OS_OSX::singleton->get_main_loop()->notification(MainLoop::NOTIFICATION_WM_FOCUS_IN);
|
||||
|
||||
OS_OSX::singleton->window_focused = true;
|
||||
};
|
||||
|
||||
@end
|
||||
@ -2618,6 +2621,10 @@ bool OS_OSX::is_window_always_on_top() const {
|
||||
return [window_object level] == NSFloatingWindowLevel;
|
||||
}
|
||||
|
||||
bool OS_OSX::is_window_focused() const {
|
||||
return window_focused;
|
||||
}
|
||||
|
||||
void OS_OSX::request_attention() {
|
||||
|
||||
[NSApp requestUserAttention:NSCriticalRequest];
|
||||
@ -3070,6 +3077,7 @@ OS_OSX::OS_OSX() {
|
||||
window_size = Vector2(1024, 600);
|
||||
zoomed = false;
|
||||
resizable = false;
|
||||
window_focused = true;
|
||||
|
||||
Vector<Logger *> loggers;
|
||||
loggers.push_back(memnew(OSXTerminalLogger));
|
||||
|
||||
Reference in New Issue
Block a user