summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorYuri Sizov <yuris@humnom.net>2023-09-15 19:48:27 +0200
committerYuri Sizov <yuris@humnom.net>2023-09-15 19:48:27 +0200
commitb797fa18c8daf39ab9ed8816d086dd804ccc2fc4 (patch)
tree8ff05dbc54f30056f2369ab829632c221388ce6b
parent2febb246e110f110569dd244c89bbd97822f0b69 (diff)
parent76fad10978985467ed5c6c46aab9160eca8c3511 (diff)
downloadredot-engine-b797fa18c8daf39ab9ed8816d086dd804ccc2fc4.tar.gz
Merge pull request #81621 from PrecisionRender/fix-popup-menu-accelerators
Expose `PopupMenu` `activate_item_by_event` method
-rw-r--r--doc/classes/PopupMenu.xml10
-rw-r--r--scene/gui/popup_menu.cpp2
2 files changed, 12 insertions, 0 deletions
diff --git a/doc/classes/PopupMenu.xml b/doc/classes/PopupMenu.xml
index b72e65e63a..c31416b823 100644
--- a/doc/classes/PopupMenu.xml
+++ b/doc/classes/PopupMenu.xml
@@ -13,6 +13,16 @@
<tutorials>
</tutorials>
<methods>
+ <method name="activate_item_by_event">
+ <return type="bool" />
+ <param index="0" name="event" type="InputEvent" />
+ <param index="1" name="for_global_only" type="bool" default="false" />
+ <description>
+ Checks the provided [param event] against the [PopupMenu]'s shortcuts and accelerators, and activates the first item with matching events. If [param for_global_only] is [code]true[/code], only shortcuts and accelerators with [code]global[/code] set to [code]true[/code] will be called.
+ Returns [code]true[/code] if an item was successfully activated.
+ [b]Note:[/b] Certain [Control]s, such as [MenuButton], will call this method automatically.
+ </description>
+ </method>
<method name="add_check_item">
<return type="void" />
<param index="0" name="label" type="String" />
diff --git a/scene/gui/popup_menu.cpp b/scene/gui/popup_menu.cpp
index 1fac301f9a..d64136a682 100644
--- a/scene/gui/popup_menu.cpp
+++ b/scene/gui/popup_menu.cpp
@@ -2161,6 +2161,8 @@ void PopupMenu::_get_property_list(List<PropertyInfo> *p_list) const {
}
void PopupMenu::_bind_methods() {
+ ClassDB::bind_method(D_METHOD("activate_item_by_event", "event", "for_global_only"), &PopupMenu::activate_item_by_event, DEFVAL(false));
+
ClassDB::bind_method(D_METHOD("add_item", "label", "id", "accel"), &PopupMenu::add_item, DEFVAL(-1), DEFVAL(0));
ClassDB::bind_method(D_METHOD("add_icon_item", "texture", "label", "id", "accel"), &PopupMenu::add_icon_item, DEFVAL(-1), DEFVAL(0));
ClassDB::bind_method(D_METHOD("add_check_item", "label", "id", "accel"), &PopupMenu::add_check_item, DEFVAL(-1), DEFVAL(0));