? docs/tools/.deps
? docs/tools/.libs
? gdk/win32/rc/.deps
? gtk/theme-bits/.deps
? gtk/theme-bits/.libs
? gtk/xdgmime/.deps
? gtk/xdgmime/.libs
? gtk/xdgmime/libxdgmime.la
? gtk/xdgmime/xdgmime.lo
? gtk/xdgmime/xdgmimealias.lo
? gtk/xdgmime/xdgmimecache.lo
? gtk/xdgmime/xdgmimeglob.lo
? gtk/xdgmime/xdgmimeint.lo
? gtk/xdgmime/xdgmimemagic.lo
? gtk/xdgmime/xdgmimeparent.lo
? modules/engines/ms-windows/.deps
? perf/.deps
? perf/.libs
Index: gtk/gtkbutton.c
===================================================================
RCS file: /cvs/gnome/gtk+/gtk/gtkbutton.c,v
retrieving revision 1.131
diff -u -d -p -r1.131 gtkbutton.c
--- gtk/gtkbutton.c	30 Jun 2005 21:18:34 -0000	1.131
+++ gtk/gtkbutton.c	12 Sep 2005 21:04:46 -0000
@@ -1814,6 +1814,28 @@ gtk_button_state_changed (GtkWidget    *
       button->in_button = FALSE;
       gtk_real_button_released (button);
     }
+  else if (previous_state == GTK_STATE_INSENSITIVE)
+    {
+      GdkDisplay *display;
+      GdkWindow *window;
+
+      display = gtk_widget_get_display (widget);
+      window = gdk_display_get_window_at_pointer (display, NULL, NULL);
+
+      /* Walk up the window's ancestry and check if one of the ancestors is
+       * actually us.  If so, the cursor is hovering above us and we need to
+       * update. */
+      while (window) {
+	if (window == widget->window)
+	  {
+	    button->in_button = TRUE;
+	    gtk_button_enter (button);
+	    break;
+	  }
+
+	window = gdk_window_get_parent (window);
+      }
+    }
 }
 
 static void
