[Xfce4-commits] <parole:master> Fix setting volume with mpris2
Sean Davis
noreply at xfce.org
Thu Dec 12 00:18:30 CET 2013
Updating branch refs/heads/master
to ff441e3e265ef10dc0dca7f17e8666f3571a77d6 (commit)
from c96da1b170d495e9313206cad4821ee22b213d70 (commit)
commit ff441e3e265ef10dc0dca7f17e8666f3571a77d6
Author: Sean Davis <smd.seandavis at gmail.com>
Date: Sat Dec 7 10:40:07 2013 -0500
Fix setting volume with mpris2
data/interfaces/parole.ui | 5 +++--
src/gst/parole-gst.c | 30 ++++++++++++++++++++++++------
src/parole-player.c | 16 ++++++++++++----
src/plugins/mpris2/mpris2-provider.c | 3 +--
4 files changed, 40 insertions(+), 14 deletions(-)
diff --git a/data/interfaces/parole.ui b/data/interfaces/parole.ui
index f3472d0..9918f05 100644
--- a/data/interfaces/parole.ui
+++ b/data/interfaces/parole.ui
@@ -422,8 +422,8 @@
<property name="use_underline">True</property>
<property name="image">image_volume_up</property>
<property name="use_stock">False</property>
- <accelerator key="plus" signal="activate"/>
<accelerator key="equal" signal="activate"/>
+ <accelerator key="plus" signal="activate"/>
<signal name="activate" handler="parole_player_volume_up" swapped="no"/>
</object>
</child>
@@ -932,7 +932,7 @@
<property name="show_text">True</property>
</object>
<packing>
- <property name="expand">False</property>
+ <property name="expand">True</property>
<property name="fill">True</property>
<property name="position">4</property>
</packing>
@@ -990,6 +990,7 @@ audio-volume-low-symbolic
audio-volume-medium-symbolic</property>
<property name="use_symbolic">True</property>
<signal name="value-changed" handler="parole_player_volume_value_changed_cb" swapped="no"/>
+ <signal name="scroll-event" handler="parole_player_volume_scroll_event_cb" swapped="no"/>
</object>
<packing>
<property name="expand">False</property>
diff --git a/src/gst/parole-gst.c b/src/gst/parole-gst.c
index b18f425..ea61a0e 100644
--- a/src/gst/parole-gst.c
+++ b/src/gst/parole-gst.c
@@ -2028,6 +2028,18 @@ parole_gst_conf_notify_cb (GObject *object, GParamSpec *spec, ParoleGst *gst)
}
}
+static void
+parole_gst_conf_notify_volume_cb (GObject *conf, GParamSpec *pspec, ParoleGst *gst)
+{
+ gint volume;
+
+ g_object_get (G_OBJECT (gst->priv->conf),
+ "volume", &volume,
+ NULL);
+
+ parole_gst_set_volume (gst, (double)(volume / 100.0));
+}
+
static void parole_gst_get_property (GObject *object,
guint prop_id,
GValue *value,
@@ -2081,6 +2093,8 @@ static void parole_gst_set_property (GObject *object,
g_signal_connect (G_OBJECT (gst->priv->conf), "notify",
G_CALLBACK (parole_gst_conf_notify_cb), gst);
+ g_signal_connect (G_OBJECT (gst->priv->conf), "notify::volume",
+ G_CALLBACK (parole_gst_conf_notify_volume_cb), gst);
}
break;
default:
@@ -2618,13 +2632,17 @@ void parole_gst_seek (ParoleGst *gst, gdouble seek)
void parole_gst_set_volume (ParoleGst *gst, gdouble volume)
{
- gst_stream_volume_set_volume (GST_STREAM_VOLUME (gst->priv->playbin),
- GST_STREAM_VOLUME_FORMAT_CUBIC,
- volume);
volume = CLAMP (volume, 0.0, 1.0);
- gst->priv->volume = volume;
-
- g_object_notify (G_OBJECT (gst), "volume");
+ if (gst->priv->volume != volume)
+ {
+ gst_stream_volume_set_volume (GST_STREAM_VOLUME (gst->priv->playbin),
+ GST_STREAM_VOLUME_FORMAT_CUBIC,
+ volume);
+
+ gst->priv->volume = volume;
+
+ g_object_notify (G_OBJECT (gst), "volume");
+ }
}
gdouble parole_gst_get_volume (ParoleGst *gst)
diff --git a/src/parole-player.c b/src/parole-player.c
index a9fd374..bf0a340 100644
--- a/src/parole-player.c
+++ b/src/parole-player.c
@@ -345,6 +345,8 @@ struct ParolePlayerPrivate
GtkFileFilter *video_filter;
GtkRecentManager *recent;
+
+ gdouble last_volume;
GtkWidget *window;
GtkWidget *playlist_nt;
@@ -2239,10 +2241,16 @@ void
parole_player_volume_value_changed_cb (GtkScaleButton *widget, gdouble value, ParolePlayer *player)
{
parole_player_change_volume (player, value);
- if ( value > 0.0 )
- g_object_set (G_OBJECT (player->priv->conf),
- "volume", (gint)(value * 100),
- NULL);
+
+ /* Do not update the value unless it has changed! */
+ if ((int)(value*100) != (int)(player->priv->last_volume*100))
+ {
+ player->priv->last_volume = value;
+ if ( value > 0.0 )
+ g_object_set (G_OBJECT (player->priv->conf),
+ "volume", (gint)(value * 100),
+ NULL);
+ }
}
void
diff --git a/src/plugins/mpris2/mpris2-provider.c b/src/plugins/mpris2/mpris2-provider.c
index 34752ed..3b5fb35 100644
--- a/src/plugins/mpris2/mpris2-provider.c
+++ b/src/plugins/mpris2/mpris2-provider.c
@@ -548,8 +548,7 @@ static void mpris_Player_put_Volume (GVariant *value, GError **error, Mpris2Prov
if(volume > 1.0)
volume = 1.0;
- g_object_set(G_OBJECT(provider->conf), "volume", (gint) volume * 100.0, NULL);
-
+ g_object_set(G_OBJECT(provider->conf), "volume", (gint) (volume * 100.0), NULL);
}
static GVariant* mpris_Player_get_Position (GError **error, Mpris2Provider *provider)
More information about the Xfce4-commits
mailing list