diff options
author | Gökay Şatır <gokaysatir@collabora.com> | 2023-02-20 11:17:55 +0300 |
---|---|---|
committer | Miklos Vajna <vmiklos@collabora.com> | 2023-02-23 11:52:48 +0000 |
commit | 8b1e20c164e11689894ca605735541fad9aea3b1 (patch) | |
tree | 69f9eae106c715c844eb23e352a00849adc86142 /desktop | |
parent | 67fcd647341118747a4e7cd404d907d29613778c (diff) |
Preload the accelerator configurations when libreofficekit is active.
Signed-off-by: Gökay Şatır <gokaysatir@collabora.com>
Change-Id: I6fbc2e87b1e338b84c69b96768df0339f1a0abd0
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/147311
Tested-by: Jenkins CollaboraOffice <jenkinscollaboraoffice@gmail.com>
Reviewed-by: Miklos Vajna <vmiklos@collabora.com>
Diffstat (limited to 'desktop')
-rw-r--r-- | desktop/source/lib/init.cxx | 48 |
1 files changed, 48 insertions, 0 deletions
diff --git a/desktop/source/lib/init.cxx b/desktop/source/lib/init.cxx index ab8bc71d4780..b00497df127e 100644 --- a/desktop/source/lib/init.cxx +++ b/desktop/source/lib/init.cxx @@ -210,6 +210,10 @@ #include <unotools/viewoptions.hxx> #include <vcl/settings.hxx> +#include <officecfg/Setup.hxx> +#include <com/sun/star/ui/XAcceleratorConfiguration.hpp> +#include <svtools/acceleratorexecute.hxx> + using namespace css; using namespace vcl; using namespace desktop; @@ -6886,6 +6890,47 @@ static void lo_status_indicator_callback(void *data, comphelper::LibreOfficeKit: void setLanguageToolConfig(); +/// Used by preloadData (LibreOfficeKit) for providing different shortcuts for different languages. +void preLoadShortCutAccelerators() +{ + std::unordered_map<OUString, css::uno::Reference<com::sun::star::ui::XAcceleratorConfiguration>>& acceleratorConfs = SfxLokHelper::getAcceleratorConfs(); + css::uno::Sequence<OUString> installedLocales(officecfg::Setup::Office::InstalledLocales::get()->getElementNames()); + OUString actualLang = officecfg::Setup::L10N::ooLocale::get(); + + for (sal_Int32 i = 0; i < installedLocales.getLength(); i++) + { + OUString language = LanguageTag(installedLocales[i]).getLocale().Language; + + if (!comphelper::LibreOfficeKit::isAllowlistedLanguage(language)) + { + // Language is listed by COOL and also installed in core. We can create the short cut accelerator. + + // Set the UI language to current one, before creating the accelerator. + std::shared_ptr<comphelper::ConfigurationChanges> batch(comphelper::ConfigurationChanges::create()); + officecfg::Setup::L10N::ooLocale::set(installedLocales[i], batch); + batch->commit(); + + // Supported module names: Writer, Calc, Draw, Impress + std::vector<OUString> supportedModuleNames = { "com.sun.star.text.TextDocument", "com.sun.star.sheet.SpreadsheetDocument", "com.sun.star.drawing.DrawingDocument", "com.sun.star.presentation.PresentationDocument" }; + // Create the accelerators. + for (std::size_t j = 0; j < supportedModuleNames.size(); j++) + { + OUString key = supportedModuleNames[j] + installedLocales[i]; + acceleratorConfs[key] = svt::AcceleratorExecute::lok_createNewAcceleratorConfiguration(::comphelper::getProcessComponentContext(), supportedModuleNames[j]); + } + } + else + { + std::cerr << "Language is installed in core but not in the list of COOL languages: " << language << "\n"; + } + } + + // Set the UI language back to default one. + std::shared_ptr<comphelper::ConfigurationChanges> batch(comphelper::ConfigurationChanges::create()); + officecfg::Setup::L10N::ooLocale::set(actualLang, batch); + batch->commit(); +} + /// Used only by LibreOfficeKit when used by Online to pre-initialize static void preloadData() { @@ -6952,6 +6997,9 @@ static void preloadData() ImageTree &images = ImageTree::get(); images.getImageUrl("forcefed.png", "style", "FO_oo"); + std::cerr << "Preload short cut accelerators\n"; + preLoadShortCutAccelerators(); + std::cerr << "Preload languages\n"; // force load language singleton |