? app/gui/stTaRxxR Index: app/widgets/gimperrorconsole.c =================================================================== RCS file: /cvs/gnome/gimp/app/widgets/gimperrorconsole.c,v retrieving revision 1.13 diff -u -p -r1.13 gimperrorconsole.c --- app/widgets/gimperrorconsole.c 19 Jan 2004 01:54:09 -0000 1.13 +++ app/widgets/gimperrorconsole.c 26 Feb 2004 18:10:08 -0000 @@ -193,7 +193,7 @@ gimp_error_console_init (GimpErrorConsol g_free (str); - console->filesel = NULL; + console->file_dialog = NULL; } static void @@ -201,8 +201,8 @@ gimp_error_console_destroy (GtkObject *o { GimpErrorConsole *console = GIMP_ERROR_CONSOLE (object); - if (console->filesel) - gtk_widget_destroy (console->filesel); + if (console->file_dialog) + gtk_widget_destroy (console->file_dialog); console->gimp->message_handler = GIMP_MESSAGE_BOX; @@ -214,8 +214,8 @@ gimp_error_console_unmap (GtkWidget *wid { GimpErrorConsole *console = GIMP_ERROR_CONSOLE (widget); - if (console->filesel) - gtk_widget_destroy (console->filesel); + if (console->file_dialog) + gtk_widget_destroy (console->file_dialog); GTK_WIDGET_CLASS (parent_class)->unmap (widget); } @@ -338,7 +338,7 @@ gimp_error_console_save_ext_clicked (Gtk GdkModifierType state, GimpErrorConsole *console) { - GtkFileSelection *filesel; + GtkFileChooser *chooser; if (! gtk_text_buffer_get_selection_bounds (console->text_buffer, NULL, NULL) && @@ -348,38 +348,45 @@ gimp_error_console_save_ext_clicked (Gtk return; } - if (console->filesel) + if (console->file_dialog) { - gtk_window_present (GTK_WINDOW (console->filesel)); + gtk_window_present (GTK_WINDOW (console->file_dialog)); return; } - console->filesel = gtk_file_selection_new (_("Save Error Log to File")); + console->file_dialog = + gtk_file_chooser_dialog_new (_("Save Error Log to File"), NULL, + GTK_FILE_CHOOSER_ACTION_SAVE, + + GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, + GTK_STOCK_SAVE, GTK_RESPONSE_OK, + + NULL); console->save_selection = (state & GDK_SHIFT_MASK) ? TRUE : FALSE; - g_object_add_weak_pointer (G_OBJECT (console->filesel), - (gpointer *) &console->filesel); + g_object_add_weak_pointer (G_OBJECT (console->file_dialog), + (gpointer *) &console->file_dialog); - filesel = GTK_FILE_SELECTION (console->filesel); + chooser = GTK_FILE_CHOOSER (console->file_dialog); - gtk_window_set_screen (GTK_WINDOW (filesel), + gtk_window_set_screen (GTK_WINDOW (chooser), gtk_window_get_screen (GTK_WINDOW (console))); - gtk_window_set_position (GTK_WINDOW (filesel), GTK_WIN_POS_MOUSE); - gtk_window_set_role (GTK_WINDOW (filesel), "gimp-save-errors"); + gtk_window_set_position (GTK_WINDOW (chooser), GTK_WIN_POS_MOUSE); + gtk_window_set_role (GTK_WINDOW (chooser), "gimp-save-errors"); - gtk_container_set_border_width (GTK_CONTAINER (filesel), 6); - gtk_container_set_border_width (GTK_CONTAINER (filesel->button_area), 4); - - g_signal_connect (filesel, "response", + g_signal_connect (chooser, "response", G_CALLBACK (gimp_error_console_save_response), console); + g_signal_connect (chooser, "delete_event", + G_CALLBACK (gtk_true), + NULL); - gimp_help_connect (GTK_WIDGET (filesel), gimp_standard_help_func, + gimp_help_connect (GTK_WIDGET (chooser), gimp_standard_help_func, GIMP_HELP_ERRORS_DIALOG, NULL); - gtk_widget_show (GTK_WIDGET (filesel)); + gtk_widget_show (GTK_WIDGET (chooser)); } static void @@ -389,17 +396,20 @@ gimp_error_console_save_response (GtkWid { if (response_id == GTK_RESPONSE_OK) { - const gchar *filename; + gchar *filename; - filename = gtk_file_selection_get_filename (GTK_FILE_SELECTION (dialog)); + filename = gtk_file_chooser_get_filename (GTK_FILE_CHOOSER (dialog)); if (! gimp_error_console_write_file (console->text_buffer, filename, console->save_selection)) { g_message (_("Error writing file '%s':\n%s"), gimp_filename_to_utf8 (filename), g_strerror (errno)); + g_free (filename); return; } + + g_free (filename); } gtk_widget_destroy (dialog); Index: app/widgets/gimperrorconsole.h =================================================================== RCS file: /cvs/gnome/gimp/app/widgets/gimperrorconsole.h,v retrieving revision 1.1 diff -u -p -r1.1 gimperrorconsole.h --- app/widgets/gimperrorconsole.h 13 Jun 2003 14:36:14 -0000 1.1 +++ app/widgets/gimperrorconsole.h 26 Feb 2004 18:10:09 -0000 @@ -48,7 +48,7 @@ struct _GimpErrorConsole GtkWidget *clear_button; GtkWidget *save_button; - GtkWidget *filesel; + GtkWidget *file_dialog; gboolean save_selection; }; Index: app/widgets/gimptexteditor.c =================================================================== RCS file: /cvs/gnome/gimp/app/widgets/gimptexteditor.c,v retrieving revision 1.16 diff -u -p -r1.16 gimptexteditor.c --- app/widgets/gimptexteditor.c 19 Jan 2004 01:54:09 -0000 1.16 +++ app/widgets/gimptexteditor.c 26 Feb 2004 18:10:09 -0000 @@ -125,10 +125,10 @@ gimp_text_editor_class_init (GimpTextEdi static void gimp_text_editor_init (GimpTextEditor *editor) { - editor->buffer = NULL; - editor->view = NULL; - editor->group = NULL; - editor->filesel = NULL; + editor->buffer = NULL; + editor->view = NULL; + editor->group = NULL; + editor->file_dialog = NULL; switch (gtk_widget_get_default_direction ()) { @@ -309,34 +309,41 @@ static void gimp_text_editor_load (GtkWidget *widget, GimpTextEditor *editor) { - GtkFileSelection *filesel; + GtkFileChooser *chooser; - if (editor->filesel) + if (editor->file_dialog) { - gtk_window_present (GTK_WINDOW (editor->filesel)); + gtk_window_present (GTK_WINDOW (editor->file_dialog)); return; } - filesel = - GTK_FILE_SELECTION (gtk_file_selection_new (_("Open Text File (UTF-8)"))); + editor->file_dialog = + gtk_file_chooser_dialog_new (_("Open Text File (UTF-8)"), + GTK_WINDOW (editor), + GTK_FILE_CHOOSER_ACTION_OPEN, - gtk_window_set_role (GTK_WINDOW (filesel), "gimp-text-load-file"); - gtk_window_set_position (GTK_WINDOW (filesel), GTK_WIN_POS_MOUSE); + GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, + GTK_STOCK_OPEN, GTK_RESPONSE_OK, - gtk_container_set_border_width (GTK_CONTAINER (filesel), 6); - gtk_container_set_border_width (GTK_CONTAINER (filesel->button_area), 4); + NULL); - gtk_window_set_transient_for (GTK_WINDOW (filesel), GTK_WINDOW (editor)); - gtk_window_set_destroy_with_parent (GTK_WINDOW (filesel), TRUE); + chooser = GTK_FILE_CHOOSER (editor->file_dialog); - g_signal_connect (filesel, "response", + g_object_add_weak_pointer (G_OBJECT (chooser), + (gpointer) &editor->file_dialog); + + gtk_window_set_role (GTK_WINDOW (chooser), "gimp-text-load-file"); + gtk_window_set_position (GTK_WINDOW (chooser), GTK_WIN_POS_MOUSE); + gtk_window_set_destroy_with_parent (GTK_WINDOW (chooser), TRUE); + + g_signal_connect (chooser, "response", G_CALLBACK (gimp_text_editor_load_response), editor); + g_signal_connect (chooser, "delete_event", + G_CALLBACK (gtk_true), + NULL); - editor->filesel = GTK_WIDGET (filesel); - g_object_add_weak_pointer (G_OBJECT (filesel), (gpointer) &editor->filesel); - - gtk_widget_show (GTK_WIDGET (filesel)); + gtk_widget_show (GTK_WIDGET (chooser)); } static void @@ -346,12 +353,17 @@ gimp_text_editor_load_response (GtkWidge { if (response_id == GTK_RESPONSE_OK) { - const gchar *filename; + gchar *filename; - filename = gtk_file_selection_get_filename (GTK_FILE_SELECTION (dialog)); + filename = gtk_file_chooser_get_filename (GTK_FILE_CHOOSER (dialog)); if (! gimp_text_editor_load_file (editor->buffer, filename)) - return; + { + g_free (filename); + return; + } + + g_free (filename); } gtk_widget_destroy (dialog); Index: app/widgets/gimptexteditor.h =================================================================== RCS file: /cvs/gnome/gimp/app/widgets/gimptexteditor.h,v retrieving revision 1.3 diff -u -p -r1.3 gimptexteditor.h --- app/widgets/gimptexteditor.h 31 Mar 2003 15:10:06 -0000 1.3 +++ app/widgets/gimptexteditor.h 26 Feb 2004 18:10:09 -0000 @@ -40,7 +40,7 @@ struct _GimpTextEditor GtkTextBuffer *buffer; GtkWidget *group; GtkWidget *view; - GtkWidget *filesel; + GtkWidget *file_dialog; }; struct _GimpTextEditorClass Index: app/gui/file-dialog-utils.c =================================================================== RCS file: /cvs/gnome/gimp/app/gui/file-dialog-utils.c,v retrieving revision 1.26 diff -u -p -r1.26 file-dialog-utils.c --- app/gui/file-dialog-utils.c 24 Nov 2003 12:07:29 -0000 1.26 +++ app/gui/file-dialog-utils.c 26 Feb 2004 18:10:09 -0000 @@ -41,41 +41,41 @@ GtkWidget * -file_dialog_new (Gimp *gimp, - GimpDialogFactory *dialog_factory, - const gchar *dialog_identifier, - GimpMenuFactory *menu_factory, - const gchar *menu_identifier, - const gchar *title, - const gchar *role, - const gchar *help_id) +file_dialog_new (Gimp *gimp, + GimpDialogFactory *dialog_factory, + const gchar *dialog_identifier, + GimpMenuFactory *menu_factory, + const gchar *menu_identifier, + GtkFileChooserAction action, + const gchar *ok_stock_id, + const gchar *title, + const gchar *role, + const gchar *help_id) { - GtkWidget *filesel; - GtkFileSelection *fs; + GtkWidget *dialog; g_return_val_if_fail (GIMP_IS_GIMP (gimp), NULL); g_return_val_if_fail (GIMP_IS_DIALOG_FACTORY (dialog_factory), NULL); g_return_val_if_fail (dialog_identifier != NULL, NULL); g_return_val_if_fail (GIMP_IS_MENU_FACTORY (menu_factory), NULL); g_return_val_if_fail (menu_identifier != NULL, NULL); + g_return_val_if_fail (ok_stock_id != NULL, NULL); g_return_val_if_fail (title != NULL, NULL); g_return_val_if_fail (role != NULL, NULL); g_return_val_if_fail (help_id != NULL, NULL); - filesel = gtk_file_selection_new (title); + dialog = gtk_file_chooser_dialog_new (title, NULL, action, + GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, + ok_stock_id, GTK_RESPONSE_OK, + NULL); - fs = GTK_FILE_SELECTION (filesel); + g_object_set_data (G_OBJECT (dialog), "gimp", gimp); - g_object_set_data (G_OBJECT (filesel), "gimp", gimp); + gtk_window_set_role (GTK_WINDOW (dialog), role); - gtk_window_set_role (GTK_WINDOW (filesel), role); + gimp_help_connect (dialog, gimp_standard_help_func, help_id, NULL); - gimp_help_connect (filesel, gimp_standard_help_func, help_id, NULL); - - gtk_container_set_border_width (GTK_CONTAINER (filesel), 6); - gtk_container_set_border_width (GTK_CONTAINER (fs->button_area), 4); - - g_signal_connect (filesel, "delete_event", + g_signal_connect (dialog, "delete_event", G_CALLBACK (gtk_true), NULL); @@ -87,7 +87,7 @@ file_dialog_new (Gimp *gimp GtkWidget *label; hbox = gtk_hbox_new (FALSE, 4); - gtk_box_pack_end (GTK_BOX (fs->main_vbox), hbox, FALSE, FALSE, 0); + gtk_file_chooser_set_extra_widget (GTK_FILE_CHOOSER (dialog), hbox); gtk_widget_show (hbox); item_factory = gimp_menu_factory_menu_new (menu_factory, @@ -96,7 +96,8 @@ file_dialog_new (Gimp *gimp gimp, FALSE); - g_object_set_data (G_OBJECT (filesel), "gimp-item-factory", item_factory); + g_object_set_data (G_OBJECT (dialog), "gimp-item-factory", + item_factory); option_menu = gtk_option_menu_new (); gtk_box_pack_end (GTK_BOX (hbox), option_menu, FALSE, FALSE, 0); @@ -116,13 +117,13 @@ file_dialog_new (Gimp *gimp gtk_label_set_mnemonic_widget (GTK_LABEL (label), option_menu); } - gimp_dialog_factory_add_foreign (dialog_factory, dialog_identifier, filesel); + gimp_dialog_factory_add_foreign (dialog_factory, dialog_identifier, dialog); - return filesel; + return dialog; } void -file_dialog_show (GtkWidget *filesel, +file_dialog_show (GtkWidget *chooser, GtkWidget *parent) { gimp_item_factories_set_sensitive ("", "/File/Open...", FALSE); @@ -132,17 +133,14 @@ file_dialog_show (GtkWidget *filesel, gimp_item_factories_set_sensitive ("", "/File/Save as...", FALSE); gimp_item_factories_set_sensitive ("", "/File/Save a Copy...", FALSE); - gtk_window_set_screen (GTK_WINDOW (filesel), - gtk_widget_get_screen (parent)); - - gtk_widget_grab_focus (GTK_FILE_SELECTION (filesel)->selection_entry); - gtk_window_present (GTK_WINDOW (filesel)); + gtk_window_set_screen (GTK_WINDOW (chooser), gtk_widget_get_screen (parent)); + gtk_window_present (GTK_WINDOW (chooser)); } -gboolean -file_dialog_hide (GtkWidget *filesel) +void +file_dialog_hide (GtkWidget *chooser) { - gtk_widget_hide (filesel); + gtk_widget_hide (chooser); gimp_item_factories_set_sensitive ("", "/File/Open...", TRUE); @@ -150,37 +148,39 @@ file_dialog_hide (GtkWidget *filesel) gimp_item_factories_set_sensitive ("", "/File/Save", TRUE); gimp_item_factories_set_sensitive ("", "/File/Save as...", TRUE); gimp_item_factories_set_sensitive ("", "/File/Save a Copy...", TRUE); - - /* return TRUE because we are used as "delete_event" handler */ - return TRUE; } void -file_dialog_update_name (PlugInProcDef *proc, - GtkFileSelection *filesel) +file_dialog_update_name (GtkFileChooser *chooser, + PlugInProcDef *proc) { + g_return_if_fail (GTK_IS_FILE_CHOOSER (chooser)); + g_return_if_fail (proc != NULL); + if (proc->extensions_list) { - const gchar *text; - gchar *last_dot; - GString *s; + gchar *uri = gtk_file_chooser_get_uri (chooser); - text = gtk_entry_get_text (GTK_ENTRY (filesel->selection_entry)); - last_dot = strrchr (text, '.'); + if (uri && strlen (uri)) + { + gchar *last_dot = strrchr (uri, '.'); - if (last_dot == text || !text[0]) - return; + if (last_dot != uri) + { + GString *s = g_string_new (uri); - s = g_string_new (text); + if (last_dot) + g_string_truncate (s, last_dot - uri); - if (last_dot) - g_string_truncate (s, last_dot-text); + g_string_append (s, "."); + g_string_append (s, (gchar *) proc->extensions_list->data); - g_string_append (s, "."); - g_string_append (s, (gchar *) proc->extensions_list->data); + gtk_file_chooser_set_uri (chooser, s->str); - gtk_entry_set_text (GTK_ENTRY (filesel->selection_entry), s->str); + g_string_free (s, TRUE); + } + } - g_string_free (s, TRUE); + g_free (uri); } } Index: app/gui/file-dialog-utils.h =================================================================== RCS file: /cvs/gnome/gimp/app/gui/file-dialog-utils.h,v retrieving revision 1.11 diff -u -p -r1.11 file-dialog-utils.h --- app/gui/file-dialog-utils.h 17 Nov 2003 18:29:56 -0000 1.11 +++ app/gui/file-dialog-utils.h 26 Feb 2004 18:10:09 -0000 @@ -20,21 +20,23 @@ #define __FILE_DIALOG_UTILS_H__ -GtkWidget * file_dialog_new (Gimp *gimp, - GimpDialogFactory *dialog_factory, - const gchar *dialog_identifier, - GimpMenuFactory *menu_factory, - const gchar *menu_identifier, - const gchar *title, - const gchar *role, - const gchar *help_id); +GtkWidget * file_dialog_new (Gimp *gimp, + GimpDialogFactory *dialog_factory, + const gchar *dialog_identifier, + GimpMenuFactory *menu_factory, + const gchar *menu_identifier, + GtkFileChooserAction action, + const gchar *ok_stock_id, + const gchar *title, + const gchar *role, + const gchar *help_id); -void file_dialog_show (GtkWidget *filesel, - GtkWidget *parent); -gboolean file_dialog_hide (GtkWidget *filesel); +void file_dialog_show (GtkWidget *chooser, + GtkWidget *parent); +void file_dialog_hide (GtkWidget *chooser); -void file_dialog_update_name (PlugInProcDef *proc, - GtkFileSelection *filesel); +void file_dialog_update_name (GtkFileChooser *chooser, + PlugInProcDef *proc); #endif /* __FILE_DIALOG_UTILS_H__ */ Index: app/gui/file-open-dialog.c =================================================================== RCS file: /cvs/gnome/gimp/app/gui/file-open-dialog.c,v retrieving revision 1.85 diff -u -p -r1.85 file-open-dialog.c --- app/gui/file-open-dialog.c 26 Feb 2004 13:48:41 -0000 1.85 +++ app/gui/file-open-dialog.c 26 Feb 2004 18:10:09 -0000 @@ -34,8 +34,6 @@ #include -#include "libgimpmath/gimpmath.h" -#include "libgimpthumb/gimpthumb.h" #include "libgimpwidgets/gimpwidgets.h" #include "gui-types.h" @@ -70,20 +68,24 @@ /* local function prototypes */ -static GtkWidget * file_open_dialog_create (Gimp *gimp, - GimpMenuFactory *menu_factory); -static void file_open_selchanged_callback (GtkTreeSelection *sel, - GtkWidget *open_dialog); -static void file_open_response_callback (GtkWidget *open_dialog, - gint response_id, - Gimp *gimp); -static void file_open_dialog_open_image (GtkWidget *open_dialog, - Gimp *gimp, - const gchar *uri, - const gchar *entered_filename, - PlugInProcDef *load_proc); +static GtkWidget * file_open_dialog_create (Gimp *gimp, + GimpMenuFactory *menu_factory); +static void file_open_selection_changed (GtkFileChooser *chooser, + Gimp *gimp); +static void file_open_update_preview (GtkFileChooser *chooser, + Gimp *gimp); +static void file_open_response (GtkWidget *open_dialog, + gint response_id, + Gimp *gimp); +static gboolean file_open_dialog_open_image (GtkWidget *open_dialog, + Gimp *gimp, + const gchar *uri, + const gchar *entered_filename, + PlugInProcDef *load_proc); +/* private variables */ + static GtkWidget *fileload = NULL; static GtkWidget *thumb_box = NULL; static PlugInProcDef *load_file_proc = NULL; @@ -106,11 +108,12 @@ file_open_dialog_show (Gimp * GimpMenuFactory *menu_factory, GtkWidget *parent) { - gchar *filename = NULL; + gchar *real_uri = NULL; g_return_if_fail (GIMP_IS_GIMP (gimp)); g_return_if_fail (gimage == NULL || GIMP_IS_IMAGE (gimage)); g_return_if_fail (GIMP_IS_MENU_FACTORY (menu_factory)); + g_return_if_fail (parent == NULL || GTK_IS_WIDGET (parent)); if (! fileload) fileload = file_open_dialog_create (gimp, menu_factory); @@ -125,32 +128,29 @@ file_open_dialog_show (Gimp * if (gimage) { - filename = gimp_image_get_filename (gimage); + gchar *filename = gimp_image_get_filename (gimage); if (filename) { - gchar *dirname; + gchar *dirname = g_path_get_dirname (filename); - dirname = g_path_get_dirname (filename); g_free (filename); - filename = g_build_filename (dirname, ".", NULL); + real_uri = g_filename_to_uri (dirname, NULL, NULL); g_free (dirname); } } else if (uri) { - filename = g_filename_from_uri (uri, NULL, NULL); + real_uri = g_strdup (uri); } gtk_window_set_title (GTK_WINDOW (fileload), _("Open Image")); - gtk_file_selection_set_filename (GTK_FILE_SELECTION (fileload), - filename ? - filename : - "." G_DIR_SEPARATOR_S); + if (real_uri) + gtk_file_chooser_set_uri (GTK_FILE_CHOOSER (fileload), real_uri); - g_free (filename); + g_free (real_uri); file_dialog_show (fileload, parent); } @@ -162,122 +162,77 @@ static GtkWidget * file_open_dialog_create (Gimp *gimp, GimpMenuFactory *menu_factory) { - GtkWidget *open_dialog; - GtkFileSelection *fs; + GtkWidget *open_dialog; open_dialog = file_dialog_new (gimp, global_dialog_factory, "gimp-file-open-dialog", menu_factory, "", + GTK_FILE_CHOOSER_ACTION_OPEN, + GTK_STOCK_OPEN, _("Open Image"), "gimp-file-open", GIMP_HELP_FILE_OPEN); + gtk_file_chooser_set_select_multiple (GTK_FILE_CHOOSER (open_dialog), TRUE); + g_signal_connect (open_dialog, "response", - G_CALLBACK (file_open_response_callback), + G_CALLBACK (file_open_response), gimp); - fs = GTK_FILE_SELECTION (open_dialog); - - gtk_file_selection_set_select_multiple (fs, TRUE); - - /* The preview frame */ if (gimp->config->thumbnail_size > 0) { - GtkTreeSelection *tree_sel; - GtkWidget *hbox; - - tree_sel = gtk_tree_view_get_selection (GTK_TREE_VIEW (fs->file_list)); - - /* Catch file-list clicks so we can update the preview thumbnail */ - g_signal_connect (tree_sel, "changed", - G_CALLBACK (file_open_selchanged_callback), - open_dialog); - - /* pack the containing open_options hbox into the open-dialog */ - for (hbox = fs->dir_list; ! GTK_IS_HBOX (hbox); hbox = hbox->parent); + g_signal_connect (open_dialog, "selection-changed", + G_CALLBACK (file_open_selection_changed), + gimp); + g_signal_connect (open_dialog, "update-preview", + G_CALLBACK (file_open_update_preview), + gimp); thumb_box = gimp_thumb_box_new (gimp); - gtk_box_pack_end (GTK_BOX (hbox), thumb_box, FALSE, FALSE, 0); - gtk_widget_show (thumb_box); - gtk_widget_set_sensitive (GTK_WIDGET (thumb_box), FALSE); + gtk_file_chooser_set_preview_widget (GTK_FILE_CHOOSER (open_dialog), + thumb_box); + gtk_widget_show (thumb_box); } return open_dialog; } static void -selchanged_foreach (GtkTreeModel *model, - GtkTreePath *path, - GtkTreeIter *iter, - gpointer data) +file_open_selection_changed (GtkFileChooser *chooser, + Gimp *gimp) { - gboolean *selected = data; + GSList *uris = gtk_file_chooser_get_uris (chooser); - *selected = TRUE; + if (uris) + gimp_thumb_box_set_uri (GIMP_THUMB_BOX (thumb_box), uris->data); + else + gimp_thumb_box_set_uri (GIMP_THUMB_BOX (thumb_box), NULL); + + gimp_thumb_box_set_uris (GIMP_THUMB_BOX (thumb_box), uris); } static void -file_open_selchanged_callback (GtkTreeSelection *sel, - GtkWidget *open_dialog) +file_open_update_preview (GtkFileChooser *chooser, + Gimp *gimp) { - GtkFileSelection *fs; - Gimp *gimp; - const gchar *fullfname; - gboolean selected = FALSE; - - gtk_tree_selection_selected_foreach (sel, - selchanged_foreach, - &selected); - - fs = GTK_FILE_SELECTION (open_dialog); + gchar *uri = gtk_file_chooser_get_preview_uri (chooser); - gimp = GIMP (g_object_get_data (G_OBJECT (open_dialog), "gimp")); + g_print ("preview_uri: %s\n", uri); - if (selected) - { - gchar *uri; - - fullfname = gtk_file_selection_get_filename (fs); - - uri = file_utils_filename_to_uri (gimp->load_procs, fullfname, NULL); - gimp_thumb_box_set_uri (GIMP_THUMB_BOX (thumb_box), uri); - g_free (uri); - } - else - { - gimp_thumb_box_set_uri (GIMP_THUMB_BOX (thumb_box), NULL); - } + gimp_thumb_box_set_uri (GIMP_THUMB_BOX (thumb_box), uri); - { - gchar **selections; - GSList *uris = NULL; - gint i; - - selections = gtk_file_selection_get_selections (fs); - - for (i = 0; selections[i] != NULL; i++) - uris = g_slist_prepend (uris, g_filename_to_uri (selections[i], - NULL, NULL)); - - g_strfreev (selections); - - uris = g_slist_reverse (uris); - - gimp_thumb_box_set_uris (GIMP_THUMB_BOX (thumb_box), uris); - } + g_free (uri); } static void -file_open_response_callback (GtkWidget *open_dialog, - gint response_id, - Gimp *gimp) +file_open_response (GtkWidget *open_dialog, + gint response_id, + Gimp *gimp) { - GtkFileSelection *fs; - gchar **selections; - gchar *uri; - const gchar *entered_filename; - gint i; + GSList *uris; + GSList *list; + gboolean open_tried = FALSE; if (response_id != GTK_RESPONSE_OK) { @@ -285,80 +240,52 @@ file_open_response_callback (GtkWidget * return; } - fs = GTK_FILE_SELECTION (open_dialog); - - selections = gtk_file_selection_get_selections (fs); + uris = gtk_file_chooser_get_uris (GTK_FILE_CHOOSER (open_dialog)); - if (selections == NULL) + if (! uris) return; - entered_filename = gtk_entry_get_text (GTK_ENTRY (fs->selection_entry)); + gtk_widget_set_sensitive (open_dialog, FALSE); - if (g_file_test (selections[0], G_FILE_TEST_IS_DIR)) + for (list = uris; list; list = g_slist_next (list)) { - if (selections[0][strlen (selections[0]) - 1] != G_DIR_SEPARATOR) - { - gchar *s = g_strconcat (selections[0], G_DIR_SEPARATOR_S, NULL); - gtk_file_selection_set_filename (fs, s); - g_free (s); - } - else + gchar *filename = g_filename_from_uri (list->data, NULL, NULL); + + if (g_file_test (filename, G_FILE_TEST_IS_REGULAR)) { - gtk_file_selection_set_filename (fs, selections[0]); - } + open_tried = TRUE; - g_strfreev (selections); + if (file_open_dialog_open_image (open_dialog, + gimp, + list->data, + list->data, + load_file_proc)) + { + file_dialog_hide (open_dialog); + } + } - return; + g_free (filename); } - if (strstr (entered_filename, "://")) - { - /* try with the entered filename if it looks like an URI */ + gtk_widget_set_sensitive (open_dialog, TRUE); - uri = g_strdup (entered_filename); - } - else + if (! open_tried && uris) { - uri = g_filename_to_uri (selections[0], NULL, NULL); - } + gchar *filename = g_filename_from_uri (uris->data, NULL, NULL); - gtk_widget_set_sensitive (open_dialog, FALSE); + if (g_file_test (filename, G_FILE_TEST_IS_DIR)) + gtk_file_chooser_set_current_folder (GTK_FILE_CHOOSER (open_dialog), + filename); - file_open_dialog_open_image (open_dialog, - gimp, - uri, - entered_filename, - load_file_proc); - - g_free (uri); - - /* - * Now deal with multiple selections from the filesel list - */ - - for (i = 1; selections[i] != NULL; i++) - { - if (g_file_test (selections[i], G_FILE_TEST_IS_REGULAR)) - { - uri = g_filename_to_uri (selections[i], NULL, NULL); - - file_open_dialog_open_image (open_dialog, - gimp, - uri, - uri, - load_file_proc); - - g_free (uri); - } + g_free (filename); } - g_strfreev (selections); - - gtk_widget_set_sensitive (open_dialog, TRUE); + g_slist_foreach (uris, (GFunc) g_free, NULL); + g_slist_free (uris); } -static void +static gboolean file_open_dialog_open_image (GtkWidget *open_dialog, Gimp *gimp, const gchar *uri, @@ -378,13 +305,11 @@ file_open_dialog_open_image (GtkWidget if (gimage) { - file_dialog_hide (open_dialog); + return TRUE; } else if (status != GIMP_PDB_CANCEL) { - gchar *filename; - - filename = file_utils_uri_to_utf8_filename (uri); + gchar *filename = file_utils_uri_to_utf8_filename (uri); g_message (_("Opening '%s' failed:\n\n%s"), filename, error->message); @@ -392,4 +317,6 @@ file_open_dialog_open_image (GtkWidget g_free (filename); } + + return FALSE; } Index: app/gui/file-save-dialog.c =================================================================== RCS file: /cvs/gnome/gimp/app/gui/file-save-dialog.c,v retrieving revision 1.58 diff -u -p -r1.58 file-save-dialog.c --- app/gui/file-save-dialog.c 17 Nov 2003 18:29:56 -0000 1.58 +++ app/gui/file-save-dialog.c 26 Feb 2004 18:10:10 -0000 @@ -91,7 +91,7 @@ void file_save_dialog_set_type (PlugInProcDef *proc) { if (proc) - file_dialog_update_name (proc, GTK_FILE_SELECTION (filesave)); + file_dialog_update_name (GTK_FILE_CHOOSER (filesave), proc); save_file_proc = proc; } @@ -102,10 +102,11 @@ file_save_dialog_show (GimpImage * GtkWidget *parent) { GimpItemFactory *item_factory; - gchar *filename; + const gchar *uri; g_return_if_fail (GIMP_IS_IMAGE (gimage)); g_return_if_fail (GIMP_IS_MENU_FACTORY (menu_factory)); + g_return_if_fail (parent == NULL || GTK_IS_WIDGET (parent)); if (! gimp_image_active_drawable (gimage)) return; @@ -127,14 +128,10 @@ file_save_dialog_show (GimpImage * gtk_window_set_title (GTK_WINDOW (filesave), _("Save Image")); - filename = gimp_image_get_filename (gimage); - - gtk_file_selection_set_filename (GTK_FILE_SELECTION (filesave), - filename ? - filename : - "." G_DIR_SEPARATOR_S); + uri = gimp_object_get_name (GIMP_OBJECT (gimage)); - g_free (filename); + if (uri) + gtk_file_chooser_set_uri (GTK_FILE_CHOOSER (filesave), uri); item_factory = g_object_get_data (G_OBJECT (filesave), "gimp-item-factory"); @@ -151,10 +148,10 @@ file_save_a_copy_dialog_show (GimpImage { GimpItemFactory *item_factory; const gchar *uri; - gchar *filename = NULL; g_return_if_fail (GIMP_IS_IMAGE (gimage)); g_return_if_fail (GIMP_IS_MENU_FACTORY (menu_factory)); + g_return_if_fail (parent == NULL || GTK_IS_WIDGET (parent)); if (! gimp_image_active_drawable (gimage)) return; @@ -163,11 +160,6 @@ file_save_a_copy_dialog_show (GimpImage set_uri_and_proc = FALSE; set_image_clean = FALSE; - uri = gimp_object_get_name (GIMP_OBJECT (gimage)); - - if (uri) - filename = g_filename_from_uri (uri, NULL, NULL); - if (! filesave) filesave = file_save_dialog_create (gimage->gimp, menu_factory); @@ -181,12 +173,10 @@ file_save_a_copy_dialog_show (GimpImage gtk_window_set_title (GTK_WINDOW (filesave), _("Save a Copy of the Image")); - gtk_file_selection_set_filename (GTK_FILE_SELECTION (filesave), - filename ? - filename : - "." G_DIR_SEPARATOR_S); + uri = gimp_object_get_name (GIMP_OBJECT (gimage)); - g_free (filename); + if (uri) + gtk_file_chooser_set_uri (GTK_FILE_CHOOSER (filesave), uri); item_factory = g_object_get_data (G_OBJECT (filesave), "gimp-item-factory"); @@ -209,6 +199,8 @@ file_save_dialog_create (Gimp global_dialog_factory, "gimp-file-save-dialog", menu_factory, "", + GTK_FILE_CHOOSER_ACTION_SAVE, + GTK_STOCK_SAVE, _("Save Image"), "gimp-file-save", GIMP_HELP_FILE_SAVE); @@ -224,10 +216,9 @@ file_save_response_callback (GtkWidget * gint response_id, Gimp *gimp) { - GtkFileSelection *fs; - const gchar *filename; - const gchar *raw_filename; - gchar *uri; + GtkFileChooser *chooser = GTK_FILE_CHOOSER (save_dialog); + gchar *uri; + gchar *filename; if (response_id != GTK_RESPONSE_OK) { @@ -235,51 +226,41 @@ file_save_response_callback (GtkWidget * return; } - fs = GTK_FILE_SELECTION (save_dialog); - - filename = gtk_file_selection_get_filename (fs); - raw_filename = gtk_entry_get_text (GTK_ENTRY (fs->selection_entry)); + uri = gtk_file_chooser_get_uri (chooser); - g_assert (filename && raw_filename); + if (! uri) + return; - uri = g_filename_to_uri (filename, NULL, NULL); + filename = g_filename_from_uri (uri, NULL, NULL); if (g_file_test (filename, G_FILE_TEST_EXISTS)) { if (g_file_test (filename, G_FILE_TEST_IS_DIR)) { - if (filename[strlen (filename) - 1] != G_DIR_SEPARATOR) - { - gchar *s = g_strconcat (filename, G_DIR_SEPARATOR_S, NULL); - gtk_file_selection_set_filename (fs, s); - g_free (s); - } - else - { - gtk_file_selection_set_filename (fs, filename); - } + gtk_file_chooser_set_current_folder_uri (chooser, uri); } else { - file_save_overwrite (save_dialog, uri, raw_filename); + file_save_overwrite (save_dialog, uri, uri); } } else { - gtk_widget_set_sensitive (GTK_WIDGET (fs), FALSE); + gtk_widget_set_sensitive (save_dialog, FALSE); file_save_dialog_save_image (save_dialog, the_gimage, uri, - raw_filename, + uri, save_file_proc, set_uri_and_proc, set_image_clean); - gtk_widget_set_sensitive (GTK_WIDGET (fs), TRUE); + gtk_widget_set_sensitive (save_dialog, TRUE); } g_free (uri); + g_free (filename); } typedef struct _OverwriteData OverwriteData; @@ -308,22 +289,20 @@ file_save_overwrite (GtkWidget *save_d overwrite_data->raw_filename = g_strdup (raw_filename); filename = file_utils_uri_to_utf8_filename (uri); - message = g_strdup_printf (_("File '%s' exists.\n" "Overwrite it?"), filename); - g_free (filename); query_box = gimp_query_boolean_box (_("File Exists!"), save_dialog, - gimp_standard_help_func, - GIMP_HELP_FILE_SAVE_OVERWRITE, - GIMP_STOCK_QUESTION, - message, - GTK_STOCK_YES, GTK_STOCK_NO, - NULL, NULL, - file_save_overwrite_callback, - overwrite_data); + gimp_standard_help_func, + GIMP_HELP_FILE_SAVE_OVERWRITE, + GIMP_STOCK_QUESTION, + message, + GTK_STOCK_YES, GTK_STOCK_NO, + NULL, NULL, + file_save_overwrite_callback, + overwrite_data); g_free (message); @@ -340,9 +319,7 @@ file_save_overwrite_callback (GtkWidget gboolean overwrite, gpointer data) { - OverwriteData *overwrite_data; - - overwrite_data = (OverwriteData *) data; + OverwriteData *overwrite_data = data; if (overwrite) { @@ -386,9 +363,7 @@ file_save_dialog_save_image (GtkWidget if (status != GIMP_PDB_SUCCESS && status != GIMP_PDB_CANCEL) { - gchar *filename; - - filename = file_utils_uri_to_utf8_filename (uri); + gchar *filename = file_utils_uri_to_utf8_filename (uri); g_message (_("Saving '%s' failed:\n\n%s"), filename, error->message); Index: app/gui/gradients-commands.c =================================================================== RCS file: /cvs/gnome/gimp/app/gui/gradients-commands.c,v retrieving revision 1.23 diff -u -p -r1.23 gradients-commands.c --- app/gui/gradients-commands.c 31 Jan 2004 20:23:52 -0000 1.23 +++ app/gui/gradients-commands.c 26 Feb 2004 18:10:10 -0000 @@ -61,9 +61,9 @@ gradients_save_as_pov_ray_cmd_callback ( static void gradients_save_as_pov_query (GimpContainerEditor *editor) { - GimpGradient *gradient; - GtkFileSelection *filesel; - gchar *title; + GimpGradient *gradient; + GtkFileChooser *chooser; + gchar *title; gradient = gimp_context_get_gradient (editor->view->context); @@ -73,34 +73,41 @@ gradients_save_as_pov_query (GimpContain title = g_strdup_printf (_("Save '%s' as POV-Ray"), GIMP_OBJECT (gradient)->name); - filesel = GTK_FILE_SELECTION (gtk_file_selection_new (title)); + chooser = GTK_FILE_CHOOSER + (gtk_file_chooser_dialog_new (title, NULL, + GTK_FILE_CHOOSER_ACTION_SAVE, + + GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, + GTK_STOCK_SAVE, GTK_RESPONSE_OK, + + NULL)); g_free (title); - gtk_window_set_screen (GTK_WINDOW (filesel), + gtk_window_set_screen (GTK_WINDOW (chooser), gtk_widget_get_screen (GTK_WIDGET (editor))); - gtk_window_set_role (GTK_WINDOW (filesel), "gimp-gradient-save-pov"); - gtk_window_set_position (GTK_WINDOW (filesel), GTK_WIN_POS_MOUSE); - - gtk_container_set_border_width (GTK_CONTAINER (filesel), 6); - gtk_container_set_border_width (GTK_CONTAINER (filesel->button_area), 4); + gtk_window_set_role (GTK_WINDOW (chooser), "gimp-gradient-save-pov"); + gtk_window_set_position (GTK_WINDOW (chooser), GTK_WIN_POS_MOUSE); - g_signal_connect (filesel, "response", + g_signal_connect (chooser, "response", G_CALLBACK (gradients_save_as_pov_response), gradient); + g_signal_connect (chooser, "delete_event", + G_CALLBACK (gtk_true), + NULL); g_object_ref (gradient); - g_signal_connect_object (filesel, "destroy", + g_signal_connect_object (chooser, "destroy", G_CALLBACK (g_object_unref), gradient, G_CONNECT_SWAPPED); - gimp_help_connect (GTK_WIDGET (filesel), gimp_standard_help_func, + gimp_help_connect (GTK_WIDGET (chooser), gimp_standard_help_func, GIMP_HELP_GRADIENT_SAVE_AS_POV, NULL); - gtk_widget_show (GTK_WIDGET (filesel)); + gtk_widget_show (GTK_WIDGET (chooser)); } static void @@ -113,7 +120,7 @@ gradients_save_as_pov_response (GtkWidge const gchar *filename; GError *error = NULL; - filename = gtk_file_selection_get_filename (GTK_FILE_SELECTION (dialog)); + filename = gtk_file_chooser_get_filename (GTK_FILE_CHOOSER (dialog)); if (! gimp_gradient_save_as_pov (gradient, filename, &error)) { Index: app/gui/vectors-commands.c =================================================================== RCS file: /cvs/gnome/gimp/app/gui/vectors-commands.c,v retrieving revision 1.65 diff -u -p -r1.65 vectors-commands.c --- app/gui/vectors-commands.c 31 Jan 2004 20:23:53 -0000 1.65 +++ app/gui/vectors-commands.c 26 Feb 2004 18:10:10 -0000 @@ -645,7 +645,7 @@ vectors_import_response (GtkWidget *dial const gchar *filename; GError *error = NULL; - filename = gtk_file_selection_get_filename (GTK_FILE_SELECTION (dialog)); + filename = gtk_file_chooser_get_filename (GTK_FILE_CHOOSER (dialog)); if (gimp_vectors_import_file (gimage, filename, FALSE, FALSE, &error)) { @@ -667,34 +667,37 @@ static void vectors_import_query (GimpImage *gimage, GtkWidget *parent) { - GtkFileSelection *filesel; + GtkFileChooser *chooser; - filesel = - GTK_FILE_SELECTION (gtk_file_selection_new (_("Import Paths from SVG"))); + chooser = GTK_FILE_CHOOSER + (gtk_file_chooser_dialog_new (_("Import Paths from SVG"), NULL, + GTK_FILE_CHOOSER_ACTION_OPEN, - g_object_weak_ref (G_OBJECT (gimage), - (GWeakNotify) gtk_widget_destroy, filesel); + GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, + GTK_STOCK_OPEN, GTK_RESPONSE_OK, - gtk_window_set_screen (GTK_WINDOW (filesel), - gtk_widget_get_screen (parent)); + NULL)); + + g_object_weak_ref (G_OBJECT (gimage), (GWeakNotify) gtk_widget_destroy, + chooser); - gtk_window_set_role (GTK_WINDOW (filesel), "gimp-vectors-import"); - gtk_window_set_position (GTK_WINDOW (filesel), GTK_WIN_POS_MOUSE); + gtk_window_set_screen (GTK_WINDOW (chooser), + gtk_widget_get_screen (parent)); - gtk_container_set_border_width (GTK_CONTAINER (filesel), 6); - gtk_container_set_border_width (GTK_CONTAINER (filesel->button_area), 4); + gtk_window_set_role (GTK_WINDOW (chooser), "gimp-vectors-import"); + gtk_window_set_position (GTK_WINDOW (chooser), GTK_WIN_POS_MOUSE); - g_signal_connect (filesel, "response", + g_signal_connect (chooser, "response", G_CALLBACK (vectors_import_response), gimage); - g_signal_connect (filesel, "delete_event", + g_signal_connect (chooser, "delete_event", G_CALLBACK (gtk_true), NULL); /* FIXME: add a proper file selector and controls for merge and scale options */ - gtk_widget_show (GTK_WIDGET (filesel)); + gtk_widget_show (GTK_WIDGET (chooser)); } @@ -712,7 +715,7 @@ vectors_export_response (GtkWidget *dial const gchar *filename; GError *error = NULL; - filename = gtk_file_selection_get_filename (GTK_FILE_SELECTION (dialog)); + filename = gtk_file_chooser_get_filename (GTK_FILE_CHOOSER (dialog)); if (! gimp_vectors_export_file (gimage, NULL, filename, &error)) { @@ -731,29 +734,32 @@ vectors_export_query (GimpImage *gimag GimpVectors *vectors, GtkWidget *parent) { - GtkFileSelection *filesel; + GtkFileChooser *chooser; - filesel = - GTK_FILE_SELECTION (gtk_file_selection_new (_("Export Path to SVG"))); + chooser = GTK_FILE_CHOOSER + (gtk_file_chooser_dialog_new (_("Export Path to SVG"), NULL, + GTK_FILE_CHOOSER_ACTION_SAVE, - g_object_weak_ref (G_OBJECT (gimage), - (GWeakNotify) gtk_widget_destroy, filesel); + GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, + GTK_STOCK_SAVE, GTK_RESPONSE_OK, - gtk_window_set_screen (GTK_WINDOW (filesel), - gtk_widget_get_screen (parent)); + NULL)); + + g_object_weak_ref (G_OBJECT (gimage), (GWeakNotify) gtk_widget_destroy, + chooser); - gtk_window_set_role (GTK_WINDOW (filesel), "gimp-vectors-export"); - gtk_window_set_position (GTK_WINDOW (filesel), GTK_WIN_POS_MOUSE); + gtk_window_set_screen (GTK_WINDOW (chooser), + gtk_widget_get_screen (parent)); - gtk_container_set_border_width (GTK_CONTAINER (filesel), 6); - gtk_container_set_border_width (GTK_CONTAINER (filesel->button_area), 4); + gtk_window_set_role (GTK_WINDOW (chooser), "gimp-vectors-export"); + gtk_window_set_position (GTK_WINDOW (chooser), GTK_WIN_POS_MOUSE); - g_signal_connect (filesel, "response", + g_signal_connect (chooser, "response", G_CALLBACK (vectors_export_response), gimage); - g_signal_connect (filesel, "delete_event", + g_signal_connect (chooser, "delete_event", G_CALLBACK (gtk_true), NULL); - gtk_widget_show (GTK_WIDGET (filesel)); + gtk_widget_show (GTK_WIDGET (chooser)); } Index: app/tools/gimpimagemaptool.c =================================================================== RCS file: /cvs/gnome/gimp/app/tools/gimpimagemaptool.c,v retrieving revision 1.40 diff -u -p -r1.40 gimpimagemaptool.c --- app/tools/gimpimagemaptool.c 25 Feb 2004 15:56:50 -0000 1.40 +++ app/tools/gimpimagemaptool.c 26 Feb 2004 18:10:11 -0000 @@ -532,10 +532,10 @@ settings_dialog_response (GtkWidget if (response_id == GTK_RESPONSE_OK) { - const gchar *filename; - FILE *file; + gchar *filename; + FILE *file; - filename = gtk_file_selection_get_filename (GTK_FILE_SELECTION (dialog)); + filename = gtk_file_chooser_get_filename (GTK_FILE_CHOOSER (dialog)); file = fopen (filename, save ? "wt" : "rt"); @@ -546,6 +546,7 @@ settings_dialog_response (GtkWidget _("Could not open '%s' for reading: %s"), gimp_filename_to_utf8 (filename), g_strerror (errno)); + g_free (filename); return; } @@ -564,6 +565,7 @@ settings_dialog_response (GtkWidget } fclose (file); + g_free (filename); } if (save) @@ -600,7 +602,7 @@ gimp_image_map_tool_settings_dialog (Gim gboolean save) { GimpImageMapOptions *options; - GtkFileSelection *dialog; + GtkFileChooser *chooser; g_return_if_fail (GIMP_IS_IMAGE_MAP_TOOL (tool)); @@ -615,34 +617,42 @@ gimp_image_map_tool_settings_dialog (Gim else gtk_widget_set_sensitive (tool->save_button, FALSE); - tool->settings_dialog = gtk_file_selection_new (title); + tool->settings_dialog = + gtk_file_chooser_dialog_new (title, GTK_WINDOW (tool->shell), + save ? + GTK_FILE_CHOOSER_ACTION_SAVE : + GTK_FILE_CHOOSER_ACTION_OPEN, - dialog = GTK_FILE_SELECTION (tool->settings_dialog); + GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, + save ? GTK_STOCK_SAVE : GTK_STOCK_OPEN, + GTK_RESPONSE_OK, - g_object_set_data (G_OBJECT (dialog), "save", GINT_TO_POINTER (save)); + NULL); - gtk_window_set_role (GTK_WINDOW (dialog), "gimp-load-save-settings"); - gtk_window_set_position (GTK_WINDOW (dialog), GTK_WIN_POS_MOUSE); + chooser = GTK_FILE_CHOOSER (tool->settings_dialog); - gtk_container_set_border_width (GTK_CONTAINER (dialog), 6); - gtk_container_set_border_width (GTK_CONTAINER (dialog->button_area), 4); + g_object_set_data (G_OBJECT (chooser), "save", GINT_TO_POINTER (save)); - g_object_add_weak_pointer (G_OBJECT (dialog), + gtk_window_set_role (GTK_WINDOW (chooser), "gimp-load-save-settings"); + gtk_window_set_position (GTK_WINDOW (chooser), GTK_WIN_POS_MOUSE); + + g_object_add_weak_pointer (G_OBJECT (chooser), (gpointer) &tool->settings_dialog); - gtk_window_set_transient_for (GTK_WINDOW (dialog), - GTK_WINDOW (tool->shell)); - gtk_window_set_destroy_with_parent (GTK_WINDOW (dialog), TRUE); + gtk_window_set_destroy_with_parent (GTK_WINDOW (chooser), TRUE); - g_signal_connect (dialog, "response", + g_signal_connect (chooser, "response", G_CALLBACK (settings_dialog_response), tool); + g_signal_connect (chooser, "delete_event", + G_CALLBACK (gtk_true), + NULL); options = GIMP_IMAGE_MAP_OPTIONS (GIMP_TOOL (tool)->tool_info->tool_options); if (options->settings) { - gtk_file_selection_set_filename (dialog, options->settings); + gtk_file_chooser_set_filename (chooser, options->settings); } else if (GIMP_IMAGE_MAP_TOOL_GET_CLASS (tool)->settings_name) { @@ -653,7 +663,7 @@ gimp_image_map_tool_settings_dialog (Gim G_DIR_SEPARATOR_S, NULL); - gtk_file_selection_set_filename (dialog, tmp); + gtk_file_chooser_set_filename (chooser, tmp); g_free (tmp); } Index: libgimpwidgets/gimpfileentry.c =================================================================== RCS file: /cvs/gnome/gimp/libgimpwidgets/gimpfileentry.c,v retrieving revision 1.53 diff -u -p -r1.53 gimpfileentry.c --- libgimpwidgets/gimpfileentry.c 24 Feb 2004 14:38:47 -0000 1.53 +++ libgimpwidgets/gimpfileentry.c 26 Feb 2004 18:10:12 -0000 @@ -2,7 +2,7 @@ * Copyright (C) 1995-1997 Peter Mattis and Spencer Kimball * * gimpfileentry.c - * Copyright (C) 1999-2003 Michael Natterer + * Copyright (C) 1999-2004 Michael Natterer * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public @@ -22,13 +22,6 @@ #include "config.h" -#include /* Needed here by Win32 gcc compilation */ - -#include -#include -#ifdef HAVE_UNISTD_H -#include -#endif #include #include @@ -98,9 +91,7 @@ gimp_file_entry_get_type (void) static void gimp_file_entry_class_init (GimpFileEntryClass *klass) { - GtkObjectClass *object_class; - - object_class = GTK_OBJECT_CLASS (klass); + GtkObjectClass *object_class = GTK_OBJECT_CLASS (klass); parent_class = g_type_class_peek_parent (klass); @@ -297,8 +288,16 @@ gimp_file_entry_entry_activate (GtkWidge entry); if (entry->file_dialog) - gtk_file_selection_set_filename (GTK_FILE_SELECTION (entry->file_dialog), - filename); + { + GtkFileChooser *chooser = GTK_FILE_CHOOSER (entry->file_dialog); + +#if 0 + if (entry->dir_only) + gtk_file_chooser_set_current_folder (chooser, filename); +#endif + + gtk_file_chooser_set_filename (chooser, filename); + } g_free (filename); g_free (utf8); @@ -322,17 +321,19 @@ gimp_file_entry_entry_focus_out (GtkWidg /* local callback of gimp_file_entry_browse_clicked() */ static void -gimp_file_entry_filesel_response (GtkWidget *dialog, +gimp_file_entry_chooser_response (GtkWidget *dialog, gint response_id, GimpFileEntry *entry) { if (response_id == GTK_RESPONSE_OK) { - const gchar *filename; + gchar *filename; - filename = gtk_file_selection_get_filename (GTK_FILE_SELECTION (dialog)); + filename = gtk_file_chooser_get_filename (GTK_FILE_CHOOSER (dialog)); gimp_file_entry_set_filename (entry, filename); + + g_free (filename); } gtk_widget_hide (dialog); @@ -342,8 +343,9 @@ static void gimp_file_entry_browse_clicked (GtkWidget *widget, GimpFileEntry *entry) { - gchar *utf8; - gchar *filename; + GtkFileChooser *chooser; + gchar *utf8; + gchar *filename; utf8 = gtk_editable_get_chars (GTK_EDITABLE (entry->entry), 0, -1); filename = g_filename_from_utf8 (utf8, -1, NULL, NULL, NULL); @@ -351,58 +353,60 @@ gimp_file_entry_browse_clicked (GtkWidge if (! entry->file_dialog) { - GtkFileSelection *filesel; + const gchar *title = entry->title; - if (entry->dir_only) - { - entry->file_dialog = gtk_file_selection_new (entry->title ? - entry->title : - _("Select Folder")); - - /* hiding these widgets uses internal gtk+ knowledge, but it's - * easier than creating my own directory browser -- michael - */ - gtk_widget_hide - (GTK_FILE_SELECTION (entry->file_dialog)->fileop_del_file); - gtk_widget_hide - (GTK_FILE_SELECTION (entry->file_dialog)->file_list->parent); - } - else + if (title) { - entry->file_dialog = gtk_file_selection_new (entry->title ? - entry->title : - _("Select File")); + if (entry->dir_only) + title = _("Select Folder"); + else + title = _("Select File"); } - filesel = GTK_FILE_SELECTION (entry->file_dialog); + entry->file_dialog = + gtk_file_chooser_dialog_new (title, NULL, + GTK_FILE_CHOOSER_ACTION_OPEN, - gtk_window_set_position (GTK_WINDOW (entry->file_dialog), - GTK_WIN_POS_MOUSE); - gtk_window_set_role (GTK_WINDOW (entry->file_dialog), - "gimp-file-entry-file-dialog"); + GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, + GTK_STOCK_OK, GTK_RESPONSE_OK, + + NULL); - gtk_container_set_border_width (GTK_CONTAINER (filesel), 6); - gtk_container_set_border_width (GTK_CONTAINER (filesel->button_area), 4); + chooser = GTK_FILE_CHOOSER (entry->file_dialog); + + if (entry->dir_only) + gtk_file_chooser_set_folder_mode (chooser, TRUE); - g_signal_connect (filesel, "response", - G_CALLBACK (gimp_file_entry_filesel_response), + gtk_window_set_position (GTK_WINDOW (chooser), GTK_WIN_POS_MOUSE); + gtk_window_set_role (GTK_WINDOW (chooser), + "gimp-file-entry-file-dialog"); + + g_signal_connect (chooser, "response", + G_CALLBACK (gimp_file_entry_chooser_response), entry); - g_signal_connect (filesel, "delete_event", + g_signal_connect (chooser, "delete_event", G_CALLBACK (gtk_true), NULL); g_signal_connect_swapped (entry, "unmap", G_CALLBACK (gtk_widget_hide), - filesel); + chooser); } + else + { + chooser = GTK_FILE_CHOOSER (entry->file_dialog); + } + +#if 0 + if (entry->dir_only) + gtk_file_chooser_set_current_folder (chooser, filename); +#endif - gtk_file_selection_set_filename (GTK_FILE_SELECTION (entry->file_dialog), - filename); + gtk_file_chooser_set_filename (chooser, filename); - gtk_window_set_screen (GTK_WINDOW (entry->file_dialog), + gtk_window_set_screen (GTK_WINDOW (chooser), gtk_widget_get_screen (widget)); - - gtk_window_present (GTK_WINDOW (entry->file_dialog)); + gtk_window_present (GTK_WINDOW (chooser)); } static void Index: libgimpwidgets/gimpfileentry.h =================================================================== RCS file: /cvs/gnome/gimp/libgimpwidgets/gimpfileentry.h,v retrieving revision 1.21 diff -u -p -r1.21 gimpfileentry.h --- libgimpwidgets/gimpfileentry.h 24 Feb 2004 14:35:08 -0000 1.21 +++ libgimpwidgets/gimpfileentry.h 26 Feb 2004 18:10:12 -0000 @@ -2,7 +2,7 @@ * Copyright (C) 1995-1997 Peter Mattis and Spencer Kimball * * gimpfileentry.h - * Copyright (C) 1999-2003 Michael Natterer + * Copyright (C) 1999-2004 Michael Natterer * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public @@ -67,12 +67,12 @@ struct _GimpFileEntryClass }; -GType gimp_file_entry_get_type (void) G_GNUC_CONST; +GType gimp_file_entry_get_type (void) G_GNUC_CONST; -GtkWidget * gimp_file_entry_new (const gchar *title, - const gchar *filename, - gboolean dir_only, - gboolean check_valid); +GtkWidget * gimp_file_entry_new (const gchar *title, + const gchar *filename, + gboolean dir_only, + gboolean check_valid); gchar * gimp_file_entry_get_filename (GimpFileEntry *entry); void gimp_file_entry_set_filename (GimpFileEntry *entry,