diff options
author | George Marques <george@gmarqu.es> | 2017-12-05 00:21:04 -0200 |
---|---|---|
committer | George Marques <george@gmarqu.es> | 2017-12-05 00:25:29 -0200 |
commit | 6af42c536a432ba4228da59876a4b08852a7fa77 (patch) | |
tree | 6bf3ba97508fbf7fecaf498a17b9521072e2a04d | |
parent | 055c5600c8877ebe44c80fa853cca4b6b553eb0a (diff) |
GDNative: Save singletons only if there's a change
Ensures that the Project Settings are saved only if the list of
singletons actually changed.
-rw-r--r-- | modules/gdnative/register_types.cpp | 22 |
1 files changed, 20 insertions, 2 deletions
diff --git a/modules/gdnative/register_types.cpp b/modules/gdnative/register_types.cpp index 34099bf528..365def75bc 100644 --- a/modules/gdnative/register_types.cpp +++ b/modules/gdnative/register_types.cpp @@ -103,16 +103,34 @@ static void actual_discoverer_handler() { Set<String> file_paths = get_gdnative_singletons(dir); + bool changed = false; + Array current_files = ProjectSettings::get_singleton()->get("gdnative/singletons"); Array files; files.resize(file_paths.size()); int i = 0; for (Set<String>::Element *E = file_paths.front(); E; i++, E = E->next()) { + if (!current_files.has(E->get())) { + changed = true; + } files.set(i, E->get()); } - ProjectSettings::get_singleton()->set("gdnative/singletons", files); + // Check for removed files + if (!changed) { + for (int i = 0; i < current_files.size(); i++) { + if (!file_paths.has(current_files[i])) { + changed = true; + break; + } + } + } - ProjectSettings::get_singleton()->save(); + if (changed) { + + ProjectSettings::get_singleton()->set("gdnative/singletons", files); + + ProjectSettings::get_singleton()->save(); + } } static GDNativeSingletonDiscover *discoverer = NULL; |