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:
commit
0203b34c7a
3 changed files with 16 additions and 6 deletions
|
@ -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();
|
||||
}
|
||||
|
|
|
@ -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();
|
||||
};
|
||||
|
|
|
@ -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);
|
||||
|
|
Loading…
Reference in a new issue