From 592eda7ad9458ef1677565e2b86afd9aad45fed1 Mon Sep 17 00:00:00 2001 From: Michael Alexsander Silva Dias Date: Tue, 11 Sep 2018 01:44:19 -0300 Subject: Fix MenuButton hover switching not happening with submenus open --- scene/gui/popup_menu.cpp | 18 ++++++++++++++++-- scene/main/viewport.cpp | 10 +++++++++- 2 files changed, 25 insertions(+), 3 deletions(-) (limited to 'scene') diff --git a/scene/gui/popup_menu.cpp b/scene/gui/popup_menu.cpp index 436dda41a4..4c84f2cee3 100644 --- a/scene/gui/popup_menu.cpp +++ b/scene/gui/popup_menu.cpp @@ -557,6 +557,21 @@ void PopupMenu::_notification(int p_what) { mouse_over = -1; update(); } + + for (int i = 0; i < items.size(); i++) { + if (items[i].submenu == "") + continue; + + Node *n = get_node(items[i].submenu); + if (!n) + continue; + + PopupMenu *pm = Object::cast_to(n); + if (!pm || !pm->is_visible()) + continue; + + pm->hide(); + } } break; } } @@ -1012,8 +1027,7 @@ bool PopupMenu::activate_item_by_event(const Ref &p_event, bool p_fo code |= KEY_MASK_SHIFT; } - int il = items.size(); - for (int i = 0; i < il; i++) { + for (int i = 0; i < items.size(); i++) { if (is_item_disabled(i) || items[i].shortcut_is_disabled) continue; diff --git a/scene/main/viewport.cpp b/scene/main/viewport.cpp index d1b3eb9d9a..ded32aa270 100644 --- a/scene/main/viewport.cpp +++ b/scene/main/viewport.cpp @@ -1859,8 +1859,16 @@ void Viewport::_gui_input_event(Ref p_event) { MenuButton *popup_menu_parent = NULL; MenuButton *menu_button = Object::cast_to(over); - if (popup_menu) + if (popup_menu) { popup_menu_parent = Object::cast_to(popup_menu->get_parent()); + if (!popup_menu_parent) { + // Go through the parents to see if there's a MenuButton at the end. + while (Object::cast_to(popup_menu->get_parent())) { + popup_menu = Object::cast_to(popup_menu->get_parent()); + } + popup_menu_parent = Object::cast_to(popup_menu->get_parent()); + } + } // If the mouse is over a menu button, this menu will open automatically // if there is already a pop-up menu open at the same hierarchical level. -- cgit v1.2.3