Single-window mode popups and edited scene windows fixes.
Fix single-window mode popup not closing when OptionBox is clicked. Fix single-window mode submenus closing when parent menu item, that was used to open it is clicked (using same safe-area logic as platform specific code). Disallow windows that are part of an edited scene from being set as exclusive or popup to prevent it from locking up the editor.
This commit is contained in:
@ -243,6 +243,29 @@ void PopupMenu::_activate_submenu(int p_over, bool p_by_keyboard) {
|
||||
}
|
||||
}
|
||||
|
||||
void PopupMenu::_parent_focused() {
|
||||
if (is_embedded()) {
|
||||
Point2 mouse_pos_adjusted;
|
||||
Window *window_parent = Object::cast_to<Window>(get_parent()->get_viewport());
|
||||
while (window_parent) {
|
||||
if (!window_parent->is_embedded()) {
|
||||
mouse_pos_adjusted += window_parent->get_position();
|
||||
break;
|
||||
}
|
||||
|
||||
window_parent = Object::cast_to<Window>(window_parent->get_parent()->get_viewport());
|
||||
}
|
||||
|
||||
Rect2 safe_area = DisplayServer::get_singleton()->window_get_popup_safe_rect(get_window_id());
|
||||
Point2 pos = DisplayServer::get_singleton()->mouse_get_position() - mouse_pos_adjusted;
|
||||
if (safe_area == Rect2i() || !safe_area.has_point(pos)) {
|
||||
Popup::_parent_focused();
|
||||
} else {
|
||||
grab_focus();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void PopupMenu::_submenu_timeout() {
|
||||
if (mouse_over == submenu_over) {
|
||||
_activate_submenu(mouse_over);
|
||||
|
||||
Reference in New Issue
Block a user