Updating branch refs/heads/master
         to 37aa763a79a03b5671bd71b6957f2a3675561176 (commit)
       from 16954b228e84e85d1efda0d3a1e53afb355ebc80 (commit)

commit 37aa763a79a03b5671bd71b6957f2a3675561176
Author: Mike Massonnet <[email protected]>
Date:   Sat Aug 13 19:49:31 2011 +0200

    interface: Change behavior of progress bar WRT to mouse
    
    We are using the motion-notify-event signal from the progressbar-box
    to update the progress bar with the position of the mouse. This event
    is only emitted as long as the progressbar-box is pressed.

 src/interface.vala |   37 +++++++++++++++++++++++++++++++++++++
 1 files changed, 37 insertions(+), 0 deletions(-)

diff --git a/src/interface.vala b/src/interface.vala
index a7652ba..505f15f 100644
--- a/src/interface.vala
+++ b/src/interface.vala
@@ -34,6 +34,8 @@ namespace Xfmpc {
                private Gtk.Label title;
                private Gtk.Label subtitle;
 
+               private bool progress_bar_sync = true;
+
                construct {
                        this.mpdclient = Xfmpc.Mpdclient.get_default ();
                        this.preferences = Xfmpc.Preferences.get_default ();
@@ -118,6 +120,8 @@ namespace Xfmpc {
                        this.button_pp.clicked.connect (pp_clicked);
                        this.button_next.clicked.connect (cb_mpdclient_next);
                        this.button_volume.value_changed.connect 
(volume_changed);
+                       progress_box.motion_notify_event.connect 
(cb_progress_box_motion_event);
+                       progress_box.button_press_event.connect 
(cb_progress_box_press_event);
                        progress_box.button_release_event.connect 
(cb_progress_box_release_event);
 
                        this.mpdclient.song_changed.connect (cb_song_changed);
@@ -152,10 +156,39 @@ namespace Xfmpc {
                                image.set_from_stock (Gtk.STOCK_MEDIA_PLAY, 
Gtk.IconSize.BUTTON);
                }
 
+               private bool cb_progress_box_motion_event (Gdk.EventMotion 
event) {
+                       /* This event is started only after a press-event 
signal,
+                        * we use it to update the progress bar with the 
position
+                        * of the mouse. */
+                       int time_total = this.mpdclient.get_total_time ();
+                       if (time_total < 0)
+                               return false;
+
+                       double song_time = event.x / 
this.progress_bar.allocation.width;
+                       song_time *= time_total;
+
+                       if (song_time < 0)
+                               song_time = 0;
+                       else if (song_time > time_total)
+                               song_time = time_total;
+
+                       set_time ((int)song_time, time_total);
+                       return false;
+               }
+
+               private bool cb_progress_box_press_event (Gdk.EventButton 
event) {
+                       /* Block MPD signals from updating the progress bar */
+                       this.progress_bar_sync = false;
+                       return false;
+               }
+
                private bool cb_progress_box_release_event (Gdk.EventButton 
event) {
                        if (event.type != Gdk.EventType.BUTTON_RELEASE || 
event.button != 1)
                                return false;
 
+                       /* Unblock MPD signals to update the progress bar */
+                       this.progress_bar_sync = true;
+
                        int time_total = this.mpdclient.get_total_time ();
                        if (time_total < 0)
                                return false;
@@ -242,10 +275,14 @@ namespace Xfmpc {
                }
 
                private void cb_time_changed (int song_time) {
+                       if (this.progress_bar_sync == false)
+                               return;
                        set_time (song_time, mpdclient.get_total_time());
                }
 
                private void cb_total_time_changed (int total_time) {
+                       if (this.progress_bar_sync == false)
+                               return;
                        set_time (mpdclient.get_time(), total_time);
                }
 
_______________________________________________
Xfce4-commits mailing list
[email protected]
https://mail.xfce.org/mailman/listinfo/xfce4-commits

Reply via email to