gnome-media r4211 - in trunk/gnome-volume-control: . src



Author: hadess
Date: Wed Feb 18 09:31:59 2009
New Revision: 4211
URL: http://svn.gnome.org/viewvc/gnome-media?rev=4211&view=rev

Log:
2009-02-18  Bastien Nocera  <hadess hadess net>

	* src/gvc-balance-bar.c (_scale_box_new),
	(on_scale_button_press_event), (on_scale_button_release_event),
	(on_scale_scroll_event): Make the balance bar instant-apply
	(Closes: #566423)



Modified:
   trunk/gnome-volume-control/ChangeLog
   trunk/gnome-volume-control/src/gvc-balance-bar.c

Modified: trunk/gnome-volume-control/src/gvc-balance-bar.c
==============================================================================
--- trunk/gnome-volume-control/src/gvc-balance-bar.c	(original)
+++ trunk/gnome-volume-control/src/gvc-balance-bar.c	Wed Feb 18 09:31:59 2009
@@ -27,6 +27,7 @@
 #include <glib.h>
 #include <glib/gi18n.h>
 #include <gtk/gtk.h>
+#include <canberra-gtk.h>
 
 #include "gvc-balance-bar.h"
 
@@ -45,6 +46,7 @@
         GtkAdjustment *adjustment;
         GtkSizeGroup  *size_group;
         gboolean       symmetric;
+        gboolean       click_lock;
 };
 
 enum
@@ -57,6 +59,16 @@
 static void     gvc_balance_bar_init       (GvcBalanceBar      *balance_bar);
 static void     gvc_balance_bar_finalize   (GObject            *object);
 
+static gboolean on_scale_button_press_event   (GtkWidget      *widget,
+                                               GdkEventButton *event,
+                                               GvcBalanceBar  *bar);
+static gboolean on_scale_button_release_event (GtkWidget      *widget,
+                                               GdkEventButton *event,
+                                               GvcBalanceBar  *bar);
+static gboolean on_scale_scroll_event         (GtkWidget      *widget,
+                                               GdkEventScroll *event,
+                                               GvcBalanceBar  *bar);
+
 G_DEFINE_TYPE (GvcBalanceBar, gvc_balance_bar, GTK_TYPE_HBOX)
 
 static GtkWidget *
@@ -102,7 +114,16 @@
         bar->priv->end_box = ebox = gtk_hbox_new (FALSE, 6);
         gtk_box_pack_start (GTK_BOX (box), ebox, FALSE, FALSE, 0);
 
-        gtk_range_set_update_policy (GTK_RANGE (priv->scale), GTK_UPDATE_DISCONTINUOUS);
+        gtk_range_set_update_policy (GTK_RANGE (priv->scale), GTK_UPDATE_CONTINUOUS);
+        ca_gtk_widget_disable_sounds (bar->priv->scale, FALSE);
+        gtk_widget_add_events (bar->priv->scale, GDK_SCROLL_MASK);
+
+        g_signal_connect (G_OBJECT (bar->priv->scale), "button-press-event",
+                          G_CALLBACK (on_scale_button_press_event), bar);
+        g_signal_connect (G_OBJECT (bar->priv->scale), "button-release-event",
+                          G_CALLBACK (on_scale_button_release_event), bar);
+        g_signal_connect (G_OBJECT (bar->priv->scale), "scroll-event",
+                          G_CALLBACK (on_scale_scroll_event), bar);
 
         if (bar->priv->size_group != NULL) {
                 gtk_size_group_add_widget (bar->priv->size_group, sbox);
@@ -250,6 +271,52 @@
         p == PA_CHANNEL_POSITION_TOP_REAR_RIGHT;
 }
 
+static gboolean
+on_scale_button_press_event (GtkWidget      *widget,
+                             GdkEventButton *event,
+                             GvcBalanceBar  *bar)
+{
+        bar->priv->click_lock = TRUE;
+
+        return FALSE;
+}
+
+static gboolean
+on_scale_button_release_event (GtkWidget      *widget,
+                               GdkEventButton *event,
+                               GvcBalanceBar  *bar)
+{
+        bar->priv->click_lock = FALSE;
+
+        return FALSE;
+}
+
+static gboolean
+on_scale_scroll_event (GtkWidget      *widget,
+                       GdkEventScroll *event,
+                       GvcBalanceBar  *bar)
+{
+        gdouble value;
+
+        value = gtk_adjustment_get_value (bar->priv->adjustment);
+
+        if (event->direction == GDK_SCROLL_UP) {
+                if (value + 0.01 > 1.0)
+                        value = 1.0;
+                else
+                        value = value + 0.01;
+                gtk_adjustment_set_value (bar->priv->adjustment, value);
+        } else if (event->direction == GDK_SCROLL_DOWN) {
+                if (value - 0.01 < 0)
+                        value = 0.0;
+                else
+                        value = value - 0.01;
+                gtk_adjustment_set_value (bar->priv->adjustment, value);
+        }
+
+        return TRUE;
+}
+
 static void
 on_adjustment_value_changed (GtkAdjustment *adjustment,
                              GvcBalanceBar *bar)



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