Browse Source

Don't block input after cancelling transform.

After starting an instant transform and cancelling it, the mouse was
blocked because cancel_transform did not set _edit.instant back to
false.

This refactors all the cleanup into a separate function that both
cancel_transform and commit_transform can call.

Fixes #57868.
Ryan Roden-Corrent 3 years ago
parent
commit
628219c922
2 changed files with 13 additions and 8 deletions
  1. 12 8
      editor/plugins/node_3d_editor_plugin.cpp
  2. 1 0
      editor/plugins/node_3d_editor_plugin.h

+ 12 - 8
editor/plugins/node_3d_editor_plugin.cpp

@@ -385,8 +385,6 @@ int Node3DEditorViewport::get_selected_count() const {
 }
 
 void Node3DEditorViewport::cancel_transform() {
-	_edit.mode = TRANSFORM_NONE;
-
 	List<Node *> &selection = editor_selection->get_selected_node_list();
 
 	for (List<Node *>::Element *E = selection.front(); E; E = E->next()) {
@@ -402,7 +400,8 @@ void Node3DEditorViewport::cancel_transform() {
 
 		sp->set_global_transform(se->original);
 	}
-	surface->update();
+
+	finish_transform();
 	set_message(TTR("Transform Aborted."), 3);
 }
 
@@ -4063,12 +4062,9 @@ void Node3DEditorViewport::commit_transform() {
 		undo_redo->add_undo_method(sp, "set_global_transform", se->original);
 	}
 	undo_redo->commit_action();
-	_edit.mode = TRANSFORM_NONE;
-	_edit.instant = false;
-	spatial_editor->set_local_coords_enabled(_edit.original_local);
+
+	finish_transform();
 	set_message("");
-	spatial_editor->update_transform_gizmo();
-	surface->update();
 }
 
 void Node3DEditorViewport::update_transform(Point2 p_mousepos, bool p_shift) {
@@ -4407,6 +4403,14 @@ void Node3DEditorViewport::update_transform(Point2 p_mousepos, bool p_shift) {
 	}
 }
 
+void Node3DEditorViewport::finish_transform() {
+	spatial_editor->set_local_coords_enabled(_edit.original_local);
+	spatial_editor->update_transform_gizmo();
+	_edit.mode = TRANSFORM_NONE;
+	_edit.instant = false;
+	surface->update();
+}
+
 Node3DEditorViewport::Node3DEditorViewport(Node3DEditor *p_spatial_editor, EditorNode *p_editor, int p_index) {
 	cpu_time_history_index = 0;
 	gpu_time_history_index = 0;

+ 1 - 0
editor/plugins/node_3d_editor_plugin.h

@@ -409,6 +409,7 @@ private:
 	void begin_transform(TransformMode p_mode, bool instant);
 	void commit_transform();
 	void update_transform(Point2 p_mousepos, bool p_shift);
+	void finish_transform();
 
 protected:
 	void _notification(int p_what);