diff options
author | Christian Persch <chpe@cvs.gnome.org> | 2006-06-20 17:36:55 +0000 |
---|---|---|
committer | Christian Persch <chpe@src.gnome.org> | 2006-06-20 17:36:55 +0000 |
commit | 0bce4d271acc1d280df4aafd6d1d3409a088d1c6 (patch) | |
tree | 704b56b54b6c8e52dfe7b7810c446ed88202f16a /gtk/gtkprinteroptionwidget.c | |
parent | 2406a5b256da7b0f23bd35ad391266987221d3a5 (diff) | |
download | gtk+-0bce4d271acc1d280df4aafd6d1d3409a088d1c6.tar.gz |
Convert input to filename encoding and construct an URI from that. Add
2006-06-20 Christian Persch <chpe@cvs.gnome.org>
* gtk/gtkprinteroptionwidget.c: (filesave_changed_cb),
(alternative_set), (construct_widgets): Convert input to filename
encoding and construct an URI from that.
* gtk/gtkprintsettings.h: Add OUTPUT_FILE_FORMAT and OUTPUT_URI keys.
* modules/printbackends/pdf/gtkprintbackendpdf.c: Use those defines.
Step 1 from bug #339592.
Diffstat (limited to 'gtk/gtkprinteroptionwidget.c')
-rw-r--r-- | gtk/gtkprinteroptionwidget.c | 46 |
1 files changed, 28 insertions, 18 deletions
diff --git a/gtk/gtkprinteroptionwidget.c b/gtk/gtkprinteroptionwidget.c index 2b5941164f..85b767baab 100644 --- a/gtk/gtkprinteroptionwidget.c +++ b/gtk/gtkprinteroptionwidget.c @@ -411,31 +411,41 @@ filesave_changed_cb (GtkWidget *w, GtkPrinterOptionWidget *widget) { GtkPrinterOptionWidgetPrivate *priv = widget->priv; - char *value; - char *directory; - const char *file; + gchar *uri, *directory, *path; + const gchar *file; - /* combine the value of the chooser with the value of the entry */ - g_signal_handler_block (priv->source, priv->source_changed_handler); - /* TODO: how do we support nonlocal file systems? */ directory = gtk_file_chooser_get_current_folder (GTK_FILE_CHOOSER (priv->combo)); - file = gtk_entry_get_text (GTK_ENTRY (priv->entry)); + file = g_filename_from_utf8 (gtk_entry_get_text (GTK_ENTRY (priv->entry)), + -1, NULL, NULL, NULL); + if (file == NULL) + return; + + /* combine the value of the chooser with the value of the entry */ + g_signal_handler_block (priv->source, priv->source_changed_handler); if (g_path_is_absolute (file)) - value = g_strdup (file); + uri = g_filename_to_uri (file, NULL, NULL); + else + { #ifdef G_OS_UNIX - else if (file[0] == '~' && file[1] == '/') - value = g_build_filename (g_get_home_dir (), file + 2, NULL); + if (file[0] == '~' && file[1] == '/') + { + directory = g_strdup (g_get_home_dir ()); + file += 2; + } #endif - else - value = g_build_filename (directory, file, NULL); + + path = g_build_filename (directory, file, NULL); + uri = g_filename_to_uri (path, NULL, NULL); + g_free (path); + } - if (value) - gtk_printer_option_set (priv->source, value); + if (uri) + gtk_printer_option_set (priv->source, uri); g_free (directory); - g_free (value); + g_free (uri); g_signal_handler_unblock (priv->source, priv->source_changed_handler); emit_changed (widget); @@ -505,7 +515,7 @@ alternative_set (GtkWidget *box, { gtk_container_foreach (GTK_CONTAINER (box), (GtkCallback) select_maybe, - value); + (gpointer) value); } static GSList * @@ -619,8 +629,8 @@ construct_widgets (GtkPrinterOptionWidget *widget) /* TODO: make this a gtkfilechooserentry once we move to GTK */ priv->entry = gtk_entry_new (); - priv->combo = gtk_file_chooser_button_new (_("Print to PDF"), - GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER); + priv->combo = gtk_file_chooser_button_new (source->display_text, + GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER); label = gtk_label_new_with_mnemonic (_("_Name:")); gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5); |