summaryrefslogtreecommitdiff
path: root/scene/gui
diff options
context:
space:
mode:
authorRĂ©mi Verschelde <rverschelde@gmail.com>2017-12-17 20:22:20 +0100
committerGitHub <noreply@github.com>2017-12-17 20:22:20 +0100
commit90d95c7ee17b94736045555f1810a2a920fd3b33 (patch)
tree0d00854d318ce6b4a8a04dacccac69f5f6bdfa69 /scene/gui
parent4ee57026bb3d370427ac5ba5070504286f12c2ef (diff)
parent7e38db631f0d5577457a68c5dbc7c09a308bb18d (diff)
Merge pull request #14757 from YeldhamDev/submenu_keyboard
More changes to PopupMenu's submenu keyboard handling
Diffstat (limited to 'scene/gui')
-rw-r--r--scene/gui/popup_menu.cpp35
1 files changed, 25 insertions, 10 deletions
diff --git a/scene/gui/popup_menu.cpp b/scene/gui/popup_menu.cpp
index 698676cc39..62f2b15ddd 100644
--- a/scene/gui/popup_menu.cpp
+++ b/scene/gui/popup_menu.cpp
@@ -211,11 +211,6 @@ void PopupMenu::_gui_input(const Ref<InputEvent> &p_event) {
mouse_over = i;
update();
-
- if (items[i].submenu != "" && submenu_over != i) {
- submenu_over = i;
- submenu_timer->start();
- }
break;
}
}
@@ -231,20 +226,40 @@ void PopupMenu::_gui_input(const Ref<InputEvent> &p_event) {
mouse_over = i;
update();
-
- if (items[i].submenu != "" && submenu_over != i) {
- submenu_over = i;
- submenu_timer->start();
- }
break;
}
}
} break;
+
+ case KEY_LEFT: {
+
+ Node *n = get_parent();
+ if (!n)
+ break;
+
+ PopupMenu *pm = Object::cast_to<PopupMenu>(n);
+ if (!pm)
+ break;
+
+ hide();
+ } break;
+
+ case KEY_RIGHT: {
+
+ if (mouse_over >= 0 && mouse_over < items.size() && !items[mouse_over].separator && items[mouse_over].submenu != "" && submenu_over != mouse_over)
+ _activate_submenu(mouse_over);
+ } break;
+
case KEY_ENTER:
case KEY_KP_ENTER: {
if (mouse_over >= 0 && mouse_over < items.size() && !items[mouse_over].separator) {
+ if (items[mouse_over].submenu != "" && submenu_over != mouse_over) {
+ _activate_submenu(mouse_over);
+ break;
+ }
+
activate_item(mouse_over);
}
} break;