[pulseaudio-discuss] [PATCH 2/2] [paprefs] Remove libdbus dependency

Jan Tojnar jtojnar at gmail.com
Sun Jul 15 13:56:07 UTC 2018


Previously, we used bare libdbus to detect PackageKit presence on start-up.
Since GLib contains its own independent D-Bus library and we are already
using it for invoking PackageKit, we ported the detection to GDBus too.

Because there is not any equivalent of dbus_bus_name_has_owner() in gdbus,
we replaced it with g_bus_watch_name(). As a bonus, the user interface will
be updated when PackageKit daemon starts or stops when the app is running.
---
 meson.build     |  1 -
 src/meson.build |  1 -
 src/paprefs.cc  | 27 +++++++++++++++------------
 3 files changed, 15 insertions(+), 14 deletions(-)

diff --git a/meson.build b/meson.build
index 6368165..45e4789 100644
--- a/meson.build
+++ b/meson.build
@@ -14,7 +14,6 @@ i18n = import('i18n')
 gtkmm = dependency('gtkmm-3.0')
 giomm = dependency('giomm-2.4', version: '>= 2.26')
 sigc = dependency('sigc++-2.0')
-libdbus = dependency('dbus-1')
 libpulse = dependency('libpulse')
 
 lynx = find_program('lynx', required: with_lynx)
diff --git a/src/meson.build b/src/meson.build
index 7d61175..32a1945 100644
--- a/src/meson.build
+++ b/src/meson.build
@@ -6,7 +6,6 @@ paprefs_dependencies = [
   giomm,
   gtkmm,
   sigc,
-  libdbus,
   libpulse,
 ]
 
diff --git a/src/paprefs.cc b/src/paprefs.cc
index 29fb1bb..2b1d389 100644
--- a/src/paprefs.cc
+++ b/src/paprefs.cc
@@ -25,7 +25,6 @@
 
 #include <gtkmm.h>
 #include <libintl.h>
-#include <dbus/dbus.h>
 #include <giomm/dbusconnection.h>
 #include <giomm/dbusproxy.h>
 #include <gdk/gdkx.h>
@@ -121,6 +120,9 @@ public:
     void installFiles(const char *a, const char *b);
     void installModules(const char *a, const char *b);
 
+    void onPackageKitAppeared(const Glib::RefPtr<Gio::DBus::Connection>& connection, const Glib::ustring& name, const Glib::ustring& name_owner);
+    void onPackageKitVanished(const Glib::RefPtr<Gio::DBus::Connection>& connection, const Glib::ustring& name);
+
     bool moduleExists(const gchar *name);
     gchar *modulePath(const gchar *name);
 
@@ -721,19 +723,20 @@ void MainWindow::checkForModules() {
 }
 
 void MainWindow::checkForPackageKit() {
+    Gio::DBus::watch_name(Gio::DBus::BusType::BUS_TYPE_SESSION,
+                          "org.freedesktop.PackageKit",
+                          sigc::mem_fun(*this, &MainWindow::onPackageKitAppeared),
+                          sigc::mem_fun(*this, &MainWindow::onPackageKitVanished));
+}
 
-    DBusError err;
-    dbus_error_init(&err);
-    DBusConnection *sessionBus = dbus_bus_get(DBUS_BUS_SESSION, &err);
+void MainWindow::onPackageKitAppeared(const Glib::RefPtr<Gio::DBus::Connection>& connection,const Glib::ustring& name,const Glib::ustring& name_owner) {
+    packageKitAvailable = TRUE;
+    updateSensitive();
+}
 
-    if(dbus_error_is_set(&err)) {
-        g_warning("Error connecting to DBus: %s", err.message);
-        packageKitAvailable = FALSE;
-    } else {
-        packageKitAvailable = dbus_bus_name_has_owner(sessionBus, "org.freedesktop.PackageKit", NULL);
-        dbus_connection_unref(sessionBus);
-    }
-    dbus_error_free(&err);
+void MainWindow::onPackageKitVanished(const Glib::RefPtr<Gio::DBus::Connection>& connection,const Glib::ustring& name) {
+    packageKitAvailable = FALSE;
+    updateSensitive();
 }
 
 
-- 
2.18.0



More information about the pulseaudio-discuss mailing list