Browse Source

Ensure popup menu redraws items when shortcuts update.

Eric M 3 years ago
parent
commit
af438ae742
2 changed files with 11 additions and 2 deletions
  1. 9 2
      scene/gui/popup_menu.cpp
  2. 2 0
      scene/gui/popup_menu.h

+ 9 - 2
scene/gui/popup_menu.cpp

@@ -1762,7 +1762,7 @@ void PopupMenu::clear() {
 void PopupMenu::_ref_shortcut(Ref<Shortcut> p_sc) {
 	if (!shortcut_refcount.has(p_sc)) {
 		shortcut_refcount[p_sc] = 1;
-		p_sc->connect("changed", callable_mp((CanvasItem *)this, &CanvasItem::queue_redraw));
+		p_sc->connect("changed", callable_mp(this, &PopupMenu::_shortcut_changed));
 	} else {
 		shortcut_refcount[p_sc] += 1;
 	}
@@ -1772,11 +1772,18 @@ void PopupMenu::_unref_shortcut(Ref<Shortcut> p_sc) {
 	ERR_FAIL_COND(!shortcut_refcount.has(p_sc));
 	shortcut_refcount[p_sc]--;
 	if (shortcut_refcount[p_sc] == 0) {
-		p_sc->disconnect("changed", callable_mp((CanvasItem *)this, &CanvasItem::queue_redraw));
+		p_sc->disconnect("changed", callable_mp(this, &PopupMenu::_shortcut_changed));
 		shortcut_refcount.erase(p_sc);
 	}
 }
 
+void PopupMenu::_shortcut_changed() {
+	for (int i = 0; i < items.size(); i++) {
+		items.write[i].dirty = true;
+	}
+	control->queue_redraw();
+}
+
 // Hide on item selection determines whether or not the popup will close after item selection
 void PopupMenu::set_hide_on_item_selection(bool p_enabled) {
 	hide_on_item_selection = p_enabled;

+ 2 - 0
scene/gui/popup_menu.h

@@ -121,6 +121,8 @@ class PopupMenu : public Popup {
 	void _ref_shortcut(Ref<Shortcut> p_sc);
 	void _unref_shortcut(Ref<Shortcut> p_sc);
 
+	void _shortcut_changed();
+
 	bool allow_search = true;
 	uint64_t search_time_msec = 0;
 	String search_string = "";