]> Pileus Git - ~andy/gtk/commitdiff
scrolledwindow: set GDK_EXPOSURE_MASK on the overshoot window
authorCosimo Cecchi <cosimoc@gnome.org>
Wed, 17 Oct 2012 04:59:59 +0000 (00:59 -0400)
committerCosimo Cecchi <cosimoc@gnome.org>
Wed, 17 Oct 2012 13:56:49 +0000 (09:56 -0400)
Currently we use gtk_style_context_set_background() when the state flags
change in order to propagate the background color to the overshoot
window, but this is actually only needed because the window doesn't get
expose events, since we always draw a full background in draw().
This also fixes some problems when the GdkWindow of the scrolled
window's child is composited, as seen in oxygen-gtk3.

https://bugzilla.gnome.org/show_bug.cgi?id=686265

gtk/gtkscrolledwindow.c

index a18c4cf2b5a9dadee980f6b337ff634690a9fa1a..7929863a0258483ccb21e06e96e26b6a2dfe3497 100644 (file)
@@ -274,9 +274,6 @@ static void  gtk_scrolled_window_realize               (GtkWidget           *wid
 static void  gtk_scrolled_window_unrealize             (GtkWidget           *widget);
 static void  gtk_scrolled_window_map                   (GtkWidget           *widget);
 static void  gtk_scrolled_window_unmap                 (GtkWidget           *widget);
-static void  gtk_scrolled_window_state_flags_changed   (GtkWidget           *widget,
-                                                        GtkStateFlags        previous_state);
-static void  gtk_scrolled_window_style_updated         (GtkWidget           *widget);
 
 static void  gtk_scrolled_window_grab_notify           (GtkWidget           *widget,
                                                         gboolean             was_grabbed);
@@ -352,8 +349,6 @@ gtk_scrolled_window_class_init (GtkScrolledWindowClass *class)
   widget_class->unrealize = gtk_scrolled_window_unrealize;
   widget_class->map = gtk_scrolled_window_map;
   widget_class->unmap = gtk_scrolled_window_unmap;
-  widget_class->state_flags_changed = gtk_scrolled_window_state_flags_changed;
-  widget_class->style_updated = gtk_scrolled_window_style_updated;
   widget_class->grab_notify = gtk_scrolled_window_grab_notify;
 
   container_class->add = gtk_scrolled_window_add;
@@ -3379,14 +3374,13 @@ gtk_scrolled_window_realize (GtkWidget *widget)
   attributes.wclass = GDK_INPUT_OUTPUT;
   attributes.visual = gtk_widget_get_visual (widget);
   attributes.event_mask = GDK_VISIBILITY_NOTIFY_MASK |
-    GDK_BUTTON_MOTION_MASK | GDK_TOUCH_MASK;
+    GDK_BUTTON_MOTION_MASK | GDK_TOUCH_MASK | GDK_EXPOSURE_MASK;
 
   attributes_mask = GDK_WA_X | GDK_WA_Y | GDK_WA_VISUAL;
 
   scrolled_window->priv->overshoot_window =
     gdk_window_new (gtk_widget_get_parent_window (widget),
                     &attributes, attributes_mask);
-
   gdk_window_set_user_data (scrolled_window->priv->overshoot_window, widget);
 
   child_widget = gtk_bin_get_child (GTK_BIN (widget));
@@ -3432,37 +3426,6 @@ gtk_scrolled_window_unmap (GtkWidget *widget)
   GTK_WIDGET_CLASS (gtk_scrolled_window_parent_class)->unmap (widget);
 }
 
-static void
-_gtk_scrolled_window_update_background (GtkScrolledWindow *scrolled_window)
-{
-  GtkWidget *widget = GTK_WIDGET (scrolled_window);
-
-  if (gtk_widget_get_realized (widget))
-    {
-      GtkStyleContext *context;
-
-      context = gtk_widget_get_style_context (widget);
-      gtk_style_context_set_background (context, scrolled_window->priv->overshoot_window);
-    }
-}
-
-static void
-gtk_scrolled_window_state_flags_changed (GtkWidget     *widget,
-                                         GtkStateFlags  previous_state)
-{
-  _gtk_scrolled_window_update_background (GTK_SCROLLED_WINDOW (widget));
-  gtk_widget_queue_draw (widget);
-}
-
-static void
-gtk_scrolled_window_style_updated (GtkWidget *widget)
-{
-  GTK_WIDGET_CLASS (gtk_scrolled_window_parent_class)->style_updated (widget);
-
-  _gtk_scrolled_window_update_background (GTK_SCROLLED_WINDOW (widget));
-  gtk_widget_queue_draw (widget);
-}
-
 static void
 gtk_scrolled_window_grab_notify (GtkWidget *widget,
                                  gboolean   was_grabbed)