]> Pileus Git - ~andy/gtk/commitdiff
Reset the pressed state of a button when the screen changes
authorChristian Dywan <christian@twotoasts.de>
Fri, 11 Dec 2009 16:17:38 +0000 (17:17 +0100)
committerChristian Dywan <christian@twotoasts.de>
Fri, 11 Dec 2009 16:17:38 +0000 (17:17 +0100)
Fixes: https://bugzilla.gnome.org/show_bug.cgi?id=599397
gtk/gtkbutton.c

index db4680499d2aff1cbbc8aab58d86cabfacaeaab3..2f8b98f39a5942dd8b55ac259f0b6301759f4724 100644 (file)
@@ -2137,12 +2137,23 @@ static void
 gtk_button_screen_changed (GtkWidget *widget,
                           GdkScreen *previous_screen)
 {
+  GtkButton *button;
   GtkSettings *settings;
   guint show_image_connection;
 
   if (!gtk_widget_has_screen (widget))
     return;
 
+  button = GTK_BUTTON (widget);
+
+  /* If the button is being pressed while the screen changes the
+    release might never occur, so we reset the state. */
+  if (button->button_down)
+    {
+      button->button_down = FALSE;
+      gtk_button_update_state (button);
+    }
+
   settings = gtk_widget_get_settings (widget);
 
   show_image_connection = 
@@ -2159,7 +2170,7 @@ gtk_button_screen_changed (GtkWidget *widget,
                     I_("gtk-button-connection"),
                     GUINT_TO_POINTER (show_image_connection));
 
-  show_image_change_notify (GTK_BUTTON (widget));
+  show_image_change_notify (button);
 }
 
 static void