Browse Source

Merge pull request #78747 from RandomShaper/fix_trans_threading

Support loading of translations on threads
Yuri Sizov 2 years ago
parent
commit
7c204874eb
2 changed files with 11 additions and 0 deletions
  1. 9 0
      core/string/translation.cpp
  2. 2 0
      core/string/translation.h

+ 9 - 0
core/string/translation.cpp

@@ -82,6 +82,15 @@ void Translation::_set_messages(const Dictionary &p_messages) {
 void Translation::set_locale(const String &p_locale) {
 	locale = TranslationServer::get_singleton()->standardize_locale(p_locale);
 
+	if (Thread::is_main_thread()) {
+		_notify_translation_changed_if_applies();
+	} else {
+		// Avoid calling non-thread-safe functions here.
+		callable_mp(this, &Translation::_notify_translation_changed_if_applies).call_deferred();
+	}
+}
+
+void Translation::_notify_translation_changed_if_applies() {
 	if (OS::get_singleton()->get_main_loop() && TranslationServer::get_singleton()->get_loaded_locales().has(get_locale())) {
 		OS::get_singleton()->get_main_loop()->notification(MainLoop::NOTIFICATION_TRANSLATION_CHANGED);
 	}

+ 2 - 0
core/string/translation.h

@@ -47,6 +47,8 @@ class Translation : public Resource {
 	virtual Dictionary _get_messages() const;
 	virtual void _set_messages(const Dictionary &p_messages);
 
+	void _notify_translation_changed_if_applies();
+
 protected:
 	static void _bind_methods();