diff options
Diffstat (limited to 'gtk')
-rw-r--r-- | gtk/gtkroot.c | 21 | ||||
-rw-r--r-- | gtk/gtkwidget.c | 2 | ||||
-rw-r--r-- | gtk/gtkwidgetprivate.h | 2 |
3 files changed, 17 insertions, 8 deletions
diff --git a/gtk/gtkroot.c b/gtk/gtkroot.c index a480173695..6bdf1b74a1 100644 --- a/gtk/gtkroot.c +++ b/gtk/gtkroot.c @@ -195,8 +195,10 @@ gtk_root_after_update_cb (GdkFrameClock *clock, } static void -gtk_root_layout_cb (GdkFrameClock *clock, - GtkRoot *self) +gtk_root_layout_cb (GdkSurface *surface, + int width, + int height, + GtkRoot *self) { GtkWidget *widget = GTK_WIDGET (self); @@ -231,19 +233,22 @@ gtk_root_layout_cb (GdkFrameClock *clock, if (gtk_root_needs_layout (self)) { - gdk_frame_clock_request_phase (clock, GDK_FRAME_CLOCK_PHASE_UPDATE); - gdk_frame_clock_request_phase (clock, GDK_FRAME_CLOCK_PHASE_LAYOUT); + gdk_frame_clock_request_phase (gdk_surface_get_frame_clock (surface), + GDK_FRAME_CLOCK_PHASE_UPDATE); + gdk_surface_request_layout (surface); } } void gtk_root_start_layout (GtkRoot *self) { + GdkSurface *surface; GdkFrameClock *clock; if (!gtk_root_needs_layout (self)) return; + surface = gtk_widget_get_surface (GTK_WIDGET (self)); clock = gtk_widget_get_frame_clock (GTK_WIDGET (self)); if (clock == NULL) return; @@ -260,19 +265,20 @@ gtk_root_start_layout (GtkRoot *self) GINT_TO_POINTER (after_update_handler)); layout_handler = - g_signal_connect (clock, "layout", + g_signal_connect (surface, "layout", G_CALLBACK (gtk_root_layout_cb), self); g_object_set_qdata (G_OBJECT (self), quark_layout_handler, GINT_TO_POINTER (layout_handler)); } gdk_frame_clock_request_phase (clock, GDK_FRAME_CLOCK_PHASE_UPDATE); - gdk_frame_clock_request_phase (clock, GDK_FRAME_CLOCK_PHASE_LAYOUT); + gdk_surface_request_layout (surface); } void gtk_root_stop_layout (GtkRoot *self) { + GdkSurface *surface; GdkFrameClock *clock; guint layout_handler; guint after_update_handler; @@ -287,8 +293,9 @@ gtk_root_stop_layout (GtkRoot *self) if (layout_handler == 0) return; + surface = gtk_widget_get_surface (GTK_WIDGET (self)); clock = gtk_widget_get_frame_clock (GTK_WIDGET (self)); - g_signal_handler_disconnect (clock, layout_handler); + g_signal_handler_disconnect (surface, layout_handler); g_signal_handler_disconnect (clock, after_update_handler); g_object_set_qdata (G_OBJECT (self), quark_layout_handler, NULL); g_object_set_qdata (G_OBJECT (self), quark_after_update_handler, NULL); diff --git a/gtk/gtkwidget.c b/gtk/gtkwidget.c index ab9de00cd2..6d1e3c865d 100644 --- a/gtk/gtkwidget.c +++ b/gtk/gtkwidget.c @@ -3244,7 +3244,7 @@ gtk_widget_remove_surface_transform_changed_callback (GtkWidget *widget, } } -static GdkSurface * +GdkSurface * gtk_widget_get_surface (GtkWidget *widget) { GtkNative *native = gtk_widget_get_native (widget); diff --git a/gtk/gtkwidgetprivate.h b/gtk/gtkwidgetprivate.h index a79ee938da..667df882ce 100644 --- a/gtk/gtkwidgetprivate.h +++ b/gtk/gtkwidgetprivate.h @@ -228,6 +228,8 @@ void gtk_widget_ensure_resize (GtkWidget *widget); void gtk_widget_ensure_allocate (GtkWidget *widget); void _gtk_widget_scale_changed (GtkWidget *widget); +GdkSurface * gtk_widget_get_surface (GtkWidget *widget); + void gtk_widget_render (GtkWidget *widget, GdkSurface *surface, const cairo_region_t *region); |