From f18f9dcd14c043b95abfbd4e4319611b66aa9223 Mon Sep 17 00:00:00 2001 From: Adriaan de Groot Date: Fri, 10 May 2019 15:02:12 -0400 Subject: [PATCH] [welcome] Lookup GeoIP language and pass to language widget - FIXES #934 - Whether this is really wanted depends on the distro, and I'm not 100% convinced the likely tags from Unicode are correct (or it'd take a lot more data). In any case, starting Calamares in "NL" gets me "nl_NL" as translation; presumably starting it in "BE" will get me that as well (what about Les Wallons?) - This also shows off that it's a real hack to have so much program logic in the *widget* parts of each ViewStep. Longer-term, a lot of functionality should go to the ViewStep itself, which will then control the UI. --- src/modules/welcome/WelcomePage.cpp | 10 +++++++++- src/modules/welcome/WelcomePage.h | 2 ++ src/modules/welcome/WelcomeViewStep.cpp | 8 +++++++- 3 files changed, 18 insertions(+), 2 deletions(-) diff --git a/src/modules/welcome/WelcomePage.cpp b/src/modules/welcome/WelcomePage.cpp index c7d169c92..ae78aa8ff 100644 --- a/src/modules/welcome/WelcomePage.cpp +++ b/src/modules/welcome/WelcomePage.cpp @@ -257,11 +257,19 @@ WelcomePage::focusInEvent( QFocusEvent* e ) e->accept(); } -bool WelcomePage::verdict() const +bool +WelcomePage::verdict() const { return m_checkingWidget->verdict(); } +void +WelcomePage::externallySelectedLanguage( int row ) +{ + if ( ( row >= 0 ) && ( row < ui->languageWidget->count() ) ) + ui->languageWidget->setCurrentIndex( row ); +} + void LocaleTwoColumnDelegate::paint(QPainter* painter, const QStyleOptionViewItem& option, const QModelIndex& index) const diff --git a/src/modules/welcome/WelcomePage.h b/src/modules/welcome/WelcomePage.h index 53a30d95b..f05426d38 100644 --- a/src/modules/welcome/WelcomePage.h +++ b/src/modules/welcome/WelcomePage.h @@ -46,6 +46,8 @@ public: /// @brief Results of requirements checking bool verdict() const; + /// @brief Change the language from an external source. + void externallySelectedLanguage( int row ); protected: void focusInEvent( QFocusEvent* e ) override; //choose the child widget to focus diff --git a/src/modules/welcome/WelcomeViewStep.cpp b/src/modules/welcome/WelcomeViewStep.cpp index 97b378330..e115565b7 100644 --- a/src/modules/welcome/WelcomeViewStep.cpp +++ b/src/modules/welcome/WelcomeViewStep.cpp @@ -161,5 +161,11 @@ WelcomeViewStep::setCountry( const QString& countryCode ) return; } else - cDebug() << "Would like to select" << c_l; + { + int r = CalamaresUtils::Locale::availableTranslations()->find( countryCode ); + if ( r < 0 ) + cDebug() << "Unusable country code" << countryCode << "(no suitable translation)"; + if ( ( r >= 0 ) && m_widget ) + m_widget->externallySelectedLanguage( r ); + } }