[Xfce4-commits] <parole:master> - Fixed Quit() - Fixed property-change notifications from UI to mpris player excepting volume (Note this fix requires change to Parole codebase) - Debug with G_MESSAGES_DEBUG=all to see effect

Hakan Erduman noreply at xfce.org
Thu Dec 12 00:18:11 CET 2013


Updating branch refs/heads/master
         to b473e35870a2ada2c3c1baa9d3aa496eea7e3e81 (commit)
       from 8d012aa3f1949558425947103be267b06829368c (commit)

commit b473e35870a2ada2c3c1baa9d3aa496eea7e3e81
Author: Hakan Erduman <smultimeter at gmail.com>
Date:   Sun Nov 10 20:38:45 2013 +0100

    - Fixed Quit()
    - Fixed property-change notifications from UI to mpris player excepting
    volume
      (Note this fix requires change to Parole codebase)
    - Debug with G_MESSAGES_DEBUG=all to see effect

 .gitignore                           |    3 ++
 src/parole-conf.c                    |   27 ++++++++++++++++++
 src/plugins/mpris2/mpris2-provider.c |   52 +++++++++++++++++++---------------
 3 files changed, 59 insertions(+), 23 deletions(-)

diff --git a/.gitignore b/.gitignore
index 9abea57..90e04f9 100644
--- a/.gitignore
+++ b/.gitignore
@@ -79,3 +79,6 @@ src/parole
 src/stamp-enum-gtypes.h
 stamp-enum-types.h
 stamp-h1
+.cproject
+.project
+.settings
diff --git a/src/parole-conf.c b/src/parole-conf.c
index f5e8683..092ff45 100644
--- a/src/parole-conf.c
+++ b/src/parole-conf.c
@@ -186,6 +186,21 @@ static void parole_conf_set_property (GObject *object,
 
     /* thaw */
     g_signal_handler_unblock (conf->channel, conf->property_changed_id);
+
+    /* now we can notify the plugins */
+    switch(prop_id)
+    {
+       /* sadly this one recurses */
+       case PROP_VOLUME:
+       break;
+
+       /* these can be consumed by plugins */
+       /* case PROP_SHUFFLE: */
+       /* case PROP_REPEAT: */
+       default:
+       parole_conf_prop_changed(conf->channel, xfconf_nick, value, conf);
+       break;
+    }
 }
 
 /**
@@ -260,8 +275,20 @@ static void parole_conf_prop_changed    (XfconfChannel  *channel,
 
     /* check if the property exists and emit change */
     pspec = g_object_class_find_property (G_OBJECT_GET_CLASS (conf), prop_name + 1);
+    if (!pspec)
+    {
+       /* sometimes only the pure property name works, e.g. 'repeat' */
+       const gchar *base_name = strrchr(prop_name, '/');
+       if(base_name)
+       {
+          base_name++; /* 'repeat', not '/repeat' */
+          pspec = g_object_class_find_property (G_OBJECT_GET_CLASS (conf), base_name);
+       }
+    }
     if (G_LIKELY (pspec != NULL))
         g_object_notify_by_pspec (G_OBJECT (conf), pspec);
+
+    g_debug("Propchange:%s,%p", prop_name, pspec);
 }
 
 /**
diff --git a/src/plugins/mpris2/mpris2-provider.c b/src/plugins/mpris2/mpris2-provider.c
index 0fb968b..ab14db5 100644
--- a/src/plugins/mpris2/mpris2-provider.c
+++ b/src/plugins/mpris2/mpris2-provider.c
@@ -130,19 +130,22 @@ static const gchar mpris2xml[] =
  */
 static void mpris_Root_Raise (GDBusMethodInvocation *invocation, GVariant* parameters, Mpris2Provider *provider)
 {
-    GtkWidget *window = parole_provider_player_get_main_window(provider->player);
-    if(window)
-       gtk_widget_show(window);
-
+    GtkWidget *widget = parole_provider_player_get_main_window(provider->player);
+    if(widget)
+    {
+       GdkWindow *window = gtk_widget_get_window(widget);
+       if(window)
+       {
+          gdk_window_raise(window);
+       }
+    }
     g_dbus_method_invocation_return_value (invocation, NULL);
 }
 
 static void mpris_Root_Quit (GDBusMethodInvocation *invocation, GVariant* parameters, Mpris2Provider *provider)
 {
-   GtkWidget *window = parole_provider_player_get_main_window(provider->player);
-   if(window)
-      gtk_widget_hide(window);
-
+    /* TODO: optionally get a real close API */
+    gtk_main_quit();
     g_dbus_method_invocation_return_value (invocation, NULL);
 }
 
@@ -212,7 +215,7 @@ static void mpris_Player_Play (GDBusMethodInvocation *invocation, GVariant* para
 
       case PAROLE_STATE_ABOUT_TO_FINISH:
       case PAROLE_STATE_PLAYING:
-      g_debug("Unexpected: play command while playing");
+      g_debug("MPRIS: Unexpected: play command while playing");
       break;
    }
 
@@ -331,8 +334,6 @@ static GVariant* mpris_Player_get_LoopStatus (GError **error, Mpris2Provider *pr
 
 static void mpris_Player_put_LoopStatus (GVariant *value, GError **error, Mpris2Provider *provider)
 {
-    ParoleProviderPlayer *player = provider->player;
-
     const gchar *new_loop = g_variant_get_string(value, NULL);
 
     gboolean repeat = g_strcmp0("Playlist", new_loop) ? FALSE : TRUE;
@@ -458,24 +459,18 @@ static GVariant* mpris_Player_get_Metadata (GError **error, Mpris2Provider *prov
 static GVariant* mpris_Player_get_Volume (GError **error, Mpris2Provider *provider)
 {
     gdouble volume = 0;
-    ParoleProviderPlayer *player = provider->player;
 
-    /* TODO: How to get conf properties?
-    g_object_get (G_OBJECT (player->priv->conf),
-                  "volume", &volume,
-                  NULL);*/
+    g_object_get (G_OBJECT (provider->conf), "volume", &volume, NULL);
 
     return g_variant_new_double(volume);
 }
 
 static void mpris_Player_put_Volume (GVariant *value, GError **error, Mpris2Provider *provider)
 {
-    ParoleProviderPlayer *player = provider->player;
+   gdouble volume = g_variant_get_double(value);
 
-    gdouble volume = g_variant_get_double(value);
+   g_object_set(G_OBJECT(provider->conf), "volume", volume, NULL);
 
-    /* TODO: How set volume volume?
-    parole_gst_set_volume (PAROLE_GST (player->priv->gst), value);*/
 }
 
 static GVariant* mpris_Player_get_Position (GError **error, Mpris2Provider *provider)
@@ -560,9 +555,9 @@ static void parole_mpris_update_any (Mpris2Provider *provider)
     ParoleProviderPlayer *player = provider->player;
 
     if(NULL == provider->dbus_connection)
-    return; /* better safe than sorry */
+        return; /* better safe than sorry */
 
-    g_debug ("MPRIS update any");
+    g_debug ("MPRIS: update any");
 
     stream = parole_provider_player_get_stream(player);
     g_object_get (G_OBJECT (stream),
@@ -638,6 +633,13 @@ state_changed_cb (ParoleProviderPlayer *player, const ParoleStream *stream, Paro
 	parole_mpris_update_any (provider);
 }
 
+static void
+conf_changed_cb (ParoleConf *conf, GParamSpec *pspec, Mpris2Provider *provider)
+{
+   parole_mpris_update_any (provider);
+}
+
+
 /*
  * Dbus callbacks
  */
@@ -798,7 +800,7 @@ on_name_acquired (GDBusConnection *connection,
                   const gchar     *name,
                   gpointer         user_data)
 {
-    g_debug("Acquired DBus name %s", name);
+    g_debug("MPRIS: Acquired DBus name %s", name);
 }
 
 static void
@@ -852,6 +854,9 @@ mpris2_provider_set_player (ParoleProviderPlugin *plugin, ParoleProviderPlayer *
                       G_CALLBACK (state_changed_cb), plugin);
 
     provider->conf = parole_conf_new();
+
+    g_signal_connect ( provider->conf, "notify::repeat",
+                      G_CALLBACK (conf_changed_cb), plugin);
 }
 
 static void
@@ -871,6 +876,7 @@ static void mpris2_provider_class_init (Mpris2ProviderClass *klass)
 static void mpris2_provider_init (Mpris2Provider *provider)
 {
     provider->player = NULL;
+    provider->conf = NULL;
 }
 
 static void mpris2_provider_finalize (GObject *object)


More information about the Xfce4-commits mailing list