@@ -1947,6 +1947,24 @@ void Node3DEditorViewport::_sinput(const Ref<InputEvent> &p_event) {
19471947
19481948 bool node_selected = get_selected_count () > 0 ;
19491949
1950+ if (after != EditorPlugin::AFTER_GUI_INPUT_CUSTOM && (!b->is_alt_pressed () && (spatial_editor->get_tool_mode () == Node3DEditor::TOOL_MODE_SELECT || !node_selected))) {
1951+ // Single item selection.
1952+ clicked = _select_ray (b->get_position ());
1953+
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+ }
1958+
1959+ if (clicked.is_null ()) {
1960+ // Default to region select.
1961+ cursor.region_select = true ;
1962+ cursor.region_begin = b->get_position ();
1963+ cursor.region_end = b->get_position ();
1964+ break ;
1965+ }
1966+ }
1967+
19501968 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)) {
19511969 begin_transform (TRANSFORM_ROTATE, false );
19521970 break ;
@@ -1962,20 +1980,6 @@ void Node3DEditorViewport::_sinput(const Ref<InputEvent> &p_event) {
19621980 break ;
19631981 }
19641982
1965- if (after != EditorPlugin::AFTER_GUI_INPUT_CUSTOM) {
1966- // Single item selection.
1967- clicked = _select_ray (b->get_position ());
1968-
1969- selection_in_progress = true ;
1970-
1971- if (clicked.is_null ()) {
1972- // Default to region select.
1973- cursor.region_select = true ;
1974- cursor.region_begin = b->get_position ();
1975- cursor.region_end = b->get_position ();
1976- }
1977- }
1978-
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