summaryrefslogtreecommitdiff
path: root/core
diff options
context:
space:
mode:
authorJuan Linietsky <juan@godotengine.org>2019-03-03 17:53:59 -0300
committerJuan Linietsky <juan@godotengine.org>2019-03-03 17:57:16 -0300
commit8b4c4d9b2fbfa39e71bc1e4f4fcdd5377a9396e4 (patch)
tree7006dd0c89288c09d7b6b2faae393404406a6e64 /core
parentae886a6f32b3cacc342ab3c4b52fa5e09d91fa49 (diff)
Implement a more coherent (and way less hack) way to block animation updates, fixes #24618
Diffstat (limited to 'core')
-rw-r--r--core/undo_redo.cpp12
-rw-r--r--core/undo_redo.h3
2 files changed, 14 insertions, 1 deletions
diff --git a/core/undo_redo.cpp b/core/undo_redo.cpp
index 00894b41d8..9a10e0585d 100644
--- a/core/undo_redo.cpp
+++ b/core/undo_redo.cpp
@@ -239,6 +239,10 @@ void UndoRedo::_pop_history_tail() {
}
}
+bool UndoRedo::is_commiting_action() const {
+ return commiting > 0;
+}
+
void UndoRedo::commit_action() {
ERR_FAIL_COND(action_level <= 0);
@@ -321,10 +325,13 @@ bool UndoRedo::redo() {
if ((current_action + 1) >= actions.size())
return false; //nothing to redo
+
+ commiting++;
current_action++;
_process_operation_list(actions.write[current_action].do_ops.front());
version++;
+ commiting--;
return true;
}
@@ -334,10 +341,11 @@ bool UndoRedo::undo() {
ERR_FAIL_COND_V(action_level > 0, false);
if (current_action < 0)
return false; //nothing to redo
+ commiting++;
_process_operation_list(actions.write[current_action].undo_ops.front());
current_action--;
version--;
-
+ commiting--;
return true;
}
@@ -386,6 +394,7 @@ void UndoRedo::set_property_notify_callback(PropertyNotifyCallback p_property_ca
UndoRedo::UndoRedo() {
+ commiting = 0;
version = 1;
action_level = 0;
current_action = -1;
@@ -484,6 +493,7 @@ void UndoRedo::_bind_methods() {
ClassDB::bind_method(D_METHOD("create_action", "name", "merge_mode"), &UndoRedo::create_action, DEFVAL(MERGE_DISABLE));
ClassDB::bind_method(D_METHOD("commit_action"), &UndoRedo::commit_action);
+ ClassDB::bind_method(D_METHOD("is_commiting_action"), &UndoRedo::is_commiting_action);
//ClassDB::bind_method(D_METHOD("add_do_method","p_object", "p_method", "VARIANT_ARG_LIST"),&UndoRedo::add_do_method);
//ClassDB::bind_method(D_METHOD("add_undo_method","p_object", "p_method", "VARIANT_ARG_LIST"),&UndoRedo::add_undo_method);
diff --git a/core/undo_redo.h b/core/undo_redo.h
index 4ee64dbfcf..b626149ce6 100644
--- a/core/undo_redo.h
+++ b/core/undo_redo.h
@@ -94,6 +94,8 @@ private:
MethodNotifyCallback method_callback;
PropertyNotifyCallback property_callback;
+ int commiting;
+
protected:
static void _bind_methods();
@@ -107,6 +109,7 @@ public:
void add_do_reference(Object *p_object);
void add_undo_reference(Object *p_object);
+ bool is_commiting_action() const;
void commit_action();
bool redo();