static gboolean
draw_success_end_wait_callback (CalibArea *area)
{
    on_delete_event (NULL, NULL, area);

    return FALSE;
}
static gboolean
on_focus_out_event (GtkWidget *widget,
		    GdkEvent  *event,
		    CalibArea *area)
{
    if (area->success)
        return FALSE;

    /* If the calibrator window looses focus, simply bail out... */
    on_delete_event (widget, NULL, area);

    return FALSE;
}
static gboolean
on_key_release_event(GtkWidget   *widget,
                     GdkEventKey *event,
                     CalibArea   *area)
{
    if (area->success)
        return FALSE;
    if (event->type != GDK_KEY_RELEASE)
        return FALSE;
    if (event->keyval != GDK_KEY_Escape)
        return FALSE;

    on_delete_event (widget, NULL, area);

    return FALSE;
}
static gboolean
on_key_release_event(ClutterActor    *actor,
                     ClutterKeyEvent *event,
                     CalibArea       *area)
{
  if (area->success ||
      event->type != CLUTTER_KEY_RELEASE ||
      event->keyval != CLUTTER_KEY_Escape)
    {
      return FALSE;
    }

  on_delete_event (area->window, NULL, area);

  return FALSE;
}
static void
set_calibration_status (CalibArea *area)
{
  GtkIconTheme *icon_theme;
  GtkIconInfo  *icon_info;
  GdkRGBA       white;

  icon_theme = gtk_icon_theme_get_default ();
  icon_info = gtk_icon_theme_lookup_icon (icon_theme,
                                          ICON_SUCCESS,
                                          ICON_SIZE,
                                          GTK_ICON_LOOKUP_USE_BUILTIN);
  if (icon_info == NULL)
    {
      g_warning ("Failed to find icon \"%s\"", ICON_SUCCESS);
      goto out;
    }

  gdk_rgba_parse (&white, "White");
  area->icon_success = gtk_icon_info_load_symbolic (icon_info,
                                                    &white,
                                                    NULL,
                                                    NULL,
                                                    NULL,
                                                    NULL,
                                                    NULL);
  g_object_unref (icon_info);

  if (!area->icon_success)
    g_warning ("Failed to load icon \"%s\"", ICON_SUCCESS);

 out:
  area->success = finish (&area->calibrator, &area->axis, &area->swap);
  if (area->success && area->icon_success)
    {
      set_success (area);
      g_timeout_add (END_TIME,
                     (GSourceFunc) draw_success_end_wait_callback,
                     area);
    }
  else
    {
      on_delete_event (NULL, NULL, area);
    }
}