From 072ddd923d23956d48acaa5fed8e26ca89e57f18 Mon Sep 17 00:00:00 2001 From: Bastien Nocera Date: Mon, 22 Jun 2009 17:19:21 +0100 Subject: [PATCH] =?UTF-8?q?Bug=20461944=20=E2=80=93=20pressing=20the=20vol?= =?UTF-8?q?ume=20icon=20in=20full=20screen=20shuts=20down=20the=20sound?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 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 file changed, 16 insertions(+), 5 deletions(-) diff --git a/gtk/gtkscalebutton.c b/gtk/gtkscalebutton.c index 628121e4c4..e159560423 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;