Explorar o código

Merge pull request #81621 from PrecisionRender/fix-popup-menu-accelerators

Expose `PopupMenu` `activate_item_by_event` method
Yuri Sizov %!s(int64=2) %!d(string=hai) anos
pai
achega
b797fa18c8
Modificáronse 2 ficheiros con 12 adicións e 0 borrados
  1. 10 0
      doc/classes/PopupMenu.xml
  2. 2 0
      scene/gui/popup_menu.cpp

+ 10 - 0
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" />

+ 2 - 0
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));