@@ -1947,35 +1947,39 @@ void Node3DEditorViewport::_sinput(const Ref<InputEvent> &p_event) {
19471947
19481948 bool node_selected = get_selected_count () > 0 ;
19491949
1950- if (node_selected && ((spatial_editor->get_tool_mode () == Node3DEditor::TOOL_MODE_SELECT && b->is_command_or_control_pressed ()) || spatial_editor->get_tool_mode () == Node3DEditor::TOOL_MODE_ROTATE)) {
1951- begin_transform (TRANSFORM_ROTATE, false );
1952- break ;
1953- }
1954-
1955- if (node_selected && spatial_editor->get_tool_mode () == Node3DEditor::TOOL_MODE_MOVE) {
1956- begin_transform (TRANSFORM_TRANSLATE, false );
1957- break ;
1958- }
1959-
1960- if (node_selected && spatial_editor->get_tool_mode () == Node3DEditor::TOOL_MODE_SCALE) {
1961- begin_transform (TRANSFORM_SCALE, false );
1962- break ;
1963- }
1964-
1965- if (after != EditorPlugin::AFTER_GUI_INPUT_CUSTOM) {
1950+ if (after != EditorPlugin::AFTER_GUI_INPUT_CUSTOM && !b->is_alt_pressed ()) {
19661951 // Single item selection.
19671952 clicked = _select_ray (b->get_position ());
19681953
1969- selection_in_progress = true ;
1954+ if (clicked.is_valid () && !editor_selection->is_selected (Object::cast_to<Node>(ObjectDB::get_instance (clicked)))) {
1955+ selection_in_progress = true ;
1956+ break ;
1957+ }
19701958
19711959 if (clicked.is_null ()) {
19721960 // Default to region select.
19731961 cursor.region_select = true ;
19741962 cursor.region_begin = b->get_position ();
19751963 cursor.region_end = b->get_position ();
1964+ break ;
19761965 }
19771966 }
19781967
1968+ if (!clicked_wants_append && node_selected && ((spatial_editor->get_tool_mode () == Node3DEditor::TOOL_MODE_SELECT && b->is_command_or_control_pressed ()) || spatial_editor->get_tool_mode () == Node3DEditor::TOOL_MODE_ROTATE)) {
1969+ begin_transform (TRANSFORM_ROTATE, false );
1970+ break ;
1971+ }
1972+
1973+ if (!clicked_wants_append && node_selected && spatial_editor->get_tool_mode () == Node3DEditor::TOOL_MODE_MOVE) {
1974+ begin_transform (TRANSFORM_TRANSLATE, false );
1975+ break ;
1976+ }
1977+
1978+ if (!clicked_wants_append && node_selected && spatial_editor->get_tool_mode () == Node3DEditor::TOOL_MODE_SCALE) {
1979+ begin_transform (TRANSFORM_SCALE, false );
1980+ break ;
1981+ }
1982+
19791983 surface->queue_redraw ();
19801984 } else {
19811985 if (spatial_editor->get_tool_mode () == Node3DEditor::TOOL_RULER) {
@@ -2031,7 +2035,6 @@ void Node3DEditorViewport::_sinput(const Ref<InputEvent> &p_event) {
20312035 set_message (" " );
20322036 spatial_editor->update_transform_gizmo ();
20332037 }
2034- surface->queue_redraw ();
20352038 }
20362039
20372040 } break ;
@@ -2117,12 +2120,10 @@ void Node3DEditorViewport::_sinput(const Ref<InputEvent> &p_event) {
21172120 } else {
21182121 const bool movement_threshold_passed = _edit.original_mouse_pos .distance_to (_edit.mouse_pos ) > 8 * EDSCALE;
21192122
2120- if (selection_in_progress && movement_threshold_passed && clicked.is_valid ()) {
2121- if (clicked_wants_append || !editor_selection->is_selected (Object::cast_to<Node>(ObjectDB::get_instance (clicked)))) {
2122- cursor.region_select = true ;
2123- cursor.region_begin = _edit.original_mouse_pos ;
2124- clicked = ObjectID ();
2125- }
2123+ if ((selection_in_progress || clicked_wants_append) && movement_threshold_passed && clicked.is_valid ()) {
2124+ cursor.region_select = true ;
2125+ cursor.region_begin = _edit.original_mouse_pos ;
2126+ clicked = ObjectID ();
21262127 }
21272128
21282129 if (cursor.region_select ) {
@@ -2131,7 +2132,7 @@ void Node3DEditorViewport::_sinput(const Ref<InputEvent> &p_event) {
21312132 return ;
21322133 }
21332134
2134- if (clicked.is_valid () && movement_threshold_passed) {
2135+ if (clicked.is_valid () && movement_threshold_passed && (spatial_editor-> get_tool_mode () == Node3DEditor::TOOL_MODE_SELECT || spatial_editor-> get_tool_mode () == Node3DEditor::TOOL_MODE_MOVE) ) {
21352136 _compute_edit (_edit.original_mouse_pos );
21362137 clicked = ObjectID ();
21372138 _edit.mode = TRANSFORM_TRANSLATE;
@@ -2141,7 +2142,9 @@ void Node3DEditorViewport::_sinput(const Ref<InputEvent> &p_event) {
21412142 return ;
21422143 }
21432144
2144- update_transform (_get_key_modifier (m) == Key::SHIFT);
2145+ if (!selection_in_progress) {
2146+ update_transform (_get_key_modifier (m) == Key::SHIFT);
2147+ }
21452148 }
21462149 } else if (m->get_button_mask ().has_flag (MouseButtonMask::RIGHT) || freelook_active) {
21472150 NavigationMode change_nav_from_shortcut = _get_nav_mode_from_shortcut_check (NAVIGATION_RIGHT_MOUSE, shortcut_check_sets, false );
0 commit comments