浏览代码

Avoid settings from being lost when opening project manager.
Probably fixes many issues of this kind, like missing shortcuts or other settings

Juan Linietsky 9 年之前
父节点
当前提交
7e50a9a2e8
共有 3 个文件被更改,包括 22 次插入6 次删除
  1. 16 6
      tools/editor/editor_settings.cpp
  2. 3 0
      tools/editor/editor_settings.h
  3. 3 0
      tools/editor/project_manager.cpp

+ 16 - 6
tools/editor/editor_settings.cpp

@@ -104,12 +104,17 @@ bool EditorSettings::_get(const StringName& p_name,Variant &r_ret) const {
 		for (const Map<String,Ref<ShortCut> >::Element *E=shortcuts.front();E;E=E->next()) {
 
 			Ref<ShortCut> sc=E->get();
-			if (!sc->has_meta("original"))
-				continue; //this came from settings but is not any longer used
 
-			InputEvent original = sc->get_meta("original");
-			if (sc->is_shortcut(original) || (original.type==InputEvent::NONE && sc->get_shortcut().type==InputEvent::NONE))
-				continue; //not changed from default, don't save
+			if (optimize_save) {
+				if (!sc->has_meta("original")) {
+					continue; //this came from settings but is not any longer used
+				}
+
+				InputEvent original = sc->get_meta("original");
+				if (sc->is_shortcut(original) || (original.type==InputEvent::NONE && sc->get_shortcut().type==InputEvent::NONE))
+					continue; //not changed from default, don't save
+			}
+
 			arr.push_back(E->key());
 			arr.push_back(sc->get_shortcut());
 		}
@@ -161,7 +166,7 @@ void EditorSettings::_get_property_list(List<PropertyInfo> *p_list) const {
 	for(Set<_EVCSort>::Element *E=vclist.front();E;E=E->next()) {
 
 		int pinfo = 0;
-		if (E->get().save) {
+		if (E->get().save || !optimize_save) {
 			pinfo|=PROPERTY_USAGE_STORAGE;
 		}
 
@@ -976,6 +981,10 @@ void EditorSettings::get_shortcut_list(List<String> *r_shortcuts) {
 	}
 }
 
+void EditorSettings::set_optimize_save(bool p_optimize) {
+
+	optimize_save=true;
+}
 
 void EditorSettings::_bind_methods() {
 
@@ -998,6 +1007,7 @@ EditorSettings::EditorSettings() {
 
 	//singleton=this;
 	last_order=0;
+	optimize_save=true;
 	save_changed_setting=true;
 
 	EditorTranslationList *etl=_editor_translations;

+ 3 - 0
tools/editor/editor_settings.h

@@ -88,6 +88,7 @@ private:
 
 	bool save_changed_setting;
 
+	bool optimize_save; //do not save stuff that came from config but was not set from engine
 
 	void _load_defaults(Ref<ConfigFile> p_extra_config = NULL);
 	void _load_default_text_editor_theme();
@@ -155,6 +156,8 @@ public:
 	Ref<ShortCut> get_shortcut(const String&p_name) const;
 	void get_shortcut_list(List<String> *r_shortcuts);
 
+	void set_optimize_save(bool p_optimize);
+
 	EditorSettings();
 	~EditorSettings();
 

+ 3 - 0
tools/editor/project_manager.cpp

@@ -830,6 +830,9 @@ ProjectManager::ProjectManager() {
 	if (!EditorSettings::get_singleton())
 		EditorSettings::create();
 
+
+	EditorSettings::get_singleton()->set_optimize_save(false); //just write settings as they came
+
 	{
 		int dpi_mode = EditorSettings::get_singleton()->get("global/hidpi_mode");
 		if (dpi_mode==0) {