[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