Blame SOURCES/0001-request-installation-of-langpack-via-packagekit.patch

55db36
From 44686bc81055c7bee7f41f9e219c35115ce8119f Mon Sep 17 00:00:00 2001
55db36
From: =?UTF-8?q?Caol=C3=A1n=20McNamara?= <caolanm@redhat.com>
55db36
Date: Wed, 20 Dec 2017 15:29:39 +0000
55db36
Subject: [PATCH] request installation of langpack via packagekit
55db36
MIME-Version: 1.0
55db36
Content-Type: text/plain; charset=UTF-8
55db36
Content-Transfer-Encoding: 8bit
55db36
55db36
if ui is set to track the locale automatically and the current locale
55db36
has no match in installed resources but has a match in the list of
55db36
languages that libreoffice was compiled to contain
55db36
55db36
so e.g. de_AT locale shouldn't trigger the installation of anything if
55db36
langpack-de is already installed and yue_HK shouldn't trigger install
55db36
of anything cause that not supported (at time of writing) for libreoffice
55db36
55db36
put Fedora/RHEL/Ubuntu naming schemes in here.
55db36
55db36
I moved the lang code from svl to svtools so I could use the restart dialog
55db36
to prompt to restart after the langpack is installed, but packagekit's blocking
55db36
mode seems to be no longer blocking and control returns immediately which is a
55db36
change since the last time I played with this stuff, so drop the restart thing
55db36
for now. The lack of a blocking modal also makes the "run this on idle when there's
55db36
a toplevel window up and running" a bit futile, but lets keep that for now anyway.
55db36
55db36
also...
55db36
55db36
set dbus id for existing DbusSessionHelper users
55db36
55db36
Change-Id: I64329e21ae79b6607856de9781bee0274b9cb136
55db36
Reviewed-on: https://gerrit.libreoffice.org/46854
55db36
Tested-by: Jenkins <ci@libreoffice.org>
55db36
Reviewed-by: Caolán McNamara <caolanm@redhat.com>
55db36
Tested-by: Caolán McNamara <caolanm@redhat.com>
55db36
(cherry picked from commit 7cf4eeed81fd333c87dedffa792f5d547b7981f0)
55db36
55db36
Change-Id: Ice731be539850338ccdd8af87839e0b4d83f01e7
55db36
---
55db36
 config_host/config_langs.h.in                      |  10 ++
55db36
 config_host/config_vendor.h.in                     |  10 ++
55db36
 configure.ac                                       |   4 +
55db36
 cui/source/options/optgdlg.cxx                     |   3 +-
55db36
 desktop/source/app/langselect.cxx                  |   3 +-
55db36
 include/svl/languageoptions.hxx                    |   3 -
55db36
 include/svtools/langhelp.hxx                       |   3 +
55db36
 offapi/org/freedesktop/PackageKit/XModify.idl      |  22 ++--
55db36
 .../registry/data/org/openoffice/Office/Common.xcu |   3 +
55db36
 .../schema/org/openoffice/Office/Common.xcs        |   6 +
55db36
 sfx2/source/appl/appserv.cxx                       |   3 +-
55db36
 .../sessioninstall/SyncDbusSessionHelper.cxx       |  57 +++++----
55db36
 .../sessioninstall/SyncDbusSessionHelper.hxx       |  20 ++--
55db36
 svl/source/config/languageoptions.cxx              |  33 ------
55db36
 svtools/source/misc/langhelp.cxx                   | 130 ++++++++++++++++++++-
55db36
 sw/source/uibase/app/apphdl.cxx                    |   3 +-
55db36
 vcl/inc/unx/fontmanager.hxx                        |   6 +-
55db36
 vcl/unx/generic/fontmanager/fontconfig.cxx         |  93 ++-------------
55db36
 vcl/unx/generic/fontmanager/fontmanager.cxx        |   2 -
55db36
 19 files changed, 235 insertions(+), 179 deletions(-)
55db36
 create mode 100644 config_host/config_langs.h.in
55db36
 create mode 100644 config_host/config_vendor.h.in
55db36
55db36
diff --git a/config_host/config_langs.h.in b/config_host/config_langs.h.in
55db36
new file mode 100644
55db36
index 0000000..d60a5c1
55db36
--- /dev/null
55db36
+++ b/config_host/config_langs.h.in
55db36
@@ -0,0 +1,10 @@
55db36
+/* Configuration of restriction on supported ui languages, by the
55db36
+ * --with-lang option.
55db36
+ */
55db36
+
55db36
+#ifndef CONFIG_LANGS_H
55db36
+#define CONFIG_LANGS_H
55db36
+
55db36
+#define WITH_LANG ""
55db36
+
55db36
+#endif
55db36
diff --git a/config_host/config_vendor.h.in b/config_host/config_vendor.h.in
55db36
new file mode 100644
55db36
index 0000000..3260221
55db36
--- /dev/null
55db36
+++ b/config_host/config_vendor.h.in
55db36
@@ -0,0 +1,10 @@
55db36
+/* Configuration of restriction on supported ui languages, by the
55db36
+ * --with-lang option.
55db36
+ */
55db36
+
55db36
+#ifndef CONFIG_VENDOR_H
55db36
+#define CONFIG_VENDOR_H
55db36
+
55db36
+#define OOO_VENDOR ""
55db36
+
55db36
+#endif
55db36
diff --git a/configure.ac b/configure.ac
55db36
index bbb47e6..55e2aa0 100644
55db36
--- a/configure.ac
55db36
+++ b/configure.ac
55db36
@@ -11777,6 +11777,7 @@ if test "$enable_release_build" = "" -o "$enable_release_build" = "no"; then
55db36
     ALL_LANGS=`echo $ALL_LANGS qtz`
55db36
 fi
55db36
 AC_SUBST(ALL_LANGS)
55db36
+AC_DEFINE_UNQUOTED(WITH_LANG,"$WITH_LANG")
55db36
 AC_SUBST(WITH_LANG)
55db36
 AC_SUBST(WITH_LANG_LIST)
55db36
 AC_SUBST(GIT_NEEDED_SUBMODULES)
55db36
@@ -11925,6 +11926,7 @@ else
55db36
     OOO_VENDOR="$with_vendor"
55db36
     AC_MSG_RESULT([$OOO_VENDOR])
55db36
 fi
55db36
+AC_DEFINE_UNQUOTED(OOO_VENDOR,"$OOO_VENDOR")
55db36
 AC_SUBST(OOO_VENDOR)
55db36
 
55db36
 if test "$_os" = "Android" ; then
55db36
@@ -12538,6 +12540,7 @@ AC_CONFIG_HEADERS([config_host/config_gio.h])
55db36
 AC_CONFIG_HEADERS([config_host/config_global.h])
55db36
 AC_CONFIG_HEADERS([config_host/config_gpgme.h])
55db36
 AC_CONFIG_HEADERS([config_host/config_java.h])
55db36
+AC_CONFIG_HEADERS([config_host/config_langs.h])
55db36
 AC_CONFIG_HEADERS([config_host/config_lgpl.h])
55db36
 AC_CONFIG_HEADERS([config_host/config_liblangtag.h])
55db36
 AC_CONFIG_HEADERS([config_host/config_locales.h])
55db36
@@ -12549,6 +12552,7 @@ AC_CONFIG_HEADERS([config_host/config_options.h])
55db36
 AC_CONFIG_HEADERS([config_host/config_options_calc.h])
55db36
 AC_CONFIG_HEADERS([config_host/config_test.h])
55db36
 AC_CONFIG_HEADERS([config_host/config_typesizes.h])
55db36
+AC_CONFIG_HEADERS([config_host/config_vendor.h])
55db36
 AC_CONFIG_HEADERS([config_host/config_vcl.h])
55db36
 AC_CONFIG_HEADERS([config_host/config_vclplug.h])
55db36
 AC_CONFIG_HEADERS([config_host/config_version.h])
55db36
diff --git a/cui/source/options/optgdlg.cxx b/cui/source/options/optgdlg.cxx
55db36
index 1c90931..7965179 100644
55db36
--- a/cui/source/options/optgdlg.cxx
55db36
+++ b/cui/source/options/optgdlg.cxx
55db36
@@ -21,6 +21,7 @@
55db36
 #include <svl/zforlist.hxx>
55db36
 #include <svl/currencytable.hxx>
55db36
 #include <svtools/grfmgr.hxx>
55db36
+#include <svtools/langhelp.hxx>
55db36
 #include <svl/flagitem.hxx>
55db36
 #include <sfx2/dispatch.hxx>
55db36
 #include <unotools/lingucfg.hxx>
55db36
@@ -1122,7 +1123,7 @@ namespace
55db36
     LanguageTag GetInstalledLocaleForSystemUILanguage()
55db36
     {
55db36
         css::uno::Sequence<OUString> inst(officecfg::Setup::Office::InstalledLocales::get()->getElementNames());
55db36
-        return LanguageTag(getInstalledLocaleForSystemUILanguage(inst)).makeFallback();
55db36
+        return LanguageTag(getInstalledLocaleForSystemUILanguage(inst, false)).makeFallback();
55db36
     }
55db36
 }
55db36
 
55db36
diff --git a/desktop/source/app/langselect.cxx b/desktop/source/app/langselect.cxx
55db36
index 4ce877a..86ce743 100644
55db36
--- a/desktop/source/app/langselect.cxx
55db36
+++ b/desktop/source/app/langselect.cxx
55db36
@@ -37,6 +37,7 @@
55db36
 #include <sal/log.hxx>
55db36
 #include <sal/types.h>
55db36
 #include <svl/languageoptions.hxx>
55db36
+#include <svtools/langhelp.hxx>
55db36
 
55db36
 #include <app.hxx>
55db36
 
55db36
@@ -103,7 +104,7 @@ bool prepareLocale() {
55db36
         }
55db36
     }
55db36
     if (locale.isEmpty()) {
55db36
-        locale = getInstalledLocaleForSystemUILanguage(inst);
55db36
+        locale = getInstalledLocaleForSystemUILanguage(inst, true);
55db36
     }
55db36
     if (locale.isEmpty()) {
55db36
         return false;
55db36
diff --git a/include/svl/languageoptions.hxx b/include/svl/languageoptions.hxx
55db36
index f386cb6..6de8eb5 100644
55db36
--- a/include/svl/languageoptions.hxx
55db36
+++ b/include/svl/languageoptions.hxx
55db36
@@ -131,9 +131,6 @@ public:
55db36
     bool            isCJKKeyboardLayoutInstalled() const;
55db36
 };
55db36
 
55db36
-OUString SVL_DLLPUBLIC getInstalledLocaleForLanguage(css::uno::Sequence<OUString> const & installed, OUString const & locale);
55db36
-OUString SVL_DLLPUBLIC getInstalledLocaleForSystemUILanguage(css::uno::Sequence<OUString> const & installed);
55db36
-
55db36
 #endif // INCLUDED_SVL_LANGUAGEOPTIONS_HXX
55db36
 
55db36
 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
55db36
diff --git a/include/svtools/langhelp.hxx b/include/svtools/langhelp.hxx
55db36
index a3a84df..db22bb3 100644
55db36
--- a/include/svtools/langhelp.hxx
55db36
+++ b/include/svtools/langhelp.hxx
55db36
@@ -22,6 +22,9 @@
55db36
  */
55db36
 SVT_DLLPUBLIC void localizeWebserviceURI( OUString& io_rURI );
55db36
 
55db36
+OUString SVT_DLLPUBLIC getInstalledLocaleForLanguage(css::uno::Sequence<OUString> const & installed, OUString const & locale);
55db36
+OUString SVT_DLLPUBLIC getInstalledLocaleForSystemUILanguage(css::uno::Sequence<OUString> const & installed, bool bRequestInstallIfMissing);
55db36
+
55db36
 #endif
55db36
 
55db36
 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
55db36
diff --git a/offapi/org/freedesktop/PackageKit/XModify.idl b/offapi/org/freedesktop/PackageKit/XModify.idl
55db36
index a712bb5..69544e9 100644
55db36
--- a/offapi/org/freedesktop/PackageKit/XModify.idl
55db36
+++ b/offapi/org/freedesktop/PackageKit/XModify.idl
55db36
@@ -22,7 +22,7 @@ module PackageKit
55db36
  *  The interface used for modifying the package database.
55db36
  *
55db36
  * @sa
55db36
- * https://git.gnome.org/browse/gnome-software/tree/src/org.freedesktop.PackageKit.xml
55db36
+ * https://git.gnome.org/browse/gnome-software/tree/src/org.freedesktop.PackageKit.Modify2.xml
55db36
  * for documentation of the corresponding D-Bus interface
55db36
  */
55db36
 interface XModify : com::sun::star::uno::XInterface
55db36
@@ -32,70 +32,70 @@ interface XModify : com::sun::star::uno::XInterface
55db36
      * @since LibreOffice 4.0
55db36
      */
55db36
 
55db36
-    void InstallPackageFiles( [in] unsigned long xid, [in] sequence< string > files, [in] string interaction);
55db36
+    void InstallPackageFiles([in] sequence< string > files, [in] string interaction);
55db36
 
55db36
     /**
55db36
      * Installs sequence< string > packages to provide sequence< string > files.
55db36
      * @since LibreOffice 4.0
55db36
      */
55db36
 
55db36
-    void InstallProvideFiles( [in] unsigned long xid, [in] sequence< string > files, [in] string interaction);
55db36
+    void InstallProvideFiles([in] sequence< string > files, [in] string interaction);
55db36
 
55db36
     /**
55db36
      * Installs sequence< string > packages to provide sequence< string > files.
55db36
      * @since LibreOffice 4.0
55db36
      */
55db36
 
55db36
-    void InstallCatalogs( [in] unsigned long xid, [in] sequence< string > files, [in] string interaction);
55db36
+    void InstallCatalogs([in] sequence< string > files, [in] string interaction);
55db36
 
55db36
     /**
55db36
      * Installs sequence< string > packages from a configured software source.
55db36
      * @since LibreOffice 4.0
55db36
      */
55db36
 
55db36
-    void InstallPackageNames( [in] unsigned long xid, [in] sequence< string > packages, [in] string interaction);
55db36
+    void InstallPackageNames([in] sequence< string > packages, [in] string interaction);
55db36
 
55db36
     /**
55db36
      * Installs mimetype handlers from a configured software source.
55db36
      * @since LibreOffice 4.0
55db36
      */
55db36
 
55db36
-    void InstallMimeTypes( [in] unsigned long xid, [in] sequence< string > mimeTypes, [in] string interaction);
55db36
+    void InstallMimeTypes([in] sequence< string > mimeTypes, [in] string interaction);
55db36
 
55db36
     /**
55db36
      * Installs fontconfig resources ( [in] usually fonts) from a configured software source.
55db36
      * @since LibreOffice 4.0
55db36
      */
55db36
 
55db36
-    void InstallFontconfigResources( [in] unsigned long xid, [in] sequence< string > resources, [in] string interaction);
55db36
+    void InstallFontconfigResources([in] sequence< string > resources, [in] string interaction);
55db36
 
55db36
     /**
55db36
      * Installs GStreamer resources ( [in] usually codecs) from a configured software source.
55db36
      * @since LibreOffice 4.0
55db36
      */
55db36
 
55db36
-    void InstallGStreamerResources( [in] unsigned long xid, [in] sequence< string > resources, [in] string interaction);
55db36
+    void InstallGStreamerResources([in] sequence< string > resources, [in] string interaction);
55db36
 
55db36
     /**
55db36
      * Installs resources of a given type from a configured software source.
55db36
      * @since LibreOffice 4.0
55db36
      */
55db36
 
55db36
-    void InstallResources( [in] unsigned long xid, [in] sequence< string > types, [in] sequence< string > resources, [in] string interaction);
55db36
+    void InstallResources([in] sequence< string > types, [in] sequence< string > resources, [in] string interaction);
55db36
 
55db36
     /**
55db36
      * Removes sequence< string > packages that provide the given local sequence< string > files.
55db36
      * @since LibreOffice 4.0
55db36
      */
55db36
 
55db36
-    void RemovePackageByFiles( [in] unsigned long xid, [in] sequence< string > files, [in] string interaction);
55db36
+    void RemovePackageByFiles([in] sequence< string > files, [in] string interaction);
55db36
 
55db36
     /**
55db36
      * Installs printer drivers from a configured software source.
55db36
      * @since LibreOffice 4.0
55db36
      */
55db36
 
55db36
-    void InstallPrinterDrivers( [in] unsigned long xid, [in] sequence< string > files, [in] string interaction);
55db36
+    void InstallPrinterDrivers([in] sequence< string > files, [in] string interaction);
55db36
 };
55db36
 
55db36
 } ; // PackageKit
55db36
diff --git a/officecfg/registry/data/org/openoffice/Office/Common.xcu b/officecfg/registry/data/org/openoffice/Office/Common.xcu
55db36
index 6b94ff9..26d1ba0 100644
55db36
--- a/officecfg/registry/data/org/openoffice/Office/Common.xcu
55db36
+++ b/officecfg/registry/data/org/openoffice/Office/Common.xcu
55db36
@@ -535,6 +535,9 @@
55db36
       <prop oor:name="EnableFontInstallation" oor:type="xs:boolean">
55db36
         <value install:module="unx">true</value>
55db36
       </prop>
55db36
+      <prop oor:name="EnableLangpackInstallation" oor:type="xs:boolean">
55db36
+        <value install:module="unx">true</value>
55db36
+      </prop>
55db36
   </node>
55db36
   <node oor:name="Classification">
55db36
       <prop oor:name="Policy" oor:type="xs:short">
55db36
diff --git a/officecfg/registry/schema/org/openoffice/Office/Common.xcs b/officecfg/registry/schema/org/openoffice/Office/Common.xcs
55db36
index f9816fc..2884179 100644
55db36
--- a/officecfg/registry/schema/org/openoffice/Office/Common.xcs
55db36
+++ b/officecfg/registry/schema/org/openoffice/Office/Common.xcs
55db36
@@ -6382,6 +6382,12 @@
55db36
         </info>
55db36
         <value>true</value>
55db36
       </prop>
55db36
+      <prop oor:name="EnableLangpackInstallation" oor:type="xs:boolean" oor:nillable="false">
55db36
+        <info>
55db36
+           <desc>Specifies if missing langpack installation should be triggered.</desc>
55db36
+        </info>
55db36
+        <value>true</value>
55db36
+      </prop>
55db36
     </group>
55db36
     <group oor:name="Classification">
55db36
       <info>
55db36
diff --git a/sfx2/source/appl/appserv.cxx b/sfx2/source/appl/appserv.cxx
55db36
index 1e2a2ec..e48e5aa 100644
55db36
--- a/sfx2/source/appl/appserv.cxx
55db36
+++ b/sfx2/source/appl/appserv.cxx
55db36
@@ -59,6 +59,7 @@
55db36
 #include <unotools/configmgr.hxx>
55db36
 #include <tools/diagnose_ex.h>
55db36
 #include <vcl/layout.hxx>
55db36
+#include <vcl/sysdata.hxx>
55db36
 #include <svl/intitem.hxx>
55db36
 #include <svl/eitem.hxx>
55db36
 #include <svl/stritem.hxx>
55db36
@@ -196,7 +197,7 @@ namespace
55db36
                 using namespace svtools;
55db36
                 Reference< XSyncDbusSessionHelper > xSyncDbusSessionHelper(SyncDbusSessionHelper::create(comphelper::getProcessComponentContext()));
55db36
                 Sequence< OUString > vPackages { "libreoffice-base" };
55db36
-                xSyncDbusSessionHelper->InstallPackageNames(0, vPackages, OUString());
55db36
+                xSyncDbusSessionHelper->InstallPackageNames(vPackages, OUString());
55db36
                 // Ill be back (hopefully)!
55db36
                 SolarMutexGuard aGuard;
55db36
                 executeRestartDialog(comphelper::getProcessComponentContext(), nullptr, RESTART_REASON_BIBLIOGRAPHY_INSTALL);
55db36
diff --git a/shell/source/sessioninstall/SyncDbusSessionHelper.cxx b/shell/source/sessioninstall/SyncDbusSessionHelper.cxx
55db36
index a1211f7..1938077 100644
55db36
--- a/shell/source/sessioninstall/SyncDbusSessionHelper.cxx
55db36
+++ b/shell/source/sessioninstall/SyncDbusSessionHelper.cxx
55db36
@@ -18,7 +18,7 @@ using namespace ::com::sun::star::uno;
55db36
 
55db36
 namespace
55db36
 {
55db36
-    struct GVariantDeleter { void operator()(GVariant* pV) { g_variant_unref(pV); } };
55db36
+    struct GVariantDeleter { void operator()(GVariant* pV) { if (pV) g_variant_unref(pV); } };
55db36
     struct GVariantBuilderDeleter { void operator()(GVariantBuilder* pVB) { g_variant_builder_unref(pVB); } };
55db36
     template <typename T> struct GObjectDeleter { void operator()(T* pO) { g_object_unref(pO); } };
55db36
     class GErrorWrapper
55db36
@@ -55,8 +55,15 @@ namespace
55db36
         return proxy;
55db36
     }
55db36
 
55db36
+    static GVariant* pk_make_platform_data()
55db36
+    {
55db36
+        GVariantBuilder builder;
55db36
+        g_variant_builder_init(&builder, G_VARIANT_TYPE("a{sv}"));
55db36
+        return g_variant_builder_end(&builder);
55db36
+    }
55db36
+
55db36
 void request(
55db36
-    char const * method, sal_uInt32 xid,
55db36
+    char const * method,
55db36
     css::uno::Sequence<OUString> const & resources,
55db36
     OUString const & interaction)
55db36
 {
55db36
@@ -70,14 +77,14 @@ void request(
55db36
     }
55db36
     auto iactUtf8(OUStringToOString(interaction, RTL_TEXTENCODING_UTF8));
55db36
     std::shared_ptr<GDBusProxy> proxy(
55db36
-        lcl_GetPackageKitProxy("Modify"), GObjectDeleter<GDBusProxy>());
55db36
+        lcl_GetPackageKitProxy("Modify2"), GObjectDeleter<GDBusProxy>());
55db36
     GErrorWrapper error;
55db36
-    g_dbus_proxy_call_sync(
55db36
+    std::shared_ptr<GVariant> result(g_dbus_proxy_call_sync(
55db36
         proxy.get(), method,
55db36
         g_variant_new(
55db36
-            "(uass)", static_cast<guint32>(xid), builder.get(),
55db36
-            iactUtf8.getStr()),
55db36
-        G_DBUS_CALL_FLAGS_NONE, -1, nullptr, &error.getRef());
55db36
+            "(asss@a{sv})", builder.get(), iactUtf8.getStr(),
55db36
+            "libreoffice-startcenter.desktop", pk_make_platform_data()),
55db36
+        G_DBUS_CALL_FLAGS_NONE, -1, nullptr, &error.getRef()), GVariantDeleter());
55db36
 }
55db36
 
55db36
 }
55db36
@@ -92,66 +99,66 @@ namespace shell { namespace sessioninstall
55db36
     }
55db36
 
55db36
 void SyncDbusSessionHelper::InstallPackageFiles(
55db36
-    sal_uInt32 xid, css::uno::Sequence<OUString> const & files,
55db36
+    css::uno::Sequence<OUString> const & files,
55db36
     OUString const & interaction)
55db36
 {
55db36
-    request("InstallPackageFiles", xid, files, interaction);
55db36
+    request("InstallPackageFiles", files, interaction);
55db36
 }
55db36
 
55db36
 void SyncDbusSessionHelper::InstallProvideFiles(
55db36
-    sal_uInt32 xid, css::uno::Sequence<OUString> const & files,
55db36
+    css::uno::Sequence<OUString> const & files,
55db36
     OUString const & interaction)
55db36
 {
55db36
-    request("InstallProvideFiles", xid, files, interaction);
55db36
+    request("InstallProvideFiles", files, interaction);
55db36
 }
55db36
 
55db36
 void SyncDbusSessionHelper::InstallCatalogs(
55db36
-    sal_uInt32 xid, css::uno::Sequence<OUString> const & files,
55db36
+    css::uno::Sequence<OUString> const & files,
55db36
     OUString const & interaction)
55db36
 {
55db36
-    request("InstallCatalogs", xid, files, interaction);
55db36
+    request("InstallCatalogs", files, interaction);
55db36
 }
55db36
 
55db36
 void SyncDbusSessionHelper::InstallPackageNames(
55db36
-    sal_uInt32 xid, css::uno::Sequence<OUString> const & packages,
55db36
+    css::uno::Sequence<OUString> const & packages,
55db36
     OUString const & interaction)
55db36
 {
55db36
-    request("InstallPackageNames", xid, packages, interaction);
55db36
+    request("InstallPackageNames", packages, interaction);
55db36
 }
55db36
 
55db36
 void SyncDbusSessionHelper::InstallMimeTypes(
55db36
-    sal_uInt32 xid, css::uno::Sequence<OUString> const & mimeTypes,
55db36
+    css::uno::Sequence<OUString> const & mimeTypes,
55db36
     OUString const & interaction)
55db36
 {
55db36
-    request("InstallMimeTypes", xid, mimeTypes, interaction);
55db36
+    request("InstallMimeTypes", mimeTypes, interaction);
55db36
 }
55db36
 
55db36
 void SyncDbusSessionHelper::InstallFontconfigResources(
55db36
-    sal_uInt32 xid, css::uno::Sequence<OUString> const & resources,
55db36
+    css::uno::Sequence<OUString> const & resources,
55db36
     OUString const & interaction)
55db36
 {
55db36
-    request("InstallFontconfigResources", xid, resources, interaction);
55db36
+    request("InstallFontconfigResources", resources, interaction);
55db36
 }
55db36
 
55db36
 void SyncDbusSessionHelper::InstallGStreamerResources(
55db36
-    sal_uInt32 xid, css::uno::Sequence<OUString> const & resources,
55db36
+    css::uno::Sequence<OUString> const & resources,
55db36
     OUString const & interaction)
55db36
 {
55db36
-    request("InstallGStreamerResources", xid, resources, interaction);
55db36
+    request("InstallGStreamerResources", resources, interaction);
55db36
 }
55db36
 
55db36
 void SyncDbusSessionHelper::RemovePackageByFiles(
55db36
-    sal_uInt32 xid, css::uno::Sequence<OUString> const & files,
55db36
+    css::uno::Sequence<OUString> const & files,
55db36
     OUString const & interaction)
55db36
 {
55db36
-    request("RemovePackageByFiles", xid, files, interaction);
55db36
+    request("RemovePackageByFiles", files, interaction);
55db36
 }
55db36
 
55db36
 void SyncDbusSessionHelper::InstallPrinterDrivers(
55db36
-    sal_uInt32 xid, css::uno::Sequence<OUString> const & files,
55db36
+    css::uno::Sequence<OUString> const & files,
55db36
     OUString const & interaction)
55db36
 {
55db36
-    request("InstallPrinteDrivers", xid, files, interaction);
55db36
+    request("InstallPrinteDrivers", files, interaction);
55db36
 }
55db36
 
55db36
     void SAL_CALL SyncDbusSessionHelper::IsInstalled( const OUString& sPackagename, const OUString& sInteraction, sal_Bool& o_isInstalled )
55db36
diff --git a/shell/source/sessioninstall/SyncDbusSessionHelper.hxx b/shell/source/sessioninstall/SyncDbusSessionHelper.hxx
55db36
index 731b649..72b17ba 100644
55db36
--- a/shell/source/sessioninstall/SyncDbusSessionHelper.hxx
55db36
+++ b/shell/source/sessioninstall/SyncDbusSessionHelper.hxx
55db36
@@ -23,26 +23,26 @@ namespace shell { namespace sessioninstall
55db36
             SyncDbusSessionHelper(css::uno::Reference< css::uno::XComponentContext> const&);
55db36
 
55db36
             // XModify Methods
55db36
-            virtual void SAL_CALL InstallPackageFiles( ::sal_uInt32 xid, const css::uno::Sequence< OUString >& files, const OUString& interaction ) override;
55db36
+            virtual void SAL_CALL InstallPackageFiles( const css::uno::Sequence< OUString >& files, const OUString& interaction ) override;
55db36
 
55db36
-            virtual void SAL_CALL InstallProvideFiles( ::sal_uInt32 xid, const css::uno::Sequence< OUString >& files, const OUString& interaction ) override;
55db36
+            virtual void SAL_CALL InstallProvideFiles( const css::uno::Sequence< OUString >& files, const OUString& interaction ) override;
55db36
 
55db36
-            virtual void SAL_CALL InstallCatalogs( ::sal_uInt32 xid, const css::uno::Sequence< OUString >& files, const OUString& interaction ) override;
55db36
+            virtual void SAL_CALL InstallCatalogs( const css::uno::Sequence< OUString >& files, const OUString& interaction ) override;
55db36
 
55db36
-            virtual void SAL_CALL InstallPackageNames( ::sal_uInt32 xid, const css::uno::Sequence< OUString >& packages, const OUString& interaction ) override;
55db36
+            virtual void SAL_CALL InstallPackageNames( const css::uno::Sequence< OUString >& packages, const OUString& interaction ) override;
55db36
 
55db36
-            virtual void SAL_CALL InstallMimeTypes( ::sal_uInt32 xid, const css::uno::Sequence< OUString >& mimeTypes, const OUString& interaction ) override;
55db36
+            virtual void SAL_CALL InstallMimeTypes( const css::uno::Sequence< OUString >& mimeTypes, const OUString& interaction ) override;
55db36
 
55db36
-            virtual void SAL_CALL InstallFontconfigResources( ::sal_uInt32 xid, const css::uno::Sequence< OUString >& resources, const OUString& interaction ) override;
55db36
+            virtual void SAL_CALL InstallFontconfigResources( const css::uno::Sequence< OUString >& resources, const OUString& interaction ) override;
55db36
 
55db36
-            virtual void SAL_CALL InstallGStreamerResources( ::sal_uInt32 xid, const css::uno::Sequence< OUString >& resources, const OUString& interaction ) override;
55db36
+            virtual void SAL_CALL InstallGStreamerResources( const css::uno::Sequence< OUString >& resources, const OUString& interaction ) override;
55db36
 
55db36
-            virtual void SAL_CALL InstallResources( ::sal_uInt32 /* xid */, const css::uno::Sequence< OUString >& /* types */, const css::uno::Sequence< OUString >& /* resources */, const OUString& /* interaction */ ) override
55db36
+            virtual void SAL_CALL InstallResources( const css::uno::Sequence< OUString >& /* types */, const css::uno::Sequence< OUString >& /* resources */, const OUString& /* interaction */ ) override
55db36
                 { throw css::uno::RuntimeException(); } // not implemented
55db36
 
55db36
-            virtual void SAL_CALL RemovePackageByFiles( ::sal_uInt32 xid, const css::uno::Sequence< OUString >& files, const OUString& interaction ) override;
55db36
+            virtual void SAL_CALL RemovePackageByFiles( const css::uno::Sequence< OUString >& files, const OUString& interaction ) override;
55db36
 
55db36
-            virtual void SAL_CALL InstallPrinterDrivers( ::sal_uInt32 xid, const css::uno::Sequence< OUString >& files, const OUString& interaction ) override;
55db36
+            virtual void SAL_CALL InstallPrinterDrivers( const css::uno::Sequence< OUString >& files, const OUString& interaction ) override;
55db36
 
55db36
             // XQuery Methods
55db36
             virtual void SAL_CALL IsInstalled( const OUString& /* package_name */, const OUString& /* interaction */, sal_Bool& /* installed */ ) override;
55db36
diff --git a/svl/source/config/languageoptions.cxx b/svl/source/config/languageoptions.cxx
55db36
index 9f9fe45..74af031 100644
55db36
--- a/svl/source/config/languageoptions.cxx
55db36
+++ b/svl/source/config/languageoptions.cxx
55db36
@@ -27,7 +27,6 @@
55db36
 #include <rtl/instance.hxx>
55db36
 #include <com/sun/star/i18n/ScriptType.hpp>
55db36
 #include <unotools/syslocale.hxx>
55db36
-#include <officecfg/System.hxx>
55db36
 
55db36
 #ifdef _WIN32
55db36
 #if !defined WIN32_LEAN_AND_MEAN
55db36
@@ -256,41 +255,9 @@ bool SvtSystemLanguageOptions::isKeyboardLayoutTypeInstalled(sal_Int16 scriptTyp
55db36
     return isInstalled;
55db36
 }
55db36
 
55db36
-
55db36
 bool SvtSystemLanguageOptions::isCJKKeyboardLayoutInstalled() const
55db36
 {
55db36
     return isKeyboardLayoutTypeInstalled(css::i18n::ScriptType::ASIAN);
55db36
 }
55db36
 
55db36
-OUString getInstalledLocaleForLanguage(css::uno::Sequence<OUString> const & installed, OUString const & locale)
55db36
-{
55db36
-    if (locale.isEmpty())
55db36
-        return OUString();  // do not attempt to resolve anything
55db36
-
55db36
-    for (sal_Int32 i = 0; i != installed.getLength(); ++i) {
55db36
-        if (installed[i] == locale) {
55db36
-            return installed[i];
55db36
-        }
55db36
-    }
55db36
-    std::vector<OUString> fallbacks(LanguageTag(locale).getFallbackStrings(false));
55db36
-    for (OUString & rf : fallbacks) {
55db36
-        for (sal_Int32 i = 0; i != installed.getLength(); ++i) {
55db36
-            if (installed[i] == rf) {
55db36
-                return installed[i];
55db36
-            }
55db36
-        }
55db36
-    }
55db36
-    return OUString();
55db36
-}
55db36
-
55db36
-OUString getInstalledLocaleForSystemUILanguage(const css::uno::Sequence<OUString>& rLocaleElementNames)
55db36
-{
55db36
-    OUString locale = getInstalledLocaleForLanguage(rLocaleElementNames, officecfg::System::L10N::UILocale::get());
55db36
-    if (locale.isEmpty())
55db36
-        locale = getInstalledLocaleForLanguage(rLocaleElementNames, "en-US");
55db36
-    if (locale.isEmpty() && rLocaleElementNames.hasElements())
55db36
-        locale = rLocaleElementNames[0];
55db36
-    return locale;
55db36
-}
55db36
-
55db36
 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
55db36
diff --git a/svtools/source/misc/langhelp.cxx b/svtools/source/misc/langhelp.cxx
55db36
index 16a3a1d..1e4c5c5 100644
55db36
--- a/svtools/source/misc/langhelp.cxx
55db36
+++ b/svtools/source/misc/langhelp.cxx
55db36
@@ -7,12 +7,20 @@
55db36
  * file, You can obtain one at http://mozilla.org/MPL/2.0/.
55db36
  */
55db36
 
55db36
-
55db36
+#include <comphelper/sequence.hxx>
55db36
+#include <i18nlangtag/mslangid.hxx>
55db36
+#include <officecfg/Office/Common.hxx>
55db36
+#include <officecfg/System.hxx>
55db36
+#include <org/freedesktop/PackageKit/SyncDbusSessionHelper.hpp>
55db36
+#include <rtl/ustring.hxx>
55db36
 #include <svtools/langhelp.hxx>
55db36
-
55db36
+#include <vcl/idle.hxx>
55db36
 #include <vcl/svapp.hxx>
55db36
+#include <vcl/sysdata.hxx>
55db36
 #include <vcl/settings.hxx>
55db36
-#include <rtl/ustring.hxx>
55db36
+#include <vcl/window.hxx>
55db36
+#include <config_langs.h>
55db36
+#include <config_vendor.h>
55db36
 
55db36
 void localizeWebserviceURI( OUString& rURI )
55db36
 {
55db36
@@ -33,4 +41,120 @@ void localizeWebserviceURI( OUString& rURI )
55db36
     rURI += aLang;
55db36
 }
55db36
 
55db36
+OUString getInstalledLocaleForLanguage(css::uno::Sequence<OUString> const & installed, OUString const & locale)
55db36
+{
55db36
+    if (locale.isEmpty())
55db36
+        return OUString();  // do not attempt to resolve anything
55db36
+
55db36
+    for (sal_Int32 i = 0; i != installed.getLength(); ++i) {
55db36
+        if (installed[i] == locale) {
55db36
+            return installed[i];
55db36
+        }
55db36
+    }
55db36
+    std::vector<OUString> fallbacks(LanguageTag(locale).getFallbackStrings(false));
55db36
+    for (OUString & rf : fallbacks) {
55db36
+        for (sal_Int32 i = 0; i != installed.getLength(); ++i) {
55db36
+            if (installed[i] == rf) {
55db36
+                return installed[i];
55db36
+            }
55db36
+        }
55db36
+    }
55db36
+    return OUString();
55db36
+}
55db36
+
55db36
+static std::unique_ptr<Idle> xLangpackInstaller;
55db36
+
55db36
+class InstallLangpack : public Idle
55db36
+{
55db36
+    std::vector<OUString> m_aPackages;
55db36
+public:
55db36
+    explicit InstallLangpack(const std::vector<OUString>& rPackages)
55db36
+        : Idle("install langpack")
55db36
+        , m_aPackages(rPackages)
55db36
+    {
55db36
+        SetPriority(TaskPriority::LOWEST);
55db36
+    }
55db36
+
55db36
+    virtual void Invoke() override
55db36
+    {
55db36
+        vcl::Window* pTopWindow = Application::GetActiveTopWindow();
55db36
+        if (!pTopWindow)
55db36
+            pTopWindow = Application::GetFirstTopLevelWindow();
55db36
+        if (!pTopWindow)
55db36
+        {
55db36
+            Start();
55db36
+            return;
55db36
+        }
55db36
+        try
55db36
+        {
55db36
+            using namespace org::freedesktop::PackageKit;
55db36
+            css::uno::Reference<XSyncDbusSessionHelper> xSyncDbusSessionHelper(SyncDbusSessionHelper::create(comphelper::getProcessComponentContext()));
55db36
+            xSyncDbusSessionHelper->InstallPackageNames(comphelper::containerToSequence(m_aPackages), OUString());
55db36
+        }
55db36
+        catch (const css::uno::Exception& e)
55db36
+        {
55db36
+            SAL_INFO("svl", "trying to install a LibreOffice langpack, caught " << e);
55db36
+        }
55db36
+        xLangpackInstaller.reset();
55db36
+    }
55db36
+};
55db36
+
55db36
+OUString getInstalledLocaleForSystemUILanguage(const css::uno::Sequence<OUString>& rLocaleElementNames, bool bRequestInstallIfMissing)
55db36
+{
55db36
+    OUString wantedLocale = officecfg::System::L10N::UILocale::get();
55db36
+    OUString locale = getInstalledLocaleForLanguage(rLocaleElementNames, wantedLocale);
55db36
+    if (bRequestInstallIfMissing && locale.isEmpty() && !wantedLocale.isEmpty() && !Application::IsHeadlessModeEnabled() &&
55db36
+        officecfg::Office::Common::PackageKit::EnableLangpackInstallation::get())
55db36
+    {
55db36
+        LanguageTag aWantedTag(wantedLocale);
55db36
+        if (aWantedTag.getLanguage() != "en")
55db36
+        {
55db36
+            // We try these bases + the exact locale + fallback locale.
55db36
+            //
55db36
+            // The theory is that we can request a bunch of packages
55db36
+            // and it's a success if one of them is available
55db36
+            std::vector<OUString> aPackages;
55db36
+            OUString sAvailableLocales(WITH_LANG);
55db36
+            std::vector<OUString> aAvailable;
55db36
+            sal_Int32 nIndex = 0;
55db36
+            do
55db36
+            {
55db36
+                aAvailable.emplace_back(sAvailableLocales.getToken(0, ' ', nIndex));
55db36
+            }
55db36
+            while (nIndex >= 0);
55db36
+            OUString install = getInstalledLocaleForLanguage(comphelper::containerToSequence(aAvailable), wantedLocale);
55db36
+            if (!install.isEmpty() && install != "en-US")
55db36
+            {
55db36
+                if (strcmp(OOO_VENDOR, "Red Hat, Inc.") == 0 || strcmp(OOO_VENDOR, "The Fedora Project") == 0)
55db36
+                {
55db36
+                    // langpack is the typical Fedora/RHEL naming convention
55db36
+                    LanguageType eType = aWantedTag.getLanguageType();
55db36
+                    if (MsLangId::isSimplifiedChinese(eType))
55db36
+                        aPackages.emplace_back("libreoffice-langpack-zh-Hans");
55db36
+                    else if (MsLangId::isTraditionalChinese(eType))
55db36
+                        aPackages.emplace_back("libreoffice-langpack-zh-Hant");
55db36
+                    else
55db36
+                        aPackages.emplace_back("libreoffice-langpack-" + install);
55db36
+                }
55db36
+                //Debian would be: "The Document Foundation/Debian"
55db36
+                else if (strcmp(OOO_VENDOR, "The Document Foundation, Debian and Ubuntu") == 0)
55db36
+                {
55db36
+                    // l10n is the typical Debian/Ubuntu naming convention
55db36
+                    aPackages.emplace_back("libreoffice-l10n-" + install);
55db36
+                }
55db36
+            }
55db36
+            if (!aPackages.empty())
55db36
+            {
55db36
+                xLangpackInstaller.reset(new InstallLangpack(aPackages));
55db36
+                xLangpackInstaller->Start();
55db36
+            }
55db36
+        }
55db36
+    }
55db36
+    if (locale.isEmpty())
55db36
+        locale = getInstalledLocaleForLanguage(rLocaleElementNames, "en-US");
55db36
+    if (locale.isEmpty() && rLocaleElementNames.hasElements())
55db36
+        locale = rLocaleElementNames[0];
55db36
+    return locale;
55db36
+}
55db36
+
55db36
 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
55db36
diff --git a/sw/source/uibase/app/apphdl.cxx b/sw/source/uibase/app/apphdl.cxx
55db36
index 467112e..6986807 100644
55db36
--- a/sw/source/uibase/app/apphdl.cxx
55db36
+++ b/sw/source/uibase/app/apphdl.cxx
55db36
@@ -44,6 +44,7 @@
55db36
 #include <svl/ctloptions.hxx>
55db36
 #include <unotools/useroptions.hxx>
55db36
 #include <vcl/msgbox.hxx>
55db36
+#include <vcl/sysdata.hxx>
55db36
 #include <vcl/wrkwin.hxx>
55db36
 #include <svx/insctrl.hxx>
55db36
 #include <svx/selctrl.hxx>
55db36
@@ -420,7 +421,7 @@ void SwMailMergeWizardExecutor::ExecuteMailMergeWizard( const SfxItemSet * pArgs
55db36
             using namespace svtools;
55db36
             css::uno::Reference< XSyncDbusSessionHelper > xSyncDbusSessionHelper(SyncDbusSessionHelper::create(comphelper::getProcessComponentContext()));
55db36
             const css::uno::Sequence< OUString > vPackages{ "libreoffice-base" };
55db36
-            xSyncDbusSessionHelper->InstallPackageNames(0, vPackages, OUString());
55db36
+            xSyncDbusSessionHelper->InstallPackageNames(vPackages, OUString());
55db36
             SolarMutexGuard aGuard;
55db36
             executeRestartDialog(comphelper::getProcessComponentContext(), nullptr, RESTART_REASON_MAILMERGE_INSTALL);
55db36
         }
55db36
diff --git a/vcl/inc/unx/fontmanager.hxx b/vcl/inc/unx/fontmanager.hxx
55db36
index 03d033e..14aebde 100644
55db36
--- a/vcl/inc/unx/fontmanager.hxx
55db36
+++ b/vcl/inc/unx/fontmanager.hxx
55db36
@@ -192,14 +192,10 @@ class VCL_PLUGIN_PUBLIC PrintFontManager
55db36
     static void addFontconfigDir(const OString& rDirectory);
55db36
 
55db36
     std::set<OString> m_aPreviousLangSupportRequests;
55db36
-#if ENABLE_GIO
55db36
-    std::vector<OString> m_aCurrentRequests;
55db36
-#endif
55db36
+    std::vector<OUString> m_aCurrentRequests;
55db36
     Timer m_aFontInstallerTimer;
55db36
 
55db36
-#if ENABLE_GIO
55db36
     DECL_LINK( autoInstallFontLangSupport, Timer*, void );
55db36
-#endif
55db36
     PrintFontManager();
55db36
 public:
55db36
     ~PrintFontManager();
55db36
diff --git a/vcl/unx/generic/fontmanager/fontconfig.cxx b/vcl/unx/generic/fontmanager/fontconfig.cxx
55db36
index 2c16e04..59acfa5 100644
55db36
--- a/vcl/unx/generic/fontmanager/fontconfig.cxx
55db36
+++ b/vcl/unx/generic/fontmanager/fontconfig.cxx
55db36
@@ -20,6 +20,7 @@
55db36
 #include <memory>
55db36
 #include <unx/fontmanager.hxx>
55db36
 #include <impfont.hxx>
55db36
+#include <comphelper/sequence.hxx>
55db36
 #include <vcl/svapp.hxx>
55db36
 #include <vcl/sysdata.hxx>
55db36
 #include <vcl/vclenum.hxx>
55db36
@@ -31,8 +32,8 @@
55db36
 #include <rtl/strbuf.hxx>
55db36
 #include <unicode/uchar.h>
55db36
 #include <unicode/uscript.h>
55db36
-#include <config_gio.h>
55db36
 #include <officecfg/Office/Common.hxx>
55db36
+#include <org/freedesktop/PackageKit/SyncDbusSessionHelper.hpp>
55db36
 
55db36
 using namespace psp;
55db36
 
55db36
@@ -40,10 +41,6 @@ using namespace psp;
55db36
 #include <ft2build.h>
55db36
 #include <fontconfig/fcfreetype.h>
55db36
 
55db36
-#if ENABLE_GIO
55db36
-#include <gio/gio.h>
55db36
-#endif
55db36
-
55db36
 #include <cstdio>
55db36
 #include <cstdarg>
55db36
 
55db36
@@ -862,96 +859,28 @@ namespace
55db36
             aBuf.append('-').append(pScriptCode);
55db36
         return OStringToOUString(aBuf.makeStringAndClear(), RTL_TEXTENCODING_UTF8);
55db36
     }
55db36
-
55db36
-#if ENABLE_GIO
55db36
-    guint get_xid_for_dbus()
55db36
-    {
55db36
-        // FIXME: Application::GetActiveTopWindow only returns something sensible if LO currently has the focus
55db36
-        // (which is not the case when you are trying to debug this...). It should instead return the last active window.
55db36
-        const vcl::Window *pTopWindow = Application::IsHeadlessModeEnabled() ? nullptr : Application::GetActiveTopWindow();
55db36
-        const SystemEnvData* pEnvData = pTopWindow ? pTopWindow->GetSystemData() : nullptr;
55db36
-        return pEnvData ? pEnvData->aWindow : 0;
55db36
-    }
55db36
-#endif
55db36
 }
55db36
 
55db36
-#if ENABLE_GIO
55db36
 IMPL_LINK_NOARG(PrintFontManager, autoInstallFontLangSupport, Timer *, void)
55db36
 {
55db36
-    if (!officecfg::Office::Common::PackageKit::EnableFontInstallation::get())
55db36
-        return;
55db36
-
55db36
-    guint xid = get_xid_for_dbus();
55db36
-
55db36
-    if (!xid)
55db36
+    try
55db36
     {
55db36
-        SAL_WARN("vcl", "Could not retrieve X Window ID for DBUS");
55db36
-        return;
55db36
+        using namespace org::freedesktop::PackageKit;
55db36
+        css::uno::Reference<XSyncDbusSessionHelper> xSyncDbusSessionHelper(SyncDbusSessionHelper::create(comphelper::getProcessComponentContext()));
55db36
+        xSyncDbusSessionHelper->InstallFontconfigResources(comphelper::containerToSequence(m_aCurrentRequests), "hide-finished");
55db36
     }
55db36
-
55db36
-
55db36
-    GError *error = nullptr;
55db36
-    /* get the DBUS session connection */
55db36
-    GDBusConnection *session_connection = g_bus_get_sync(G_BUS_TYPE_SESSION, nullptr, &error);
55db36
-    if (error != nullptr)
55db36
-    {
55db36
-        g_debug ("DBUS cannot connect : %s", error->message);
55db36
-        g_error_free (error);
55db36
-        return;
55db36
-    }
55db36
-
55db36
-    /* get the proxy with gnome-session-manager */
55db36
-    GDBusProxy *proxy = g_dbus_proxy_new_sync(session_connection,
55db36
-                                              G_DBUS_PROXY_FLAGS_NONE,
55db36
-                                              nullptr, // GDBusInterfaceInfo
55db36
-                                              "org.freedesktop.PackageKit",
55db36
-                                              "/org/freedesktop/PackageKit",
55db36
-                                              "org.freedesktop.PackageKit.Modify",
55db36
-                                              nullptr, // GCancellable
55db36
-                                              &error);
55db36
-    if (proxy == nullptr && error != nullptr)
55db36
-    {
55db36
-        g_debug("Could not get DBUS proxy: org.freedesktop.PackageKit: %s", error->message);
55db36
-        g_error_free(error);
55db36
-        return;
55db36
-    }
55db36
-
55db36
-    GVariantBuilder *builder = g_variant_builder_new (G_VARIANT_TYPE("as")); // 'as'=array of strings
55db36
-    for (std::vector<OString>::const_iterator aI = m_aCurrentRequests.begin(); aI != m_aCurrentRequests.end(); ++aI)
55db36
-        g_variant_builder_add (builder, "s", aI->getStr());
55db36
-
55db36
-    GVariant *res = g_dbus_proxy_call_sync(proxy,
55db36
-                                     "InstallFontconfigResources",
55db36
-                                     // Create a new variant with the following types:
55db36
-                                     //   'u'=guint32 (xid); 'as'=array of strings (builder); 's'=string ("hide-finished")
55db36
-                                     // See also https://people.gnome.org/~ryanl/glib-docs/gvariant-format-strings.html
55db36
-                                     g_variant_new("(uass)", xid, builder, "hide-finished"),
55db36
-                                     G_DBUS_CALL_FLAGS_NONE,
55db36
-                                     -1, // Timeout
55db36
-                                     nullptr, // GCancellable
55db36
-                                     &error);
55db36
-
55db36
-    if (res == nullptr && error != nullptr)
55db36
+    catch (const css::uno::Exception& e)
55db36
     {
55db36
+        SAL_INFO("vcl", "InstallFontconfigResources problem, caught " << e);
55db36
         // Disable this method from now on. It's simply not available on some systems
55db36
         // and leads to an error dialog being shown each time this is called tdf#104883
55db36
         std::shared_ptr<comphelper::ConfigurationChanges> batch( comphelper::ConfigurationChanges::create() );
55db36
         officecfg::Office::Common::PackageKit::EnableFontInstallation::set(false, batch);
55db36
         batch->commit();
55db36
-        g_debug("InstallFontconfigResources problem : %s", error->message);
55db36
-        g_error_free(error);
55db36
-    }
55db36
-    else
55db36
-    {
55db36
-        g_variant_unref(res);
55db36
     }
55db36
 
55db36
-    g_variant_builder_unref(builder);
55db36
-    g_object_unref(G_OBJECT (proxy));
55db36
-
55db36
     m_aCurrentRequests.clear();
55db36
 }
55db36
-#endif
55db36
 
55db36
 void PrintFontManager::Substitute( FontSelectPattern &rPattern, OUString& rMissingCodes )
55db36
 {
55db36
@@ -1107,8 +1036,7 @@ void PrintFontManager::Substitute( FontSelectPattern &rPattern, OUString& rMissi
55db36
                     }
55db36
                 }
55db36
                 OUString sStillMissing(pRemainingCodes.get(), nRemainingLen);
55db36
-#if ENABLE_GIO
55db36
-                if (get_xid_for_dbus())
55db36
+                if (!Application::IsHeadlessModeEnabled() && officecfg::Office::Common::PackageKit::EnableFontInstallation::get())
55db36
                 {
55db36
                     if (sStillMissing == rMissingCodes) //replaced nothing
55db36
                     {
55db36
@@ -1127,7 +1055,7 @@ void PrintFontManager::Substitute( FontSelectPattern &rPattern, OUString& rMissi
55db36
                             if (!sTag.isEmpty() && m_aPreviousLangSupportRequests.find(sTag) == m_aPreviousLangSupportRequests.end())
55db36
                             {
55db36
                                 OString sReq = OString(":lang=") + sTag;
55db36
-                                m_aCurrentRequests.push_back(sReq);
55db36
+                                m_aCurrentRequests.push_back(OUString::fromUtf8(sReq));
55db36
                                 m_aPreviousLangSupportRequests.insert(sTag);
55db36
                             }
55db36
                         }
55db36
@@ -1138,7 +1066,6 @@ void PrintFontManager::Substitute( FontSelectPattern &rPattern, OUString& rMissi
55db36
                         m_aFontInstallerTimer.Start();
55db36
                     }
55db36
                 }
55db36
-#endif
55db36
                 rMissingCodes = sStillMissing;
55db36
             }
55db36
         }
55db36
diff --git a/vcl/unx/generic/fontmanager/fontmanager.cxx b/vcl/unx/generic/fontmanager/fontmanager.cxx
55db36
index c956345..d1743dd 100644
55db36
--- a/vcl/unx/generic/fontmanager/fontmanager.cxx
55db36
+++ b/vcl/unx/generic/fontmanager/fontmanager.cxx
55db36
@@ -146,10 +146,8 @@ PrintFontManager::PrintFontManager()
55db36
     : m_nNextFontID( 1 )
55db36
     , m_nNextDirAtom( 1 )
55db36
 {
55db36
-#if ENABLE_GIO
55db36
     m_aFontInstallerTimer.SetInvokeHandler(LINK(this, PrintFontManager, autoInstallFontLangSupport));
55db36
     m_aFontInstallerTimer.SetTimeout(5000);
55db36
-#endif
55db36
 }
55db36
 
55db36
 PrintFontManager::~PrintFontManager()
55db36
-- 
55db36
2.9.5
55db36