Both abiword and gnumeric do something like:
cr = gdk_cairo_create(win);
...do some drawing
then relase the cairo.
Will this still work if we use
gdk_window_begin_paint_rect (win, rect);
cr = gdk_cairo_create (win);
...do some drawing
gdk_window_end_paint (win);