+}
+
+static void
+filesave_choose_cb (GtkWidget *button,
+ GtkPrinterOptionWidget *widget)
+{
+ GtkPrinterOptionWidgetPrivate *priv = widget->priv;
+ gchar *last_location = NULL;
+ GtkWidget *dialog;
+ GtkWindow *toplevel;
+
+ /* this will be unblocked in the dialog_response_callback function */
+ g_signal_handler_block (priv->source, priv->source_changed_handler);
+
+ toplevel = GTK_WINDOW (gtk_widget_get_toplevel (GTK_WIDGET (widget)));
+ dialog = gtk_file_chooser_dialog_new (_("Select a filename"),
+ toplevel,
+ GTK_FILE_CHOOSER_ACTION_SAVE,
+ GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
+ _("_Select"), GTK_RESPONSE_ACCEPT,
+ NULL);
+
+ /* The confirmation dialog will appear, when the user clicks print */
+ gtk_file_chooser_set_do_overwrite_confirmation (GTK_FILE_CHOOSER (dialog), FALSE);
+
+ /* select the current filename in the dialog */
+ if (priv->source != NULL)
+ {
+ priv->last_location = last_location = g_strdup (priv->source->value);
+ if (last_location)
+ {
+ GFile *file;
+ gchar *basename;
+ gchar *basename_utf8;
+
+ gtk_file_chooser_select_uri (GTK_FILE_CHOOSER (dialog), last_location);
+ file = g_file_new_for_uri (last_location);
+ basename = g_file_get_basename (file);
+ basename_utf8 = g_filename_to_utf8 (basename, -1, NULL, NULL, NULL);
+ gtk_file_chooser_set_current_name (GTK_FILE_CHOOSER (dialog), basename_utf8);
+ g_free (basename_utf8);
+ g_free (basename);
+ g_object_unref (file);
+ }
+ }
+
+ g_signal_connect (dialog, "response",
+ G_CALLBACK (dialog_response_callback), widget);
+ gtk_window_set_modal (GTK_WINDOW (dialog), TRUE);
+ gtk_window_present (GTK_WINDOW (dialog));