[pulseaudio-commits] [Git][pulseaudio/paprefs][master] 2 commits: Port from dbus-glib to gdbus
Tanu Kaskinen
gitlab at gitlab.freedesktop.org
Sat Aug 11 10:34:33 UTC 2018
Tanu Kaskinen pushed to branch master at PulseAudio / paprefs
Commits:
b8246d3f by Jan Tojnar at 2018-08-11T10:21:42Z
Port from dbus-glib to gdbus
dbus-glib has been deprecated in favour of D-Bus library built into
GLib for a while now.
- - - - -
0a5e8a94 by Jan Tojnar at 2018-08-11T10:30:13Z
Remove libdbus dependency
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.
- - - - -
3 changed files:
- meson.build
- src/meson.build
- src/paprefs.cc
Changes:
=====================================
meson.build
=====================================
--- 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')
-dbus_glib = dependency('dbus-glib-1')
libpulse = dependency('libpulse')
lynx = find_program('lynx', required: with_lynx)
=====================================
src/meson.build
=====================================
--- a/src/meson.build
+++ b/src/meson.build
@@ -6,7 +6,6 @@ paprefs_dependencies = [
giomm,
gtkmm,
sigc,
- dbus_glib,
libpulse,
]
=====================================
src/paprefs.cc
=====================================
--- a/src/paprefs.cc
+++ b/src/paprefs.cc
@@ -25,8 +25,8 @@
#include <gtkmm.h>
#include <libintl.h>
-#include <dbus/dbus-glib.h>
-#include <dbus/dbus.h>
+#include <giomm/dbusconnection.h>
+#include <giomm/dbusproxy.h>
#include <gdk/gdkx.h>
#include <pulse/version.h>
@@ -120,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);
@@ -339,36 +342,28 @@ void MainWindow::showInstallButton(Gtk::Button *button, bool available) {
}
void MainWindow::installFiles(const char *a, const char *b = NULL) {
- DBusGConnection *connection;
- DBusGProxy *proxy;
- gboolean ret;
- GError *error = NULL;
- const gchar *packages[] = {a, b, NULL};
-
- connection = dbus_g_bus_get(DBUS_BUS_SESSION, NULL);
-
- proxy = dbus_g_proxy_new_for_name(connection,
- "org.freedesktop.PackageKit",
- "/org/freedesktop/PackageKit",
- "org.freedesktop.PackageKit.Modify");
-
- ret = dbus_g_proxy_call(
- proxy, "InstallProvideFiles", &error,
- G_TYPE_UINT, GDK_WINDOW_XID(get_window()->gobj()),
- G_TYPE_STRV, packages,
- G_TYPE_STRING, "show-confirm-search,hide-finished",
- G_TYPE_INVALID, G_TYPE_INVALID);
-
- if (!ret) {
- g_warning("Installation failed: %s", error->message);
- g_error_free(error);
+ Glib::RefPtr<Gio::DBus::Proxy> proxy;
+ const std::vector<Glib::ustring> packages = {a, b};
+
+ proxy = Gio::DBus::Proxy::create_for_bus_sync(Gio::DBus::BusType::BUS_TYPE_SESSION,
+ "org.freedesktop.PackageKit",
+ "/org/freedesktop/PackageKit",
+ "org.freedesktop.PackageKit.Modify");
+
+ Glib::VariantContainerBase params = Glib::VariantContainerBase::create_tuple(std::vector<Glib::VariantBase>({
+ Glib::Variant<guint>::create(GDK_WINDOW_XID(get_window()->gobj())),
+ Glib::Variant<std::vector<Glib::ustring>>::create(packages),
+ Glib::Variant<Glib::ustring>::create("show-confirm-search,hide-finished")
+ }));
+
+ try {
+ proxy->call_sync("InstallProvideFiles", params);
+
+ checkForModules();
+ updateSensitive();
+ } catch (const Glib::Error& err) {
+ g_warning("Installation failed: %s", err.what().c_str());
}
-
- g_object_unref(proxy);
- dbus_g_connection_unref(connection);
-
- checkForModules();
- updateSensitive();
}
void MainWindow::installModules(const char *a, const char *b = NULL) {
@@ -728,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();
}
View it on GitLab: https://gitlab.freedesktop.org/pulseaudio/paprefs/compare/9963030dc010ee691c4f15fe22d78bcd4beb198a...0a5e8a94392df3f1af80d79d8253638b4945078f
--
View it on GitLab: https://gitlab.freedesktop.org/pulseaudio/paprefs/compare/9963030dc010ee691c4f15fe22d78bcd4beb198a...0a5e8a94392df3f1af80d79d8253638b4945078f
You're receiving this email because of your account on gitlab.freedesktop.org.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.freedesktop.org/archives/pulseaudio-commits/attachments/20180811/c38e676f/attachment-0001.html>
More information about the pulseaudio-commits
mailing list