diff --git a/cockatrice/src/interface/widgets/dialogs/settings_view.cpp b/cockatrice/src/interface/widgets/dialogs/settings_view.cpp index c2d9860c3..9a78cb9fd 100644 --- a/cockatrice/src/interface/widgets/dialogs/settings_view.cpp +++ b/cockatrice/src/interface/widgets/dialogs/settings_view.cpp @@ -7,6 +7,7 @@ #include "../../../client/settings/cache_settings.h" #include "../../pixel_map_generator.h" +#include "../main.h" #include "../settings_page/abstract_settings_page.h" #include "../settings_page/appearance_settings_page.h" #include "../settings_page/deck_editor_settings_page.h" @@ -21,6 +22,7 @@ #include #include +#include #include #include #include @@ -91,6 +93,10 @@ static QStringList pageIconResources() SettingsView::SettingsView(QWidget *parent) : QWidget(parent), currentTabIndex(0), searchActive(false) { + // Swap the QTranslator before retranslating (was DlgSettings::updateLanguage): without this, picking a new + // language only stores the setting and every retranslateUi re-runs against the old translator until restart. + // Connected before setupUi() so the swap runs before the pages' own langChanged handlers below. + connect(&SettingsCache::instance().personal(), &PersonalSettings::langChanged, this, &SettingsView::updateLanguage); setupUi(); connect(&SettingsCache::instance().personal(), &PersonalSettings::langChanged, this, &SettingsView::retranslateUi); @@ -462,6 +468,12 @@ bool SettingsView::eventFilter(QObject *watched, QEvent *event) return QWidget::eventFilter(watched, event); } +void SettingsView::updateLanguage() +{ + qApp->removeTranslator(translator); // NOLINT(cppcoreguidelines-pro-type-static-cast-downcast) + installNewTranslator(); +} + void SettingsView::retranslateUi() { retranslateTabNames(); diff --git a/cockatrice/src/interface/widgets/dialogs/settings_view.h b/cockatrice/src/interface/widgets/dialogs/settings_view.h index fe1b925d8..01bfb7773 100644 --- a/cockatrice/src/interface/widgets/dialogs/settings_view.h +++ b/cockatrice/src/interface/widgets/dialogs/settings_view.h @@ -61,6 +61,7 @@ private slots: void onTabClicked(int index); void onSearchTextChanged(const QString &text); void onSearchResultClicked(const QModelIndex &index); + void updateLanguage(); private: // UI elements