summaryrefslogtreecommitdiff
path: root/vcl/unx/generic/fontmanager
diff options
context:
space:
mode:
authorCaolán McNamara <caolanm@redhat.com>2017-12-22 11:22:56 +0000
committerCaolán McNamara <caolanm@redhat.com>2017-12-22 20:08:32 +0100
commit91d361604781f92640c9727add1e08cde854037e (patch)
tree41fdc6385156e24bc6d29cab0c0af6146629f508 /vcl/unx/generic/fontmanager
parent12e788f1102d15df9af311c77df77d64263d22fc (diff)
use SyncDbusSessionHelper for font install requests
don't need to have two implementations here and can reduce ifdef forest Change-Id: I972159ece9cce417aefd5ec4acf5ba5d1d08317b Reviewed-on: https://gerrit.libreoffice.org/46968 Tested-by: Jenkins <ci@libreoffice.org> Reviewed-by: Caolán McNamara <caolanm@redhat.com> Tested-by: Caolán McNamara <caolanm@redhat.com>
Diffstat (limited to 'vcl/unx/generic/fontmanager')
-rw-r--r--vcl/unx/generic/fontmanager/fontconfig.cxx88
-rw-r--r--vcl/unx/generic/fontmanager/fontmanager.cxx2
2 files changed, 11 insertions, 79 deletions
diff --git a/vcl/unx/generic/fontmanager/fontconfig.cxx b/vcl/unx/generic/fontmanager/fontconfig.cxx
index 1cff42cd1f44..94c80cc6cf8f 100644
--- a/vcl/unx/generic/fontmanager/fontconfig.cxx
+++ b/vcl/unx/generic/fontmanager/fontconfig.cxx
@@ -20,6 +20,7 @@
#include <memory>
#include <unx/fontmanager.hxx>
#include <impfont.hxx>
+#include <comphelper/sequence.hxx>
#include <vcl/svapp.hxx>
#include <vcl/sysdata.hxx>
#include <vcl/vclenum.hxx>
@@ -31,8 +32,8 @@
#include <rtl/strbuf.hxx>
#include <unicode/uchar.h>
#include <unicode/uscript.h>
-#include <config_gio.h>
#include <officecfg/Office/Common.hxx>
+#include <org/freedesktop/PackageKit/SyncDbusSessionHelper.hpp>
using namespace psp;
@@ -40,10 +41,6 @@ using namespace psp;
#include <ft2build.h>
#include <fontconfig/fcfreetype.h>
-#if ENABLE_GIO
-#include <gio/gio.h>
-#endif
-
#include <cstdio>
#include <cstdarg>
@@ -863,97 +860,36 @@ namespace
return OStringToOUString(aBuf.makeStringAndClear(), RTL_TEXTENCODING_UTF8);
}
-#if ENABLE_GIO
- guint get_xid_for_dbus()
+ sal_uInt32 get_xid_for_dbus()
{
- if (Application::IsHeadlessModeEnabled())
- return 0;
const vcl::Window *pTopWindow = Application::GetActiveTopWindow();
if (!pTopWindow)
pTopWindow = Application::GetFirstTopLevelWindow();
const SystemEnvData* pEnvData = pTopWindow ? pTopWindow->GetSystemData() : nullptr;
return pEnvData ? GetDbusId(*pEnvData) : 0;
}
-#endif
}
-#if ENABLE_GIO
IMPL_LINK_NOARG(PrintFontManager, autoInstallFontLangSupport, Timer *, void)
{
- if (!officecfg::Office::Common::PackageKit::EnableFontInstallation::get())
- return;
-
- guint xid = get_xid_for_dbus();
-
- if (!xid)
- {
- SAL_WARN("vcl", "Could not retrieve X Window ID for DBUS");
- return;
- }
-
-
- GError *error = nullptr;
- /* get the DBUS session connection */
- GDBusConnection *session_connection = g_bus_get_sync(G_BUS_TYPE_SESSION, nullptr, &error);
- if (error != nullptr)
+ try
{
- g_debug ("DBUS cannot connect : %s", error->message);
- g_error_free (error);
- return;
- }
-
- /* get the proxy with gnome-session-manager */
- GDBusProxy *proxy = g_dbus_proxy_new_sync(session_connection,
- G_DBUS_PROXY_FLAGS_NONE,
- nullptr, // GDBusInterfaceInfo
- "org.freedesktop.PackageKit",
- "/org/freedesktop/PackageKit",
- "org.freedesktop.PackageKit.Modify",
- nullptr, // GCancellable
- &error);
- if (proxy == nullptr && error != nullptr)
- {
- g_debug("Could not get DBUS proxy: org.freedesktop.PackageKit: %s", error->message);
- g_error_free(error);
- return;
+ using namespace org::freedesktop::PackageKit;
+ css::uno::Reference<XSyncDbusSessionHelper> xSyncDbusSessionHelper(SyncDbusSessionHelper::create(comphelper::getProcessComponentContext()));
+ xSyncDbusSessionHelper->InstallFontconfigResources(get_xid_for_dbus(), comphelper::containerToSequence(m_aCurrentRequests), "hide-finished");
}
-
- GVariantBuilder *builder = g_variant_builder_new (G_VARIANT_TYPE("as")); // 'as'=array of strings
- for (std::vector<OString>::const_iterator aI = m_aCurrentRequests.begin(); aI != m_aCurrentRequests.end(); ++aI)
- g_variant_builder_add (builder, "s", aI->getStr());
-
- GVariant *res = g_dbus_proxy_call_sync(proxy,
- "InstallFontconfigResources",
- // Create a new variant with the following types:
- // 'u'=guint32 (xid); 'as'=array of strings (builder); 's'=string ("hide-finished")
- // See also https://people.gnome.org/~ryanl/glib-docs/gvariant-format-strings.html
- g_variant_new("(uass)", xid, builder, "hide-finished"),
- G_DBUS_CALL_FLAGS_NONE,
- -1, // Timeout
- nullptr, // GCancellable
- &error);
-
- if (res == nullptr && error != nullptr)
+ catch (const css::uno::Exception& e)
{
+ SAL_INFO("vcl", "InstallFontconfigResources problem, caught " << e);
// Disable this method from now on. It's simply not available on some systems
// and leads to an error dialog being shown each time this is called tdf#104883
std::shared_ptr<comphelper::ConfigurationChanges> batch( comphelper::ConfigurationChanges::create() );
officecfg::Office::Common::PackageKit::EnableFontInstallation::set(false, batch);
batch->commit();
- g_debug("InstallFontconfigResources problem : %s", error->message);
- g_error_free(error);
}
- else
- {
- g_variant_unref(res);
- }
-
- g_variant_builder_unref(builder);
- g_object_unref(G_OBJECT (proxy));
m_aCurrentRequests.clear();
}
-#endif
void PrintFontManager::Substitute( FontSelectPattern &rPattern, OUString& rMissingCodes )
{
@@ -1109,8 +1045,7 @@ void PrintFontManager::Substitute( FontSelectPattern &rPattern, OUString& rMissi
}
}
OUString sStillMissing(pRemainingCodes.get(), nRemainingLen);
-#if ENABLE_GIO
- if (get_xid_for_dbus())
+ if (!Application::IsHeadlessModeEnabled() && officecfg::Office::Common::PackageKit::EnableFontInstallation::get())
{
if (sStillMissing == rMissingCodes) //replaced nothing
{
@@ -1129,7 +1064,7 @@ void PrintFontManager::Substitute( FontSelectPattern &rPattern, OUString& rMissi
if (!sTag.isEmpty() && m_aPreviousLangSupportRequests.find(sTag) == m_aPreviousLangSupportRequests.end())
{
OString sReq = OString(":lang=") + sTag;
- m_aCurrentRequests.push_back(sReq);
+ m_aCurrentRequests.push_back(OUString::fromUtf8(sReq));
m_aPreviousLangSupportRequests.insert(sTag);
}
}
@@ -1140,7 +1075,6 @@ void PrintFontManager::Substitute( FontSelectPattern &rPattern, OUString& rMissi
m_aFontInstallerTimer.Start();
}
}
-#endif
rMissingCodes = sStillMissing;
}
}
diff --git a/vcl/unx/generic/fontmanager/fontmanager.cxx b/vcl/unx/generic/fontmanager/fontmanager.cxx
index c956345e6fd1..d1743dd47c74 100644
--- a/vcl/unx/generic/fontmanager/fontmanager.cxx
+++ b/vcl/unx/generic/fontmanager/fontmanager.cxx
@@ -146,10 +146,8 @@ PrintFontManager::PrintFontManager()
: m_nNextFontID( 1 )
, m_nNextDirAtom( 1 )
{
-#if ENABLE_GIO
m_aFontInstallerTimer.SetInvokeHandler(LINK(this, PrintFontManager, autoInstallFontLangSupport));
m_aFontInstallerTimer.SetTimeout(5000);
-#endif
}
PrintFontManager::~PrintFontManager()