summaryrefslogtreecommitdiff
path: root/desktop
diff options
context:
space:
mode:
authorGökay Şatır <gokaysatir@collabora.com>2023-02-20 11:17:55 +0300
committerMiklos Vajna <vmiklos@collabora.com>2023-02-23 11:52:48 +0000
commit8b1e20c164e11689894ca605735541fad9aea3b1 (patch)
tree69f9eae106c715c844eb23e352a00849adc86142 /desktop
parent67fcd647341118747a4e7cd404d907d29613778c (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.cxx48
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