Merge pull request #80780 from HolonProduction/sub-window-focus-crash

Fix crash when hiding subwindow during popup of new subwindow
This commit is contained in:
Rémi Verschelde 2023-08-21 08:23:23 +02:00
commit b24eb34669
No known key found for this signature in database
GPG Key ID: C3336907360768E1
1 changed files with 5 additions and 0 deletions

View File

@ -368,6 +368,7 @@ void Viewport::_sub_window_grab_focus(Window *p_window) {
return; return;
} }
// The index needs to be update before every usage in case an event callback changed the window list.
int index = _sub_window_find(p_window); int index = _sub_window_find(p_window);
ERR_FAIL_COND(index == -1); ERR_FAIL_COND(index == -1);
@ -379,6 +380,8 @@ void Viewport::_sub_window_grab_focus(Window *p_window) {
gui.subwindow_drag = SUB_WINDOW_DRAG_DISABLED; gui.subwindow_drag = SUB_WINDOW_DRAG_DISABLED;
} }
// Can only move to foreground, but no focus granted. // Can only move to foreground, but no focus granted.
index = _sub_window_find(p_window);
ERR_FAIL_COND(index == -1);
SubWindow sw = gui.sub_windows[index]; SubWindow sw = gui.sub_windows[index];
gui.sub_windows.remove_at(index); gui.sub_windows.remove_at(index);
gui.sub_windows.push_back(sw); gui.sub_windows.push_back(sw);
@ -406,6 +409,8 @@ void Viewport::_sub_window_grab_focus(Window *p_window) {
gui.subwindow_focused->_event_callback(DisplayServer::WINDOW_EVENT_FOCUS_IN); gui.subwindow_focused->_event_callback(DisplayServer::WINDOW_EVENT_FOCUS_IN);
{ // Move to foreground. { // Move to foreground.
index = _sub_window_find(p_window);
ERR_FAIL_COND(index == -1);
SubWindow sw = gui.sub_windows[index]; SubWindow sw = gui.sub_windows[index];
gui.sub_windows.remove_at(index); gui.sub_windows.remove_at(index);
gui.sub_windows.push_back(sw); gui.sub_windows.push_back(sw);