[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