diff --git a/gdk/gdksurface.c b/gdk/gdksurface.c index 7db9f2cc8d..c48a3b0959 100644 --- a/gdk/gdksurface.c +++ b/gdk/gdksurface.c @@ -1371,9 +1371,8 @@ static void gdk_surface_paint_on_clock (GdkFrameClock *clock, void *data) { - GdkSurface *surface; - - surface = GDK_SURFACE (data); + GdkSurface *surface = GDK_SURFACE (data); + GList *l; g_return_if_fail (GDK_IS_SURFACE (surface)); @@ -1394,6 +1393,9 @@ gdk_surface_paint_on_clock (GdkFrameClock *clock, gdk_surface_remove_update_surface (surface); } + for (l = surface->children; l; l = l->next) + gdk_surface_paint_on_clock (clock, l->data); + g_object_unref (surface); } @@ -3725,34 +3727,40 @@ gdk_surface_set_frame_clock (GdkSurface *surface, if (clock) { g_object_ref (clock); - g_signal_connect (G_OBJECT (clock), - "flush-events", - G_CALLBACK (gdk_surface_flush_events), - surface); - g_signal_connect (G_OBJECT (clock), - "paint", - G_CALLBACK (gdk_surface_paint_on_clock), - surface); - g_signal_connect (G_OBJECT (clock), - "resume-events", - G_CALLBACK (gdk_surface_resume_events), - surface); + if (surface->parent == NULL) + { + g_signal_connect (G_OBJECT (clock), + "flush-events", + G_CALLBACK (gdk_surface_flush_events), + surface); + g_signal_connect (G_OBJECT (clock), + "resume-events", + G_CALLBACK (gdk_surface_resume_events), + surface); + g_signal_connect (G_OBJECT (clock), + "paint", + G_CALLBACK (gdk_surface_paint_on_clock), + surface); + } } if (surface->frame_clock) { - if (surface->frame_clock_events_paused) - gdk_surface_resume_events (surface->frame_clock, G_OBJECT (surface)); + if (surface->parent == NULL) + { + if (surface->frame_clock_events_paused) + gdk_surface_resume_events (surface->frame_clock, G_OBJECT (surface)); - g_signal_handlers_disconnect_by_func (G_OBJECT (surface->frame_clock), - G_CALLBACK (gdk_surface_flush_events), - surface); - g_signal_handlers_disconnect_by_func (G_OBJECT (surface->frame_clock), - G_CALLBACK (gdk_surface_paint_on_clock), - surface); - g_signal_handlers_disconnect_by_func (G_OBJECT (surface->frame_clock), - G_CALLBACK (gdk_surface_resume_events), - surface); + g_signal_handlers_disconnect_by_func (G_OBJECT (surface->frame_clock), + G_CALLBACK (gdk_surface_flush_events), + surface); + g_signal_handlers_disconnect_by_func (G_OBJECT (surface->frame_clock), + G_CALLBACK (gdk_surface_resume_events), + surface); + g_signal_handlers_disconnect_by_func (G_OBJECT (surface->frame_clock), + G_CALLBACK (gdk_surface_paint_on_clock), + surface); + } g_object_unref (surface->frame_clock); }