Skip to content

Commit 1725231

Browse files
committed
Fix favorite folder colors
1 parent 03bd8ba commit 1725231

File tree

4 files changed

+30
-35
lines changed

4 files changed

+30
-35
lines changed

editor/filesystem_dock.cpp

Lines changed: 25 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -430,7 +430,7 @@ void FileSystemDock::_update_tree(const Vector<String> &p_uncollapsed_paths, boo
430430
} else if (favorite.ends_with("/")) {
431431
text = favorite.substr(0, favorite.length() - 1).get_file();
432432
icon = folder_icon;
433-
color = assigned_folder_colors.has(favorite) ? folder_colors[assigned_folder_colors[favorite]] : default_folder_color;
433+
color = FileSystemDock::get_dir_icon_color(favorite, default_folder_color);
434434
} else {
435435
text = favorite.get_file();
436436
int index;
@@ -3951,6 +3951,30 @@ void FileSystemDock::_file_sort_popup(int p_id) {
39513951
set_file_sort((FileSortOption)p_id);
39523952
}
39533953

3954+
// TODO: Could use a unit test.
3955+
Color FileSystemDock::get_dir_icon_color(const String &p_dir_path, const Color &p_default) {
3956+
if (!singleton) { // This method can be called from the project manager.
3957+
return p_default;
3958+
}
3959+
Color folder_icon_color = p_default;
3960+
3961+
// Check for a folder color to inherit (if one is assigned).
3962+
String parent_dir = ProjectSettings::get_singleton()->localize_path(p_dir_path);
3963+
while (!parent_dir.is_empty() && parent_dir != "res://") {
3964+
if (!parent_dir.ends_with("/")) {
3965+
parent_dir += "/";
3966+
}
3967+
3968+
const String color_name = singleton->assigned_folder_colors.get(parent_dir, String());
3969+
if (!color_name.is_empty()) {
3970+
folder_icon_color = singleton->folder_colors[color_name];
3971+
break;
3972+
}
3973+
parent_dir = parent_dir.trim_suffix("/").get_base_dir();
3974+
}
3975+
return folder_icon_color;
3976+
}
3977+
39543978
const HashMap<String, Color> &FileSystemDock::get_folder_colors() const {
39553979
return folder_colors;
39563980
}

editor/filesystem_dock.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -383,6 +383,8 @@ class FileSystemDock : public VBoxContainer {
383383
static constexpr double ITEM_ALPHA_MAX = 0.15;
384384
static constexpr double ITEM_BG_DARK_SCALE = 0.3;
385385

386+
static Color get_dir_icon_color(const String &p_dir_path, const Color &p_default);
387+
386388
const HashMap<String, Color> &get_folder_colors() const;
387389
Dictionary get_assigned_folder_colors() const;
388390

editor/gui/editor_file_dialog.cpp

Lines changed: 3 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -973,35 +973,6 @@ void EditorFileDialog::update_file_name() {
973973
}
974974
}
975975

976-
// TODO: Could use a unit test.
977-
Color EditorFileDialog::get_dir_icon_color(const String &p_dir_path) {
978-
if (!FileSystemDock::get_singleton()) { // This dialog can be called from the project manager.
979-
return theme_cache.folder_icon_color;
980-
}
981-
982-
const HashMap<String, Color> &folder_colors = FileSystemDock::get_singleton()->get_folder_colors();
983-
Dictionary assigned_folder_colors = FileSystemDock::get_singleton()->get_assigned_folder_colors();
984-
985-
Color folder_icon_color = theme_cache.folder_icon_color;
986-
987-
// Check for a folder color to inherit (if one is assigned).
988-
String parent_dir = ProjectSettings::get_singleton()->localize_path(p_dir_path);
989-
while (!parent_dir.is_empty() && parent_dir != "res://") {
990-
if (!parent_dir.ends_with("/")) {
991-
parent_dir += "/";
992-
}
993-
if (assigned_folder_colors.has(parent_dir)) {
994-
folder_icon_color = folder_colors[assigned_folder_colors[parent_dir]];
995-
if (folder_icon_color != theme_cache.folder_icon_color) {
996-
break;
997-
}
998-
}
999-
parent_dir = parent_dir.trim_suffix("/").get_base_dir();
1000-
}
1001-
1002-
return folder_icon_color;
1003-
}
1004-
1005976
// DO NOT USE THIS FUNCTION UNLESS NEEDED, CALL INVALIDATE() INSTEAD.
1006977
void EditorFileDialog::update_file_list() {
1007978
int thumbnail_size = EDITOR_GET("filesystem/file_dialog/thumbnail_size");
@@ -1155,7 +1126,7 @@ void EditorFileDialog::update_file_list() {
11551126
d["bundle"] = bundle;
11561127

11571128
item_list->set_item_metadata(-1, d);
1158-
item_list->set_item_icon_modulate(-1, get_dir_icon_color(String(d["path"])));
1129+
item_list->set_item_icon_modulate(-1, FileSystemDock::get_dir_icon_color(String(d["path"]), theme_cache.folder_icon_color));
11591130
}
11601131

11611132
dirs.pop_front();
@@ -1840,7 +1811,7 @@ void EditorFileDialog::_update_favorites() {
18401811
favorites->add_item(favorited_names[i], theme_cache.folder);
18411812
favorites->set_item_tooltip(-1, favorited_paths[i]);
18421813
favorites->set_item_metadata(-1, favorited_paths[i]);
1843-
favorites->set_item_icon_modulate(-1, get_dir_icon_color(favorited_paths[i]));
1814+
favorites->set_item_icon_modulate(-1, FileSystemDock::get_dir_icon_color(favorited_paths[i], theme_cache.folder_icon_color));
18441815

18451816
if (i == current_favorite) {
18461817
favorite->set_pressed(true);
@@ -1925,7 +1896,7 @@ void EditorFileDialog::_update_recent() {
19251896
recent->add_item(recentd_names[i], theme_cache.folder);
19261897
recent->set_item_tooltip(-1, recentd_paths[i]);
19271898
recent->set_item_metadata(-1, recentd_paths[i]);
1928-
recent->set_item_icon_modulate(-1, get_dir_icon_color(recentd_paths[i]));
1899+
recent->set_item_icon_modulate(-1, FileSystemDock::get_dir_icon_color(recentd_paths[i], theme_cache.folder_icon_color));
19291900
}
19301901

19311902
if (modified) {

editor/gui/editor_file_dialog.h

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -301,8 +301,6 @@ class EditorFileDialog : public ConfirmationDialog {
301301
static void _bind_methods();
302302

303303
public:
304-
Color get_dir_icon_color(const String &p_dir_path);
305-
306304
virtual void set_visible(bool p_visible) override;
307305
virtual void popup(const Rect2i &p_rect = Rect2i()) override;
308306

0 commit comments

Comments
 (0)