[banshee] Replace custom volume widget with gtk's VolumeButton (bgo#681062)



commit 35a105ba93151fa9ef5bff0ca7d9ae8772389805
Author: Timo DÃrr <timo latecrew de>
Date:   Thu Aug 2 12:33:04 2012 +0200

    Replace custom volume widget with gtk's VolumeButton (bgo#681062)
    
    We implemented a custom volume slider gtk widget which was not present
    at that time inside gtk. However, since 2.12, gtk ships a volume widget,
    which is also bound by gtk-sharp as Gtk.VolumeButton.
    
    This patch modifies ConnectedVolumeButton to derive from
    Gtk.VolumeButton, thus the custom widget code can be removed. It also
    removes the "Classic" field of ConnectedVolumeButton as it was used to
    display the scale above the button so that it didn't go off-screen, and
    this is now done automatically by VolumeButton.
    
    ConnectedVolumeButton now has a Disconnect method, used by
    FullscreenControls, because VolumeButton doesn't like to have its value
    changed after it has been destroyed.
    
    Signed-off-by: Bertrand Lorentz <bertrand lorentz gmail com>

 .../Banshee.Gui.Widgets/ConnectedVolumeButton.cs   |   37 +-
 src/Core/Banshee.Widgets/Banshee.Widgets.csproj    |    1 -
 .../Banshee.Widgets/VolumeButton.cs                |  728 --------------------
 src/Core/Banshee.Widgets/Makefile.am               |    3 +-
 .../Banshee.NowPlaying/FullscreenControls.cs       |    3 +-
 5 files changed, 21 insertions(+), 751 deletions(-)
---
diff --git a/src/Core/Banshee.ThickClient/Banshee.Gui.Widgets/ConnectedVolumeButton.cs b/src/Core/Banshee.ThickClient/Banshee.Gui.Widgets/ConnectedVolumeButton.cs
index 4d75155..c68edb5 100644
--- a/src/Core/Banshee.ThickClient/Banshee.Gui.Widgets/ConnectedVolumeButton.cs
+++ b/src/Core/Banshee.ThickClient/Banshee.Gui.Widgets/ConnectedVolumeButton.cs
@@ -33,12 +33,13 @@ using Banshee.ServiceStack;
 
 namespace Banshee.Gui.Widgets
 {
-    public class ConnectedVolumeButton : Bacon.VolumeButton
+    public class ConnectedVolumeButton : Gtk.VolumeButton
     {
-        private bool emit_lock = false;
-
         public ConnectedVolumeButton () : base()
         {
+            // PlayerEngine uses a volume range of 0 to 100
+            Adjustment.SetBounds (0.0, 100.0, 5.0, 20.0, 0.0);
+
             var player = ServiceManager.PlayerEngine;
 
             if (player.ActiveEngine != null && player.ActiveEngine.IsInitialized) {
@@ -54,13 +55,24 @@ namespace Banshee.Gui.Widgets
             }
 
             player.ConnectEvent (OnPlayerEvent, PlayerEvent.Volume);
+
+            this.ValueChanged += (o, args) => {
+                ServiceManager.PlayerEngine.Volume = (ushort)Value;
+            };
+
+            // We need to know whether the volume scale is being used
+            this.Pressed += (o, args) => { active = true; };
+            this.Released += (o, args) => { active = false; };
         }
 
-        public ConnectedVolumeButton (bool classic) : this ()
+        public void Disconnect ()
         {
-            Classic = classic;
+            ServiceManager.PlayerEngine.DisconnectEvent (OnPlayerEvent);
         }
 
+        private bool active = false;
+        public bool Active { get { return active; } }
+
         private void OnPlayerEvent (PlayerEventArgs args)
         {
             SetVolume ();
@@ -68,20 +80,7 @@ namespace Banshee.Gui.Widgets
 
         private void SetVolume ()
         {
-            emit_lock = true;
-            Volume = ServiceManager.PlayerEngine.Volume;
-            emit_lock = false;
-        }
-
-        protected override void OnVolumeChanged ()
-        {
-            if (emit_lock) {
-                return;
-            }
-
-            ServiceManager.PlayerEngine.Volume = (ushort)Volume;
-
-            base.OnVolumeChanged ();
+            Value = ServiceManager.PlayerEngine.Volume;
         }
     }
 }
diff --git a/src/Core/Banshee.Widgets/Banshee.Widgets.csproj b/src/Core/Banshee.Widgets/Banshee.Widgets.csproj
index 4614073..a1f9b75 100644
--- a/src/Core/Banshee.Widgets/Banshee.Widgets.csproj
+++ b/src/Core/Banshee.Widgets/Banshee.Widgets.csproj
@@ -86,7 +86,6 @@
     <Compile Include="Banshee.Widgets\StreamPositionLabel.cs" />
     <Compile Include="Banshee.Widgets\Tile.cs" />
     <Compile Include="Banshee.Widgets\TileView.cs" />
-    <Compile Include="Banshee.Widgets\VolumeButton.cs" />
     <Compile Include="Banshee.Widgets\CustomActionProxy.cs" />
     <Compile Include="Banshee.Widgets\RatingActionProxy.cs" />
     <Compile Include="Banshee.Widgets\MenuTile.cs" />
diff --git a/src/Core/Banshee.Widgets/Makefile.am b/src/Core/Banshee.Widgets/Makefile.am
index a752190..993f6c6 100644
--- a/src/Core/Banshee.Widgets/Makefile.am
+++ b/src/Core/Banshee.Widgets/Makefile.am
@@ -18,8 +18,7 @@ SOURCES =  \
 	Banshee.Widgets/SeekSlider.cs \
 	Banshee.Widgets/StreamPositionLabel.cs \
 	Banshee.Widgets/Tile.cs \
-	Banshee.Widgets/TileView.cs \
-	Banshee.Widgets/VolumeButton.cs  
+	Banshee.Widgets/TileView.cs
 
 RESOURCES =
 
diff --git a/src/Extensions/Banshee.NowPlaying/Banshee.NowPlaying/FullscreenControls.cs b/src/Extensions/Banshee.NowPlaying/Banshee.NowPlaying/FullscreenControls.cs
index 425d5b8..730150f 100644
--- a/src/Extensions/Banshee.NowPlaying/Banshee.NowPlaying/FullscreenControls.cs
+++ b/src/Extensions/Banshee.NowPlaying/Banshee.NowPlaying/FullscreenControls.cs
@@ -52,7 +52,7 @@ namespace Banshee.NowPlaying
         {
             HBox box = new HBox ();
 
-            volume_button = new ConnectedVolumeButton (true);
+            volume_button = new ConnectedVolumeButton ();
 
             box.PackStart (action_service.PlaybackActions["PreviousAction"].CreateToolItem (), false, false, 0);
             box.PackStart (action_service.PlaybackActions["PlayPauseAction"].CreateToolItem (), false, false, 0);
@@ -73,6 +73,7 @@ namespace Banshee.NowPlaying
         public override void Destroy ()
         {
             slider.Disconnect ();
+            volume_button.Disconnect ();
             base.Destroy ();
         }
 



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]