[gtk+/gtk-2-16] Bug 461944 – pressing the volume icon in full screen shuts down the sound



commit 072ddd923d23956d48acaa5fed8e26ca89e57f18
Author: Bastien Nocera <hadess hadess net>
Date:   Mon Jun 22 17:19:21 2009 +0100

    Bug 461944 â?? pressing the volume icon in full screen shuts down the sound
    
    Don't pass the click on the button through to the scale when the
    dock popup will be moved, otherwise we could end up changing the
    sound in unexcepted ways (to zero for vertical popups at the bottom
    of the screen for example).

 gtk/gtkscalebutton.c |   21 ++++++++++++++++-----
 1 files changed, 16 insertions(+), 5 deletions(-)
---
diff --git a/gtk/gtkscalebutton.c b/gtk/gtkscalebutton.c
index 628121e..e159560 100644
--- a/gtk/gtkscalebutton.c
+++ b/gtk/gtkscalebutton.c
@@ -927,7 +927,9 @@ gtk_scale_popup (GtkWidget *widget,
   gdouble v;
   GdkDisplay *display;
   GdkScreen *screen;
+  gboolean is_moved;
 
+  is_moved = FALSE;
   button = GTK_SCALE_BUTTON (widget);
   priv = button->priv;
   adj = priv->adjustment;
@@ -1004,15 +1006,24 @@ gtk_scale_popup (GtkWidget *widget,
       else
         x += button_event->x;
 
-      if (y < rect.y)
+      /* Move the dock, but set is_moved so we
+       * don't forward the first click later on,
+       * as it could make the scale go to the bottom */
+      if (y < rect.y) {
 	y = rect.y;
-      else if (y + d->allocation.height > rect.height + rect.y)
+	is_moved = TRUE;
+      } else if (y + d->allocation.height > rect.height + rect.y) {
 	y = rect.y + rect.height - d->allocation.height;
+	is_moved = TRUE;
+      }
 
-      if (x < rect.x)
+      if (x < rect.x) {
 	x = rect.x;
-      else if (x + d->allocation.width > rect.width + rect.x)
+	is_moved = TRUE;
+      } else if (x + d->allocation.width > rect.width + rect.x) {
 	x = rect.x + rect.width - d->allocation.width;
+	is_moved = TRUE;
+      }
     }
 
   gtk_window_move (GTK_WINDOW (priv->dock), x, y);
@@ -1043,7 +1054,7 @@ gtk_scale_popup (GtkWidget *widget,
 
   gtk_widget_grab_focus (priv->dock);
 
-  if (event->type == GDK_BUTTON_PRESS)
+  if (event->type == GDK_BUTTON_PRESS && !is_moved)
     {
       GdkEventButton *e;
       GdkEventButton *button_event = (GdkEventButton *) event;



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