Skip to content

Commit

Permalink
Fix switch_on_hover for MenuButton
Browse files Browse the repository at this point in the history
Previously, embedded Windows (the opened menu) were not accounted for
when checking for `switch_on_hover`.

`gui_get_hovered_control()` is more appropriate to check for the hover
status of other `MenuButton` nodes at the mouse position.

Explain the usage of the incorrectly used function in a comment.
  • Loading branch information
Sauermann committed Nov 29, 2024
1 parent 0eadbdb commit 26f5976
Show file tree
Hide file tree
Showing 2 changed files with 4 additions and 2 deletions.
2 changes: 1 addition & 1 deletion scene/gui/menu_button.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -138,7 +138,7 @@ void MenuButton::_notification(int p_what) {
} break;

case NOTIFICATION_INTERNAL_PROCESS: {
MenuButton *menu_btn_other = Object::cast_to<MenuButton>(get_viewport()->gui_find_control(get_viewport()->get_mouse_position()));
MenuButton *menu_btn_other = Object::cast_to<MenuButton>(get_viewport()->gui_get_hovered_control());

if (menu_btn_other && menu_btn_other != this && menu_btn_other->is_switch_on_hover() && !menu_btn_other->is_disabled() &&
(get_parent()->is_ancestor_of(menu_btn_other) || menu_btn_other->get_parent()->is_ancestor_of(popup))) {
Expand Down
4 changes: 3 additions & 1 deletion scene/main/viewport.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1632,7 +1632,9 @@ void Viewport::_gui_call_notification(Control *p_control, int p_what) {

Control *Viewport::gui_find_control(const Point2 &p_global) {
ERR_MAIN_THREAD_GUARD_V(nullptr);
// Handle subwindows.
// `gui_find_control` doesn't take embedded windows into account. So the caller of this function
// needs to make sure, that there is no embedded window at the specified position.

_gui_sort_roots();

for (List<Control *>::Element *E = gui.roots.back(); E; E = E->prev()) {
Expand Down

0 comments on commit 26f5976

Please sign in to comment.