Merge pull request #58025 from bruvzg/fix_pm_crash

Fix Project Manager crash on exit and editor settings loading / saving.
This commit is contained in:
Rémi Verschelde 2022-02-12 23:16:24 +01:00 committed by GitHub
commit 0203b34c7a
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 16 additions and 6 deletions

View file

@ -1863,6 +1863,8 @@ void ProjectList::_bind_methods() {
ADD_SIGNAL(MethodInfo(SIGNAL_PROJECT_ASK_OPEN));
}
ProjectManager *ProjectManager::singleton = nullptr;
void ProjectManager::_notification(int p_what) {
switch (p_what) {
case NOTIFICATION_TRANSLATION_CHANGED:
@ -1908,10 +1910,8 @@ void ProjectManager::_notification(int p_what) {
}
}
Map<String, Ref<Texture2D>> ProjectManager::icon_type_cache;
Ref<Texture2D> ProjectManager::_file_dialog_get_icon(const String &p_path) {
return icon_type_cache["ObjectHR"];
return singleton->icon_type_cache["ObjectHR"];
}
void ProjectManager::_build_icon_type_cache(Ref<Theme> p_theme) {
@ -2481,6 +2481,8 @@ void ProjectManager::_version_button_pressed() {
}
ProjectManager::ProjectManager() {
singleton = this;
// load settings
if (!EditorSettings::get_singleton()) {
EditorSettings::create();
@ -2870,6 +2872,7 @@ ProjectManager::ProjectManager() {
}
ProjectManager::~ProjectManager() {
singleton = nullptr;
if (EditorSettings::get_singleton()) {
EditorSettings::destroy();
}

View file

@ -50,8 +50,10 @@ enum FilterOption {
class ProjectManager : public Control {
GDCLASS(ProjectManager, Control);
static Map<String, Ref<Texture2D>> icon_type_cache;
static void _build_icon_type_cache(Ref<Theme> p_theme);
Map<String, Ref<Texture2D>> icon_type_cache;
void _build_icon_type_cache(Ref<Theme> p_theme);
static ProjectManager *singleton;
TabContainer *tabs;
@ -139,6 +141,8 @@ protected:
static void _bind_methods();
public:
static ProjectManager *get_singleton() { return singleton; }
ProjectManager();
~ProjectManager();
};

View file

@ -1212,6 +1212,10 @@ Error Main::setup(const char *execpath, int argc, char *argv[], bool p_second_ph
// If we didn't find a project, we fall back to the project manager.
project_manager = !found_project && !cmdline_tool;
}
if (project_manager) {
Engine::get_singleton()->set_project_manager_hint(true);
}
#endif
GLOBAL_DEF("debug/file_logging/enable_file_logging", false);
@ -2540,7 +2544,6 @@ bool Main::start() {
#ifdef TOOLS_ENABLED
if (project_manager) {
Engine::get_singleton()->set_editor_hint(true);
Engine::get_singleton()->set_project_manager_hint(true);
ProjectManager *pmanager = memnew(ProjectManager);
ProgressDialog *progress_dialog = memnew(ProgressDialog);
pmanager->add_child(progress_dialog);