static void
gis_summary_page_shown (GisPage *page)
{
  GisSummaryPage *summary = GIS_SUMMARY_PAGE (page);
  GisSummaryPagePrivate *priv = gis_summary_page_get_instance_private (summary);

  gis_driver_save_data (GIS_PAGE (page)->driver);

  gis_driver_get_user_permissions (GIS_PAGE (page)->driver,
                                   &priv->user_account,
                                   &priv->user_password);

  gtk_widget_grab_focus (priv->start_button);
}
static void
gis_finished_page_shown (GisPage *page)
{
  GisFinishedPage *self = GIS_FINISHED_PAGE (page);
  GisFinishedPagePrivate *priv = gis_finished_page_get_instance_private (self);
  GError *error = gis_store_get_error();

  gis_driver_save_data (GIS_PAGE (page)->driver);

  if (error != NULL)
    {
      GisAssistant *assistant = gis_driver_get_assistant (page->driver);
      const gchar *heading = NULL;
      const gchar *detail = error->message;

      g_warning ("%s: %s %d %s", G_STRFUNC,
                 g_quark_to_string (error->domain), error->code, error->message);

      if (error->domain == GIS_UNATTENDED_ERROR)
        {
          heading = _("Oops, something is wrong with your unattended installation configuration.");
        }
      else if (error->domain == GIS_IMAGE_ERROR)
        {
          heading = _("Oops, something is wrong with your Endless OS file.");
        }
      else if (error->domain == GIS_DISK_ERROR)
        {
          heading = _("Oops, something went wrong while finding suitable disks to reformat.");
        }
      else if (error->domain == GIS_INSTALL_ERROR)
        {
          heading = _("Oops, something went wrong while reformatting.");
        }
      else if (g_error_matches (error, G_IO_ERROR, G_IO_ERROR_CANCELLED))
        {
          heading = error->message;
          detail = NULL;
          gtk_widget_hide (GTK_WIDGET (priv->error_label));
          gtk_widget_hide (GTK_WIDGET (priv->diagnostics_label));
          gtk_widget_hide (GTK_WIDGET (priv->support_label));
        }
      else
        {
          heading = _("Oops, something went wrong.");
        }

      if (heading != NULL)
        gtk_label_set_text (priv->error_heading_label, heading);

      if (detail != NULL)
        gtk_label_set_text (priv->error_label, detail);

      gtk_widget_show (priv->error_box);
      gtk_widget_hide (priv->success_box);
      gis_assistant_locale_changed (assistant);

      if (!g_error_matches (error, G_IO_ERROR, G_IO_ERROR_CANCELLED))
        {
          /* Running eos-diagnostics can be slow enough that we can't do it
           * synchronously on the UI thread.
           */
          GFile *image_dir = G_FILE (gis_store_get_object (GIS_STORE_IMAGE_DIR));
          /* See implementation of gis_write_diagnostics_async for rationale. */
          const gchar *home_dir = priv->gedit != NULL ? g_get_home_dir () : NULL;

          g_application_hold (G_APPLICATION (page->driver));
          gis_write_diagnostics_async (NULL, image_dir, home_dir,
                                       NULL, write_diagnostics_cb,
                                       g_object_ref (self));
        }

      if (gis_store_is_unattended())
        {
          g_timeout_add_seconds (1, (GSourceFunc)toggle_leds, page);
        }

      /* If running within a live session, hide the "Turn off" button on error,
       * since we have a perfectly good [X] button on the titlebar and we want
       * to encourage the user to notice the link to the diagnostics file.
       */
      GisDriverMode mode = gis_driver_get_mode (GIS_PAGE (self)->driver);
      gtk_widget_set_visible (GTK_WIDGET (priv->restart_button),
                              mode == GIS_DRIVER_MODE_NEW_USER);
    }
  else
    {
      gboolean optical = is_eosdvd ();

      gtk_widget_set_visible (priv->removelabel_usb, !optical);
      gtk_widget_set_visible (priv->removelabel_dvd,  optical);
    }
}