From 0e072e9014a072aec53211053e7bec7b4e85d264 Mon Sep 17 00:00:00 2001 From: Logan Detrick Date: Sat, 20 Dec 2025 15:15:05 -0800 Subject: [PATCH] Fix docks grabbing too much focus --- editor/docks/editor_dock.cpp | 2 +- editor/docks/editor_dock_manager.cpp | 13 +++++++++++++ editor/scene/2d/tiles/tiles_editor_plugin.cpp | 8 ++------ editor/scene/2d/tiles/tiles_editor_plugin.h | 1 - 4 files changed, 16 insertions(+), 8 deletions(-) diff --git a/editor/docks/editor_dock.cpp b/editor/docks/editor_dock.cpp index 1a3b6769fb..2d34b45978 100644 --- a/editor/docks/editor_dock.cpp +++ b/editor/docks/editor_dock.cpp @@ -116,7 +116,7 @@ void EditorDock::open() { } void EditorDock::make_visible() { - EditorDockManager::get_singleton()->focus_dock(this); + EditorDockManager::get_singleton()->open_dock(this, true); } void EditorDock::close() { diff --git a/editor/docks/editor_dock_manager.cpp b/editor/docks/editor_dock_manager.cpp index a0276f559c..d812eb02e1 100644 --- a/editor/docks/editor_dock_manager.cpp +++ b/editor/docks/editor_dock_manager.cpp @@ -844,6 +844,19 @@ void EditorDockManager::open_dock(EditorDock *p_dock, bool p_set_current) { ERR_FAIL_COND_MSG(!all_docks.has(p_dock), vformat("Cannot open unknown dock '%s'.", p_dock->get_display_title())); if (p_dock->is_open) { + // Show the dock if it is already open. + if (p_set_current) { + if (p_dock->dock_window) { + p_dock->get_window()->grab_focus(); + return; + } + + TabContainer *dock_tab_container = get_dock_tab_container(p_dock); + if (dock_tab_container) { + int tab_index = dock_tab_container->get_tab_idx_from_control(p_dock); + dock_tab_container->set_current_tab(tab_index); + } + } return; } diff --git a/editor/scene/2d/tiles/tiles_editor_plugin.cpp b/editor/scene/2d/tiles/tiles_editor_plugin.cpp index eb7c998019..b2d77bbbc8 100644 --- a/editor/scene/2d/tiles/tiles_editor_plugin.cpp +++ b/editor/scene/2d/tiles/tiles_editor_plugin.cpp @@ -373,7 +373,7 @@ void TileMapEditorPlugin::_update_tile_map() { Ref tile_set = edited_layer->get_tile_set(); if (tile_set.is_valid() && tile_set_id != tile_set->get_instance_id()) { tile_set_plugin_singleton->edit(tile_set.ptr()); - tile_set_plugin_singleton->make_visible_no_focus(); + tile_set_plugin_singleton->make_visible(true); tile_set_id = tile_set->get_instance_id(); } else if (tile_set.is_null()) { tile_set_plugin_singleton->edit(nullptr); @@ -410,7 +410,7 @@ void TileMapEditorPlugin::_edit_tile_map_layer(TileMapLayer *p_tile_map_layer, b Ref tile_set = p_tile_map_layer->get_tile_set(); if (tile_set.is_valid()) { tile_set_plugin_singleton->edit(tile_set.ptr()); - tile_set_plugin_singleton->make_visible_no_focus(); + tile_set_plugin_singleton->make_visible(true); tile_set_id = tile_set->get_instance_id(); } else { tile_set_plugin_singleton->edit(nullptr); @@ -539,10 +539,6 @@ void TileSetEditorPlugin::make_visible(bool p_visible) { } } -void TileSetEditorPlugin::make_visible_no_focus() { - editor->open(); -} - ObjectID TileSetEditorPlugin::get_edited_tileset() const { return edited_tileset; } diff --git a/editor/scene/2d/tiles/tiles_editor_plugin.h b/editor/scene/2d/tiles/tiles_editor_plugin.h index de0645939c..b5c33253e8 100644 --- a/editor/scene/2d/tiles/tiles_editor_plugin.h +++ b/editor/scene/2d/tiles/tiles_editor_plugin.h @@ -165,7 +165,6 @@ public: virtual bool handles(Object *p_object) const override; virtual void make_visible(bool p_visible) override; - void make_visible_no_focus(); ObjectID get_edited_tileset() const; TileSetEditorPlugin();