cui/source/options/optlingu.cxx | 10 +++++----- include/svx/langbox.hxx | 4 ++-- svx/source/dialog/langbox.cxx | 31 +++++++++++++++++++------------ 3 files changed, 26 insertions(+), 19 deletions(-)
New commits: commit f831b1edd87d934d74fc931a3650e3737ccfe3a8 Author: Mike Kaganski <mike.kagan...@collabora.com> AuthorDate: Tue Jun 6 10:18:33 2023 +0300 Commit: Mike Kaganski <mike.kagan...@collabora.com> CommitDate: Tue Jun 6 11:54:16 2023 +0200 Drop the unneeded optimization for "[All]" It will only be used *at most* once, but often will not be used at all. Change-Id: I13b0e9ab8a4918c56a7e710c80d6d9d36019c605 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/152644 Tested-by: Jenkins Reviewed-by: Mike Kaganski <mike.kagan...@collabora.com> diff --git a/include/svx/langbox.hxx b/include/svx/langbox.hxx index 1ab9c478d805..af09654bfc62 100644 --- a/include/svx/langbox.hxx +++ b/include/svx/langbox.hxx @@ -59,7 +59,6 @@ public: private: std::unique_ptr<weld::ComboBox> m_xControl; Link<weld::ComboBox&, void> m_aChangeHdl; - OUString m_aAllString; std::unique_ptr<css::uno::Sequence<sal_Int16>> m_xSpellUsedLang; LanguageType m_eSavedLanguage; EditedAndValid m_eEditedAndValid; diff --git a/svx/source/dialog/langbox.cxx b/svx/source/dialog/langbox.cxx index 6ce694ca0cc5..fae7cf66e8d8 100644 --- a/svx/source/dialog/langbox.cxx +++ b/svx/source/dialog/langbox.cxx @@ -337,7 +337,7 @@ weld::ComboBoxEntry SvxLanguageBox::BuildEntry(const LanguageType nLangType, sal } OUString aStrEntry = (LANGUAGE_NONE == nLang && m_bHasLangNone && m_bLangNoneIsLangAll) - ? m_aAllString + ? SvxResId(RID_SVXSTR_LANGUAGE_ALL) : SvtLanguageTable::GetLanguageString(nLang); LanguageType nRealLang = nLang; @@ -446,7 +446,6 @@ IMPL_LINK(SvxLanguageBox, ChangeHdl, weld::ComboBox&, rControl, void) SvxLanguageBox::SvxLanguageBox(std::unique_ptr<weld::ComboBox> pControl) : m_xControl(std::move(pControl)) - , m_aAllString(SvxResId(RID_SVXSTR_LANGUAGE_ALL)) , m_eSavedLanguage(LANGUAGE_DONTKNOW) , m_eEditedAndValid(EditedAndValid::No) , m_bHasLangNone(false) commit 1ae50dc4f816f37df50bfcb9d97c071fdf1e143f Author: Mike Kaganski <mike.kagan...@collabora.com> AuthorDate: Mon Jun 5 17:36:32 2023 +0300 Commit: Mike Kaganski <mike.kagan...@collabora.com> CommitDate: Tue Jun 6 11:54:09 2023 +0200 Sort languages in Edit Modules dialog After commit e855481ead996a3b8270fae91bd23d6c8d75ef25, these languages are already ordered according to css::lang::Locale sorting implemented there; but this ordering does not follow the UI language sorting rules. TODO: put language without country/variant before respective languages having country/variant. Change-Id: Ic98b50ef4a500c799110611f7c35c74b4a239ed4 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/152641 Tested-by: Jenkins Reviewed-by: Mike Kaganski <mike.kagan...@collabora.com> diff --git a/cui/source/options/optlingu.cxx b/cui/source/options/optlingu.cxx index 6097f307038f..d13ca464bbe0 100644 --- a/cui/source/options/optlingu.cxx +++ b/cui/source/options/optlingu.cxx @@ -1603,11 +1603,11 @@ SvxEditModulesDlg::SvxEditModulesDlg(weld::Window* pParent, SvxLinguData_Impl& r //fill language box const auto& rLoc = rLinguData.GetAllSupportedLocales(); - for (Locale const & locale : rLoc) - { - LanguageType nLang = LanguageTag::convertToLanguageType( locale ); - m_xLanguageLB->InsertLanguage(nLang); - } + std::vector<LanguageType> aLanguages; + aLanguages.reserve(rLoc.size()); + std::transform(rLoc.begin(), rLoc.end(), std::back_inserter(aLanguages), + [](Locale const& locale) { return LanguageTag::convertToLanguageType(locale); }); + m_xLanguageLB->InsertLanguages(aLanguages); LanguageType eSysLang = MsLangId::getConfiguredSystemLanguage(); m_xLanguageLB->set_active_id( eSysLang ); if (m_xLanguageLB->get_active_id() != eSysLang) diff --git a/include/svx/langbox.hxx b/include/svx/langbox.hxx index 08893e8e1ce4..1ab9c478d805 100644 --- a/include/svx/langbox.hxx +++ b/include/svx/langbox.hxx @@ -69,7 +69,7 @@ private: SVX_DLLPRIVATE weld::ComboBoxEntry BuildEntry(const LanguageType nLangType, sal_Int16 nType = css::i18n::ScriptType::WEAK); SVX_DLLPRIVATE void AddLanguages(const std::vector< LanguageType >& rLanguageTypes, SvxLanguageListFlags nLangList, - std::vector<weld::ComboBoxEntry>& rEntries); + std::vector<weld::ComboBoxEntry>& rEntries, bool requireSublang); DECL_DLLPRIVATE_LINK(ChangeHdl, weld::ComboBox&, void); public: @@ -80,6 +80,7 @@ public: LanguageType eDefaultLangType = LANGUAGE_NONE, sal_Int16 nDefaultType = 0 ); void InsertLanguage(const LanguageType nLangType); + void InsertLanguages(const std::vector<LanguageType>& rLanguageTypes); EditedAndValid GetEditedAndValid() const { return m_eEditedAndValid;} SvxLanguageBox* SaveEditedAsEntry( SvxLanguageBox* ppBoxes[3] /* convention: Western, Asian, Complex */ ); diff --git a/svx/source/dialog/langbox.cxx b/svx/source/dialog/langbox.cxx index 8142f0425687..6ce694ca0cc5 100644 --- a/svx/source/dialog/langbox.cxx +++ b/svx/source/dialog/langbox.cxx @@ -88,7 +88,7 @@ static bool lcl_SeqHasLang( const Sequence< sal_Int16 > & rLangSeq, sal_Int16 nL namespace { -bool lcl_isPrerequisite( LanguageType nLangType ) +bool lcl_isPrerequisite(LanguageType nLangType, bool requireSublang) { return nLangType != LANGUAGE_DONTKNOW && @@ -96,7 +96,7 @@ bool lcl_isPrerequisite( LanguageType nLangType ) nLangType != LANGUAGE_NONE && nLangType != LANGUAGE_USER_KEYID && !MsLangId::isLegacy( nLangType) && - MsLangId::getSubLanguage( nLangType); + (!requireSublang || MsLangId::getSubLanguage( nLangType)); } bool lcl_isScriptTypeRequested( LanguageType nLangType, SvxLanguageListFlags nLangList ) @@ -167,11 +167,11 @@ void SvxLanguageBox::set_active_id(const LanguageType eLangType) } void SvxLanguageBox::AddLanguages(const std::vector< LanguageType >& rLanguageTypes, - SvxLanguageListFlags nLangList, std::vector<weld::ComboBoxEntry>& rEntries) + SvxLanguageListFlags nLangList, std::vector<weld::ComboBoxEntry>& rEntries, bool requireSublang) { for ( auto const & nLangType : rLanguageTypes ) { - if (lcl_isPrerequisite( nLangType )) + if (lcl_isPrerequisite(nLangType, requireSublang)) { LanguageType nLang = MsLangId::getReplacementForObsoleteLanguage( nLangType ); if (lcl_isScriptTypeRequested( nLang, nLangList)) @@ -280,7 +280,7 @@ void SvxLanguageBox::SetLanguageList(SvxLanguageListFlags nLangList, bool bHasLa nLangType = aKnown[i]; else nLangType = SvtLanguageTable::GetLanguageTypeAtIndex( i ); - if ( lcl_isPrerequisite( nLangType ) && + if ( lcl_isPrerequisite( nLangType, true ) && (lcl_isScriptTypeRequested( nLangType, nLangList) || (bool(nLangList & SvxLanguageListFlags::FBD_CHARS) && MsLangId::hasForbiddenCharacters(nLangType)) || @@ -298,7 +298,7 @@ void SvxLanguageBox::SetLanguageList(SvxLanguageListFlags nLangList, bool bHasLa { // Spell checkers, hyphenators and thesauri may add language tags // unknown so far. - AddLanguages(aAvailLang, nLangList, aEntries); + AddLanguages(aAvailLang, nLangList, aEntries, true); } SortLanguages(aEntries); @@ -315,6 +315,14 @@ void SvxLanguageBox::InsertLanguage(const LanguageType nLangType) m_xControl->append(aEntry); } +void SvxLanguageBox::InsertLanguages(const std::vector<LanguageType>& rLanguageTypes) +{ + std::vector<weld::ComboBoxEntry> entries; + AddLanguages(rLanguageTypes, SvxLanguageListFlags::ALL, entries, false); + SortLanguages(entries); + m_xControl->insert_vector(entries, true); +} + weld::ComboBoxEntry SvxLanguageBox::BuildEntry(const LanguageType nLangType, sal_Int16 nType) { LanguageType nLang = MsLangId::getReplacementForObsoleteLanguage(nLangType); commit 1bdc67de20cf3090f07412513dfece356024ef0b Author: Mike Kaganski <mike.kagan...@collabora.com> AuthorDate: Mon Jun 5 17:31:34 2023 +0300 Commit: Mike Kaganski <mike.kagan...@collabora.com> CommitDate: Tue Jun 6 11:54:03 2023 +0200 SvxLanguageBox::Store id from getReplacementForObsoleteLanguage ... not the original id passed to the function. Theese corrected ids are used e.g. in set_active_id. Change-Id: I9967d52ed2362ace947ea21f526c4c0694f14476 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/152640 Tested-by: Jenkins Reviewed-by: Mike Kaganski <mike.kagan...@collabora.com> diff --git a/svx/source/dialog/langbox.cxx b/svx/source/dialog/langbox.cxx index 459e7db31033..8142f0425687 100644 --- a/svx/source/dialog/langbox.cxx +++ b/svx/source/dialog/langbox.cxx @@ -328,9 +328,9 @@ weld::ComboBoxEntry SvxLanguageBox::BuildEntry(const LanguageType nLangType, sal return weld::ComboBoxEntry(""); } - OUString aStrEntry = SvtLanguageTable::GetLanguageString( nLang ); - if (LANGUAGE_NONE == nLang && m_bHasLangNone && m_bLangNoneIsLangAll) - aStrEntry = m_aAllString; + OUString aStrEntry = (LANGUAGE_NONE == nLang && m_bHasLangNone && m_bLangNoneIsLangAll) + ? m_aAllString + : SvtLanguageTable::GetLanguageString(nLang); LanguageType nRealLang = nLang; if (nRealLang == LANGUAGE_SYSTEM) @@ -357,10 +357,10 @@ weld::ComboBoxEntry SvxLanguageBox::BuildEntry(const LanguageType nLangType, sal bool bFound = m_xSpellUsedLang && lcl_SeqHasLang(*m_xSpellUsedLang, static_cast<sal_uInt16>(nRealLang)); - return weld::ComboBoxEntry(aStrEntry, OUString::number(static_cast<sal_uInt16>(nLangType)), bFound ? OUString(RID_SVXBMP_CHECKED) : OUString(RID_SVXBMP_NOTCHECKED)); + return weld::ComboBoxEntry(aStrEntry, OUString::number(static_cast<sal_uInt16>(nLang)), bFound ? OUString(RID_SVXBMP_CHECKED) : OUString(RID_SVXBMP_NOTCHECKED)); } else - return weld::ComboBoxEntry(aStrEntry, OUString::number(static_cast<sal_uInt16>(nLangType))); + return weld::ComboBoxEntry(aStrEntry, OUString::number(static_cast<sal_uInt16>(nLang))); } IMPL_LINK(SvxLanguageBox, ChangeHdl, weld::ComboBox&, rControl, void)