Use GdkEventExpose.region

Why.
The region field of
GdkEventExpose allows you to redraw
less than the traditional
GdkEventRegion.area.

In GTK+ 1.x, the GdkEventExpose
structure only had an area field to
let you determine the region that you needed to redraw. In GTK+
2.x, this field exists for compatibility and as a simple
interface. However, there is also a
region field which contains a
fine-grained region. The area field
is simply the bounding rectangle of the
region.

Widgets that are very expensive to re-render, such as an image
editor, may prefer to use the
GdkEventExpose.region field to paint
as little as possible. Widgets that just use a few drawing
primitives, such as labels and buttons, may prefer to use the
traditional GdkEventExpose.area field
for simplicity.

Regions have an internal representation that is accessible as a
list of rectangles. To turn the
GdkEventExpose.region field into such
a list, use gdk_region_get_rectangles():