Browse Source

Merge pull request #29261 from volzhs/fix-basebutton

Fix BaseButton not emitting signal with virtual function
Rémi Verschelde 6 năm trước cách đây
mục cha
commit
e832a3269c
2 tập tin đã thay đổi với 16 bổ sung6 xóa
  1. 14 6
      scene/gui/base_button.cpp
  2. 2 0
      scene/gui/base_button.h

+ 14 - 6
scene/gui/base_button.cpp

@@ -76,12 +76,12 @@ void BaseButton::_gui_input(Ref<InputEvent> p_event) {
 					}
 					status.pressed = !status.pressed;
 					_unpress_group();
-					toggled(status.pressed);
-					pressed();
+					_toggled(status.pressed);
+					_pressed();
 				}
 			} else {
 				if (!p_event->is_pressed()) {
-					pressed();
+					_pressed();
 				}
 			}
 		}
@@ -159,22 +159,30 @@ void BaseButton::_notification(int p_what) {
 	}
 }
 
-void BaseButton::pressed() {
+void BaseButton::_pressed() {
 
 	if (get_script_instance()) {
 		get_script_instance()->call(SceneStringNames::get_singleton()->_pressed);
 	}
+	pressed();
 	emit_signal("pressed");
 }
 
-void BaseButton::toggled(bool p_pressed) {
+void BaseButton::_toggled(bool p_pressed) {
 
 	if (get_script_instance()) {
 		get_script_instance()->call(SceneStringNames::get_singleton()->_toggled, p_pressed);
 	}
+	toggled(p_pressed);
 	emit_signal("toggled", p_pressed);
 }
 
+void BaseButton::pressed() {
+}
+
+void BaseButton::toggled(bool p_pressed) {
+}
+
 void BaseButton::set_disabled(bool p_disabled) {
 	if (status.disabled == p_disabled)
 		return;
@@ -209,7 +217,7 @@ void BaseButton::set_pressed(bool p_pressed) {
 		_unpress_group();
 	}
 	if (toggle_mode) {
-		toggled(status.pressed);
+		_toggled(status.pressed);
 	}
 
 	update();

+ 2 - 0
scene/gui/base_button.h

@@ -71,6 +71,8 @@ private:
 	Ref<ButtonGroup> button_group;
 
 	void _unpress_group();
+	void _pressed();
+	void _toggled(bool p_pressed);
 
 protected:
 	virtual void pressed();