Selaa lähdekoodia

Add signal for LineEdit overflow event

Tomasz Chabora 5 vuotta sitten
vanhempi
commit
60cd3df337
2 muutettua tiedostoa jossa 14 lisäystä ja 2 poistoa
  1. 5 0
      doc/classes/LineEdit.xml
  2. 9 2
      scene/gui/line_edit.cpp

+ 5 - 0
doc/classes/LineEdit.xml

@@ -145,6 +145,11 @@
 				Emitted when the text changes.
 			</description>
 		</signal>
+		<signal name="text_change_rejected">
+			<description>
+				Emitted when trying to append text that would overflow the [member max_length].
+			</description>
+		</signal>
 		<signal name="text_entered">
 			<argument index="0" name="new_text" type="String">
 			</argument>

+ 9 - 2
scene/gui/line_edit.cpp

@@ -557,8 +557,11 @@ void LineEdit::_gui_input(Ref<InputEvent> p_event) {
 					if (editable) {
 						selection_delete();
 						CharType ucodestr[2] = { (CharType)k->get_unicode(), 0 };
+						int prev_len = text.length();
 						append_at_cursor(ucodestr);
-						_text_changed();
+						if (text.length() != prev_len) {
+							_text_changed();
+						}
 						accept_event();
 					}
 
@@ -961,11 +964,12 @@ void LineEdit::paste_text() {
 
 	if (paste_buffer != "") {
 
+		int prev_len = text.length();
 		if (selection.enabled) selection_delete();
 		append_at_cursor(paste_buffer);
 
 		if (!text_changed_dirty) {
-			if (is_inside_tree()) {
+			if (is_inside_tree() && text.length() != prev_len) {
 				MessageQueue::get_singleton()->push_call(this, "_text_changed");
 			}
 			text_changed_dirty = true;
@@ -1362,6 +1366,8 @@ void LineEdit::append_at_cursor(String p_text) {
 		String post = text.substr(cursor_pos, text.length() - cursor_pos);
 		text = pre + p_text + post;
 		set_cursor_position(cursor_pos + p_text.length());
+	} else {
+		emit_signal("text_change_rejected");
 	}
 }
 
@@ -1781,6 +1787,7 @@ void LineEdit::_bind_methods() {
 	ClassDB::bind_method(D_METHOD("get_right_icon"), &LineEdit::get_right_icon);
 
 	ADD_SIGNAL(MethodInfo("text_changed", PropertyInfo(Variant::STRING, "new_text")));
+	ADD_SIGNAL(MethodInfo("text_change_rejected"));
 	ADD_SIGNAL(MethodInfo("text_entered", PropertyInfo(Variant::STRING, "new_text")));
 
 	BIND_ENUM_CONSTANT(ALIGN_LEFT);