Automatically flush window when doing non-double-buffered expose

Applications using non-double-buffered drawing using cairo (e.g. Abiword)
can draw directly to the window using cairo and thus manage to avoid
the automatic flushing of outstanding moves. This can cause redraw
inconsistencies like bug 593507.

We fix this by always flushing when exposing non-double-buffered widgets.
This commit is contained in:
Alexander Larsson 2009-09-14 16:07:43 +02:00
parent cfeba9c389
commit 7ab7ffa542
2 changed files with 10 additions and 1 deletions

View File

@ -662,6 +662,7 @@ gdk_window_resize
gdk_window_move_resize
gdk_window_scroll
gdk_window_move_region
gdk_window_flush
gdk_window_ensure_native
gdk_window_reparent
gdk_window_clear

View File

@ -1559,7 +1559,15 @@ gtk_main_do_event (GdkEvent *event)
gdk_window_end_paint (event->any.window);
}
else
gtk_widget_send_expose (event_widget, event);
{
/* The app may paint with a previously allocated cairo_t,
which will draw directly to the window. We can't catch cairo
drap operatoins to automatically flush the window, thus we
need to explicitly flush any outstanding moves or double
buffering */
gdk_window_flush (event->any.window);
gtk_widget_send_expose (event_widget, event);
}
break;
case GDK_PROPERTY_NOTIFY: