+static void game_expose(Widget w, void *data, void *cb_data)
+{
+ XmDrawingAreaCallbackStruct *cbs = cb_data;
+ XExposeEvent *e = &cbs->event->xexpose;
+ uint_fast32_t tile_mask;
+ Dimension width, height;
+
+ XtVaGetValues(w, XmNwidth, &width, XmNheight, &height, (char *)NULL);
+ if (!(width /= 5) || !(height /= 5))
+ return;
+
+ /* Figure out which tiles have been uncovered */
+ tile_mask = board_right(e->x / width);
+ tile_mask &= board_below(e->y / height);
+ tile_mask &= board_above((e->y + e->height - 1) / height);
+ tile_mask &= board_left((e->x + e->width - 1) / width);
+
+ x11_redraw_game(data, tile_mask);