diff options
author | Yuri Sizov <11782833+YuriSizov@users.noreply.github.com> | 2023-03-25 19:48:42 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-03-25 19:48:42 +0100 |
commit | 5922b2149ef30b8628d1d23dd6ec397d07d16ba2 (patch) | |
tree | b959f28e213514a83ca207db3d4a6b6ab89c283d /scene/gui/file_dialog.cpp | |
parent | 08f79a894f80e3dc0d1bf740f48bc42d6397703d (diff) | |
parent | fc3d9d9d466513d5f64cfd5466e2a5600d0c4803 (diff) | |
download | redot-engine-5922b2149ef30b8628d1d23dd6ec397d07d16ba2.tar.gz |
Merge pull request #71868 from YeldhamDev/filediag_invalidate_deferred
Defer invalidation on FileDialog nodes
Diffstat (limited to 'scene/gui/file_dialog.cpp')
-rw-r--r-- | scene/gui/file_dialog.cpp | 25 |
1 files changed, 17 insertions, 8 deletions
diff --git a/scene/gui/file_dialog.cpp b/scene/gui/file_dialog.cpp index 02abddaa43..e1309020a7 100644 --- a/scene/gui/file_dialog.cpp +++ b/scene/gui/file_dialog.cpp @@ -126,6 +126,8 @@ void FileDialog::_notification(int p_what) { show_hidden->add_theme_color_override("icon_hover_color", theme_cache.icon_hover_color); show_hidden->add_theme_color_override("icon_focus_color", theme_cache.icon_focus_color); show_hidden->add_theme_color_override("icon_pressed_color", theme_cache.icon_pressed_color); + + invalidate(); } break; case NOTIFICATION_TRANSLATION_CHANGED: { @@ -863,12 +865,22 @@ void FileDialog::set_access(Access p_access) { } void FileDialog::invalidate() { - if (is_visible()) { - update_file_list(); - invalidated = false; - } else { - invalidated = true; + if (!is_visible() || is_invalidating) { + return; } + + is_invalidating = true; + callable_mp(this, &FileDialog::_invalidate).call_deferred(); +} + +void FileDialog::_invalidate() { + if (!is_invalidating) { + return; + } + + update_file_list(); + + is_invalidating = false; } FileDialog::Access FileDialog::get_access() const { @@ -966,9 +978,6 @@ void FileDialog::_bind_methods() { ClassDB::bind_method(D_METHOD("get_root_subfolder"), &FileDialog::get_root_subfolder); ClassDB::bind_method(D_METHOD("set_show_hidden_files", "show"), &FileDialog::set_show_hidden_files); ClassDB::bind_method(D_METHOD("is_showing_hidden_files"), &FileDialog::is_showing_hidden_files); - ClassDB::bind_method(D_METHOD("_update_file_name"), &FileDialog::update_file_name); - ClassDB::bind_method(D_METHOD("_update_dir"), &FileDialog::update_dir); - ClassDB::bind_method(D_METHOD("_update_file_list"), &FileDialog::update_file_list); ClassDB::bind_method(D_METHOD("deselect_all"), &FileDialog::deselect_all); ClassDB::bind_method(D_METHOD("invalidate"), &FileDialog::invalidate); |