Browse Source

BaseButton: Make shortcuts call virtual methods

When buttons are not in Toggle Mode, shortcuts used to only trigger the
`pressed` signal, without calling the `_pressed` virtual method,
contrarily to what happens when you click the button.

For Toggle Mode buttons, it did call the `_toggled` virtual method
together with emitting the `toggled` signal *twice*.

This commit harmonizes it all and makes shortcuts behave the same as
mouse clicks or `ui_accept`, for both toggle and non-toggle modes.

Fixes #29604.
Rémi Verschelde 6 years ago
parent
commit
2cedf7173a
1 changed files with 3 additions and 9 deletions
  1. 3 9
      scene/gui/base_button.cpp

+ 3 - 9
scene/gui/base_button.cpp

@@ -216,9 +216,7 @@ void BaseButton::set_pressed(bool p_pressed) {
 	if (p_pressed) {
 		_unpress_group();
 	}
-	if (toggle_mode) {
-		_toggled(status.pressed);
-	}
+	_toggled(status.pressed);
 
 	update();
 }
@@ -337,9 +335,6 @@ bool BaseButton::is_keep_pressed_outside() const {
 
 void BaseButton::set_shortcut(const Ref<ShortCut> &p_shortcut) {
 
-	if (shortcut.is_null() == p_shortcut.is_null())
-		return;
-
 	shortcut = p_shortcut;
 	set_process_unhandled_input(shortcut.is_valid());
 }
@@ -356,11 +351,10 @@ void BaseButton::_unhandled_input(Ref<InputEvent> p_event) {
 			return; //ignore because of modal window
 
 		if (is_toggle_mode()) {
-			set_pressed(!is_pressed());
-			emit_signal("toggled", is_pressed());
+			set_pressed(!is_pressed()); // Also calls _toggled() internally.
 		}
 
-		emit_signal("pressed");
+		_pressed();
 	}
 }