浏览代码

Fix button down signal not emitting on first press after being disabled

Giganzo 1 月之前
父节点
当前提交
63409a91e0
共有 2 个文件被更改,包括 5 次插入0 次删除
  1. 1 0
      doc/classes/BaseButton.xml
  2. 4 0
      scene/gui/base_button.cpp

+ 1 - 0
doc/classes/BaseButton.xml

@@ -61,6 +61,7 @@
 		</member>
 		</member>
 		<member name="disabled" type="bool" setter="set_disabled" getter="is_disabled" default="false" keywords="enabled">
 		<member name="disabled" type="bool" setter="set_disabled" getter="is_disabled" default="false" keywords="enabled">
 			If [code]true[/code], the button is in disabled state and can't be clicked or toggled.
 			If [code]true[/code], the button is in disabled state and can't be clicked or toggled.
+			[b]Note:[/b] If the button is disabled while held down, [signal button_up] will be emitted.
 		</member>
 		</member>
 		<member name="focus_mode" type="int" setter="set_focus_mode" getter="get_focus_mode" overrides="Control" enum="Control.FocusMode" default="2" />
 		<member name="focus_mode" type="int" setter="set_focus_mode" getter="get_focus_mode" overrides="Control" enum="Control.FocusMode" default="2" />
 		<member name="keep_pressed_outside" type="bool" setter="set_keep_pressed_outside" getter="is_keep_pressed_outside" default="false">
 		<member name="keep_pressed_outside" type="bool" setter="set_keep_pressed_outside" getter="is_keep_pressed_outside" default="false">

+ 4 - 0
scene/gui/base_button.cpp

@@ -266,6 +266,10 @@ void BaseButton::set_disabled(bool p_disabled) {
 		}
 		}
 		status.press_attempt = false;
 		status.press_attempt = false;
 		status.pressing_inside = false;
 		status.pressing_inside = false;
+		if (status.pressed_down_with_focus) {
+			status.pressed_down_with_focus = false;
+			emit_signal(SNAME("button_up"));
+		}
 	}
 	}
 	queue_accessibility_update();
 	queue_accessibility_update();
 	queue_redraw();
 	queue_redraw();