diff options
author | Andrey Kleshchev <andreykproductengine@lindenlab.com> | 2022-03-04 22:24:59 +0200 |
---|---|---|
committer | Andrey Kleshchev <andreykproductengine@lindenlab.com> | 2022-03-04 22:27:38 +0200 |
commit | fc90fee5087c91bb8c4c93b5e9508706e46bd409 (patch) | |
tree | eb27f26bcd2c0effc19d843f919fd12da85947ed /indra/newview | |
parent | 76a1b181e6fd6ddaf89b53eab4de80477e11fa3d (diff) |
SL-16976 SL-443 Keybindings: Backward compatibility #3
Diffstat (limited to 'indra/newview')
-rw-r--r-- | indra/newview/llkeyconflict.cpp | 17 | ||||
-rw-r--r-- | indra/newview/llviewerinput.cpp | 49 |
2 files changed, 49 insertions, 17 deletions
diff --git a/indra/newview/llkeyconflict.cpp b/indra/newview/llkeyconflict.cpp index 4c58c9e68c..d3ba18525b 100644 --- a/indra/newview/llkeyconflict.cpp +++ b/indra/newview/llkeyconflict.cpp @@ -376,23 +376,6 @@ bool LLKeyConflictHandler::loadFromSettings(const ESourceMode &load_mode, const LL_ERRS() << "Not implememted mode " << load_mode << LL_ENDL; break; } - - // verify version - if (keys.xml_version < 1) - { - // Updating from a version that was not aware of LMouse bindings. - // Assign defaults. - // - // mDefaultsMap is always going to have correct version so - // registerControl is usable, but using 'destination' just in case. - LLKeyConflict &type_data = (*destination)[script_mouse_handler_name]; - LLKeyData data(CLICK_LEFT, KEY_NONE, MASK_NONE, true); - type_data.mKeyBind.replaceKeyData(data, 0); - - // Mark this mode for an update, once user clicks 'OK' in preferences - // it should get saved - mHasUnsavedChanges = true; - } } return res; } diff --git a/indra/newview/llviewerinput.cpp b/indra/newview/llviewerinput.cpp index 1a08b1a56c..43b9cd90bd 100644 --- a/indra/newview/llviewerinput.cpp +++ b/indra/newview/llviewerinput.cpp @@ -1371,6 +1371,55 @@ S32 LLViewerInput::loadBindingsXML(const std::string& filename) { mLMouseDefaultHandling[i] = true; } + + // fix missing values + KeyBinding mouse_binding; + mouse_binding.key = ""; + mouse_binding.mask = "NONE"; + mouse_binding.mouse = "LMB"; + mouse_binding.command = script_mouse_handler_name; + + if (keys.third_person.isProvided()) + { + keys.third_person.bindings.add(mouse_binding); + } + + if (keys.first_person.isProvided()) + { + keys.first_person.bindings.add(mouse_binding); + } + + if (keys.sitting.isProvided()) + { + keys.sitting.bindings.add(mouse_binding); + } + + if (keys.edit_avatar.isProvided()) + { + keys.edit_avatar.bindings.add(mouse_binding); + } + + // fix version + keys.xml_version.set(keybindings_xml_version, true); + + // Write the resulting XML to file + LLXMLNodePtr output_node = new LLXMLNode("keys", false); + LLXUIParser write_parser; + write_parser.writeXUI(output_node, keys); + + if (!output_node->isNull()) + { + // file in app_settings is supposed to be up to date + // this is only for the file from user_settings + LL_INFOS("ViewerInput") << "Updating file " << filename << " to a newer version" << LL_ENDL; + LLFILE *fp = LLFile::fopen(filename, "w"); + if (fp != NULL) + { + LLXMLNode::writeHeaderToFile(fp); + output_node->writeToFile(fp); + fclose(fp); + } + } } } return binding_count; |