From 03048aa94a24dde0a39705cd0c0f9994aa45e1fd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pa=CC=84vels=20Nadtoc=CC=8Cajevs?= <7645683+bruvzg@users.noreply.github.com> Date: Sun, 27 Apr 2025 17:32:38 +0300 Subject: [PATCH] Improve edited scene layout direction detection. --- core/string/translation_server.cpp | 4 ++++ core/string/translation_server.h | 1 + editor/editor_node.cpp | 5 +++++ scene/gui/control.cpp | 3 ++- scene/main/window.cpp | 3 ++- 5 files changed, 14 insertions(+), 2 deletions(-) diff --git a/core/string/translation_server.cpp b/core/string/translation_server.cpp index db37b375170..1fa40fe0d7b 100644 --- a/core/string/translation_server.cpp +++ b/core/string/translation_server.cpp @@ -381,6 +381,10 @@ String TranslationServer::get_locale() const { return locale; } +void TranslationServer::set_fallback_locale(const String &p_locale) { + fallback = p_locale; +} + String TranslationServer::get_fallback_locale() const { return fallback; } diff --git a/core/string/translation_server.h b/core/string/translation_server.h index c8755716130..414f80ebb45 100644 --- a/core/string/translation_server.h +++ b/core/string/translation_server.h @@ -104,6 +104,7 @@ public: void set_locale(const String &p_locale); String get_locale() const; + void set_fallback_locale(const String &p_locale); String get_fallback_locale() const; Ref get_translation_object(const String &p_locale); diff --git a/editor/editor_node.cpp b/editor/editor_node.cpp index a3a152ab344..b8a732c5535 100644 --- a/editor/editor_node.cpp +++ b/editor/editor_node.cpp @@ -426,6 +426,11 @@ void EditorNode::_update_from_settings() { Viewport::DefaultCanvasItemTextureRepeat tr = (Viewport::DefaultCanvasItemTextureRepeat)current_repeat; scene_root->set_default_canvas_item_texture_repeat(tr); } + String current_fallback_locale = GLOBAL_GET("internationalization/locale/fallback"); + if (current_fallback_locale != TranslationServer::get_singleton()->get_fallback_locale()) { + TranslationServer::get_singleton()->set_fallback_locale(current_fallback_locale); + scene_root->propagate_notification(Control::NOTIFICATION_LAYOUT_DIRECTION_CHANGED); + } RS::DOFBokehShape dof_shape = RS::DOFBokehShape(int(GLOBAL_GET("rendering/camera/depth_of_field/depth_of_field_bokeh_shape"))); RS::get_singleton()->camera_attributes_set_dof_blur_bokeh_shape(dof_shape); diff --git a/scene/gui/control.cpp b/scene/gui/control.cpp index ff52236c0bf..365d867d020 100644 --- a/scene/gui/control.cpp +++ b/scene/gui/control.cpp @@ -3404,7 +3404,8 @@ bool Control::is_layout_rtl() const { String locale = OS::get_singleton()->get_locale(); data.is_rtl = TS->is_locale_right_to_left(locale); } else { - String locale = TranslationServer::get_singleton()->get_tool_locale(); + const Ref &t = TranslationServer::get_singleton()->get_translation_object(TranslationServer::get_singleton()->get_locale()); + String locale = t.is_valid() ? t->get_locale() : TranslationServer::get_singleton()->get_fallback_locale(); data.is_rtl = TS->is_locale_right_to_left(locale); } return data.is_rtl; diff --git a/scene/main/window.cpp b/scene/main/window.cpp index 27afd864adb..801583d2f55 100644 --- a/scene/main/window.cpp +++ b/scene/main/window.cpp @@ -2868,7 +2868,8 @@ bool Window::is_layout_rtl() const { String locale = OS::get_singleton()->get_locale(); return TS->is_locale_right_to_left(locale); } else { - String locale = TranslationServer::get_singleton()->get_tool_locale(); + const Ref &t = TranslationServer::get_singleton()->get_translation_object(TranslationServer::get_singleton()->get_locale()); + String locale = t.is_valid() ? t->get_locale() : TranslationServer::get_singleton()->get_fallback_locale(); return TS->is_locale_right_to_left(locale); } }