diff options
| -rw-r--r-- | scene/gui/text_edit.cpp | 7 | ||||
| -rw-r--r-- | scene/gui/text_edit.h | 1 | 
2 files changed, 8 insertions, 0 deletions
diff --git a/scene/gui/text_edit.cpp b/scene/gui/text_edit.cpp index 36e35897d1..d854806121 100644 --- a/scene/gui/text_edit.cpp +++ b/scene/gui/text_edit.cpp @@ -6220,6 +6220,10 @@ void TextEdit::_push_current_op() {  	current_op.type = TextOperation::TYPE_NONE;  	current_op.text = "";  	current_op.chain_forward = false; + +	if (undo_stack.size() > undo_stack_max_size) { +		undo_stack.pop_front(); +	}  }  void TextEdit::set_indent_using_spaces(const bool p_use_spaces) { @@ -7244,6 +7248,8 @@ void TextEdit::_bind_methods() {  	GLOBAL_DEF("gui/timers/text_edit_idle_detect_sec", 3);  	ProjectSettings::get_singleton()->set_custom_property_info("gui/timers/text_edit_idle_detect_sec", PropertyInfo(Variant::FLOAT, "gui/timers/text_edit_idle_detect_sec", PROPERTY_HINT_RANGE, "0,10,0.01,or_greater")); // No negative numbers. +	GLOBAL_DEF("gui/common/text_edit_undo_stack_max_size", 1024); +	ProjectSettings::get_singleton()->set_custom_property_info("gui/common/text_edit_undo_stack_max_size", PropertyInfo(Variant::INT, "gui/common/text_edit_undo_stack_max_size", PROPERTY_HINT_RANGE, "0,10000,1,or_greater")); // No negative numbers.  }  TextEdit::TextEdit() { @@ -7323,6 +7329,7 @@ TextEdit::TextEdit() {  	current_op.type = TextOperation::TYPE_NONE;  	undo_enabled = true; +	undo_stack_max_size = GLOBAL_GET("gui/common/text_edit_undo_stack_max_size");  	undo_stack_pos = nullptr;  	setting_text = false;  	last_dblclk = 0; diff --git a/scene/gui/text_edit.h b/scene/gui/text_edit.h index ef8c39d32f..ac8eb5da1d 100644 --- a/scene/gui/text_edit.h +++ b/scene/gui/text_edit.h @@ -306,6 +306,7 @@ private:  	List<TextOperation> undo_stack;  	List<TextOperation>::Element *undo_stack_pos; +	int undo_stack_max_size;  	void _clear_redo();  	void _do_text_op(const TextOperation &p_op, bool p_reverse);  |