diff --git a/ChangeLog b/ChangeLog index 1ab825dc70..1bcb9fecad 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,12 @@ +2007-04-18 Richard Hult + + * gdk/quartz/gdkwindow-quartz.c: + (gdk_window_quartz_process_updates_internal), + (gdk_window_quartz_process_all_updates), + (gdk_window_impl_quartz_process_updates): Refactor the process + updates functions to share code between them. Also fixes bug + #427660 by not updating larger regions than necessary. + 2007-04-18 Matthias Clasen * gdk/gdkregion-generic.h (GROWREGION): Handle the case diff --git a/gdk/quartz/gdkwindow-quartz.c b/gdk/quartz/gdkwindow-quartz.c index 3b93710441..93b2f218e8 100644 --- a/gdk/quartz/gdkwindow-quartz.c +++ b/gdk/quartz/gdkwindow-quartz.c @@ -252,6 +252,34 @@ gdk_window_impl_quartz_end_paint (GdkPaintable *paintable) } } +static void +gdk_window_quartz_process_updates_internal (GdkWindow *window) +{ + GdkWindowObject *private = (GdkWindowObject *) window; + GdkWindowImplQuartz *impl = (GdkWindowImplQuartz *) private->impl; + + if (private->update_area) + { + int i, n_rects; + GdkRectangle *rects; + + gdk_region_get_rectangles (private->update_area, &rects, &n_rects); + + gdk_region_destroy (private->update_area); + private->update_area = NULL; + + for (i = 0; i < n_rects; i++) + { + [impl->view setNeedsDisplayInRect:NSMakeRect (rects[i].x, rects[i].y, + rects[i].width, rects[i].height)]; + } + + [impl->view displayIfNeeded]; + + g_free (rects); + } +} + static void gdk_window_quartz_process_all_updates (void) { @@ -267,28 +295,7 @@ gdk_window_quartz_process_all_updates (void) while (tmp_list) { - GdkWindowObject *private = tmp_list->data; - GdkWindowImplQuartz *impl = (GdkWindowImplQuartz *) private->impl; - int i, n_rects; - GdkRectangle *rects; - - if (private->update_area) - { - gdk_region_get_rectangles (private->update_area, &rects, &n_rects); - - gdk_region_destroy (private->update_area); - private->update_area = NULL; - - for (i = 0; i < n_rects; i++) - { - [impl->view setNeedsDisplayInRect:NSMakeRect (rects[i].x, rects[i].y, - rects[i].width, rects[i].height)]; - } - - [impl->view displayIfNeeded]; - - g_free (rects); - } + gdk_window_quartz_process_updates_internal (tmp_list->data); g_object_unref (tmp_list->data); tmp_list = tmp_list->next; @@ -350,12 +357,9 @@ gdk_window_impl_quartz_process_updates (GdkPaintable *paintable, if (private->update_area) { - gdk_region_destroy (private->update_area); - private->update_area = NULL; - } - - [impl->view setNeedsDisplay: YES]; - update_windows = g_slist_remove (update_windows, private); + gdk_window_quartz_process_updates_internal ((GdkWindow *) private); + update_windows = g_slist_remove (update_windows, private); + } } static void