--- a/shell/ev-media-player-keys.c
+++ b/shell/ev-media-player-keys.c
@@ -41,8 +41,9 @@ struct _EvMediaPlayerKeys
{
GObject parent;
- GDBusProxy *proxy;
- gboolean has_name_owner;
+ GDBusProxy *proxy;
+ gboolean has_name_owner;
+ GCancellable *cancellable;
};
struct _EvMediaPlayerKeysClass
@@ -163,7 +164,7 @@ mediakeys_service_appeared_cb (GObject *source_object,
GAsyncResult *res,
gpointer user_data)
{
- EvMediaPlayerKeys *keys = EV_MEDIA_PLAYER_KEYS (user_data);
+ EvMediaPlayerKeys *keys;
GDBusProxy *proxy;
proxy = g_dbus_proxy_new_for_bus_finish (res, NULL);
@@ -172,6 +173,7 @@ mediakeys_service_appeared_cb (GObject *source_object,
return;
}
+ keys = EV_MEDIA_PLAYER_KEYS (user_data);
g_signal_connect (proxy, "g-signal",
G_CALLBACK (media_player_key_pressed_cb),
keys);
@@ -187,13 +189,15 @@ mediakeys_service_appeared_cb (GObject *source_object,
static void
ev_media_player_keys_init (EvMediaPlayerKeys *keys)
{
+ keys->cancellable = g_cancellable_new ();
+
g_dbus_proxy_new_for_bus (G_BUS_TYPE_SESSION,
G_DBUS_PROXY_FLAGS_DO_NOT_LOAD_PROPERTIES,
NULL,
SD_NAME,
SD_OBJECT_PATH,
SD_INTERFACE,
- NULL,
+ keys->cancellable,
mediakeys_service_appeared_cb,
keys);
}
@@ -212,6 +216,9 @@ ev_media_player_keys_finalize (GObject *object)
{
EvMediaPlayerKeys *keys = EV_MEDIA_PLAYER_KEYS (object);
+ g_cancellable_cancel (keys->cancellable);
+ g_object_unref (keys->cancellable);
+
if (keys->proxy != NULL) {
ev_media_player_keys_release_keys (keys);
g_object_unref (keys->proxy);