[evolution-patches] Patch for using GtkFileChooser



Hi all,

the attached patch enables the use of the GtkFileChooser widget and adds
a compile dependency to Gtk+ 2.4. The patch is against yesterday's cvs
HEAD. Hope you like it

	Regards


? evolution-filechooser.patch
? a11y/addressbook/Makefile
? a11y/addressbook/Makefile.in
? mail/em-folder-tree.c.backup
Index: ChangeLog
===================================================================
RCS file: /cvs/gnome/evolution/ChangeLog,v
retrieving revision 1.1319
diff -u -r1.1319 ChangeLog
--- ChangeLog	22 Mar 2004 18:34:37 -0000	1.1319
+++ ChangeLog	26 Mar 2004 23:38:55 -0000
@@ -1,3 +1,7 @@
+2004-03-27  Carlos Garnacho Parro  <garnacho tuxerver net>
+
+	* configure.in: require gtk+ 2.4.0 for using the GtkFileChooser widget
+
 2004-03-22  Radek Doulik  <rodo ximian com>
 
 	* configure.in: require gtkhtml 3.1.10, it's needed for composer
Index: configure.in
===================================================================
RCS file: /cvs/gnome/evolution/configure.in,v
retrieving revision 1.673
diff -u -r1.673 configure.in
--- configure.in	22 Mar 2004 18:34:39 -0000	1.673
+++ configure.in	26 Mar 2004 23:38:58 -0000
@@ -987,6 +987,7 @@
 GTKHTML_REQUIRED=3.1.10
 EDS_REQUIRED=0.0.90
 BONOBOUI_REQUIRED=2.4.2
+GTK_REQUIRED=2.4.0
 
 AC_SUBST(GAL_REQUIRED)
 AC_SUBST(GTKHTML_REQUIRED)
@@ -995,7 +996,7 @@
 
 dnl --- Flags to get all the GNOME stuff
 
-FULL_GNOME_DEPS="glib-2.0 libbonoboui-2.0 >= $BONOBOUI_REQUIRED gnome-vfs-2.0 libgnomeui-2.0 libglade-2.0 libgnomecanvas-2.0 libxml-2.0 gconf-2.0 gal-2.2 >= $GAL_REQUIRED"
+FULL_GNOME_DEPS="glib-2.0 libbonoboui-2.0 >= $BONOBOUI_REQUIRED gnome-vfs-2.0 libgnomeui-2.0 libglade-2.0 libgnomecanvas-2.0 libxml-2.0 gconf-2.0 gal-2.2 >= $GAL_REQUIRED gtk+-2.0 >= $GTK_REQUIRED"
 
 EVO_SET_COMPILE_FLAGS(GNOME_FULL, $FULL_GNOME_DEPS)
 AC_SUBST(GNOME_FULL_CFLAGS)
Index: addressbook/ChangeLog
===================================================================
RCS file: /cvs/gnome/evolution/addressbook/ChangeLog,v
retrieving revision 1.1622
diff -u -r1.1622 ChangeLog
--- addressbook/ChangeLog	26 Mar 2004 04:09:17 -0000	1.1622
+++ addressbook/ChangeLog	26 Mar 2004 23:39:10 -0000
@@ -1,3 +1,7 @@
+2004-03-27  Carlos Garnacho Parro  <garnacho tuxerver net>
+
+	* gui/widgets/eab-gui-util.c: made it to use the GtkFileChooser widget
+
 2004-03-25 Sivaiah Nallagatla <snallagatla novell com>
 
 	* gui/component/eab-editor.c (eab_editor_prompt_to_save_changes) : 
Index: addressbook/gui/widgets/eab-gui-util.c
===================================================================
RCS file: /cvs/gnome/evolution/addressbook/gui/widgets/eab-gui-util.c,v
retrieving revision 1.12
diff -u -r1.12 eab-gui-util.c
--- addressbook/gui/widgets/eab-gui-util.c	24 Mar 2004 20:21:13 -0000	1.12
+++ addressbook/gui/widgets/eab-gui-util.c	26 Mar 2004 23:39:13 -0000
@@ -222,12 +222,12 @@
 
 
 static gint
-file_exists(GtkFileSelection *filesel, const char *filename)
+file_exists(GtkFileChooserDialog *filechooser, const char *filename)
 {
 	GtkWidget *dialog;
 	gint response;
 
-	dialog = gtk_message_dialog_new (GTK_WINDOW (filesel),
+	dialog = gtk_message_dialog_new (GTK_WINDOW (filechooser),
 					 0,
 					 GTK_MESSAGE_QUESTION,
 					 GTK_BUTTONS_NONE,
@@ -244,7 +244,7 @@
 }
 
 typedef struct {
-	GtkFileSelection *filesel;
+	GtkFileChooserDialog *filechooser;
 	char *vcard;
 } SaveAsInfo;
 
@@ -254,12 +254,12 @@
 	gint error = 0;
 	gint response = 0;
 	
-	const char *filename = gtk_file_selection_get_filename (info->filesel);
+	const char *filename = gtk_file_chooser_get_filename (GTK_FILE_CHOOSER (info->filechooser));
 
 	error = e_write_file (filename, info->vcard, O_WRONLY | O_CREAT | O_EXCL | O_TRUNC);
 
 	if (error == EEXIST) {
-		response = file_exists(info->filesel, filename);
+		response = file_exists(info->filechooser, filename);
 		switch (response) {
 			case GTK_RESPONSE_ACCEPT : /* Overwrite */
 				e_write_file(filename, info->vcard, O_WRONLY | O_CREAT | O_TRUNC);
@@ -272,37 +272,48 @@
 		char *str;
 
 		str = g_strdup_printf (_("Error saving %s: %s"), filename, strerror(errno));
-		dialog = gtk_message_dialog_new (GTK_WINDOW (info->filesel),
+		dialog = gtk_message_dialog_new (GTK_WINDOW (info->filechooser),
 						 GTK_DIALOG_DESTROY_WITH_PARENT,
 						 GTK_MESSAGE_ERROR,
 						 GTK_BUTTONS_OK,
 						 str);
 		g_free (str);
 
-		gtk_widget_show (dialog);
+		gtk_dialog_run (GTK_DIALOG (dialog));
+		gtk_widget_destroy (dialog);
 		
 		return;
 	}
 	
-	gtk_widget_destroy(GTK_WIDGET(info->filesel));
+	gtk_widget_destroy(GTK_WIDGET(info->filechooser));
 }
 
 static void
 close_it(GtkWidget *widget, SaveAsInfo *info)
 {
-	gtk_widget_destroy (GTK_WIDGET (info->filesel));
+	gtk_widget_destroy (GTK_WIDGET (info->filechooser));
+}
+
+static void
+filechooser_response (GtkWidget *widget, gint response_id, SaveAsInfo *info)
+{
+	if (response_id == GTK_RESPONSE_ACCEPT)
+		save_it (widget, info);
+	else
+		close_it (widget, info);
 }
 
 static void
 destroy_it(void *data, GObject *where_the_object_was)
 {
 	SaveAsInfo *info = data;
+
 	g_free (info->vcard);
 	g_free (info);
 }
 
 static char *
-make_safe_filename (const char *prefix, char *name)
+make_safe_filename (char *name)
 {
 	char *safe, *p;
 
@@ -311,16 +322,13 @@
 		name = _("card.vcf");
 	}
 
-	p = strrchr (name, '/');
-	if (p)
-		safe = g_strdup_printf ("%s%s%s", prefix, p, ".vcf");
+	if (!g_strrstr (name, ".vcf"))
+		safe = g_strdup_printf ("%s%s", name, ".vcf");
 	else
-		safe = g_strdup_printf ("%s/%s%s", prefix, name, ".vcf");
-	
-	p = strrchr (safe, '/') + 1;
-	if (p)
-		e_filename_make_safe (p);
-	
+		safe = g_strdup (name);
+
+	e_filename_make_safe (safe);
+
 	return safe;
 }
 
@@ -391,43 +399,54 @@
 void
 eab_contact_save (char *title, EContact *contact, GtkWindow *parent_window)
 {
-	GtkFileSelection *filesel;
+	GtkFileChooserDialog *filechooser;
 	char *file;
 	char *name;
 	SaveAsInfo *info = g_new(SaveAsInfo, 1);
 
-	filesel = GTK_FILE_SELECTION(gtk_file_selection_new(title));
+	filechooser = GTK_FILE_CHOOSER_DIALOG (gtk_file_chooser_dialog_new (title,
+									    parent_window,
+									    GTK_FILE_CHOOSER_ACTION_SAVE,
+									    GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
+									    GTK_STOCK_SAVE, GTK_RESPONSE_ACCEPT,
+									    NULL));
+	gtk_dialog_set_default_response (GTK_DIALOG (filechooser), GTK_RESPONSE_ACCEPT);
 
 	name = e_contact_get (contact, E_CONTACT_FILE_AS);
-	file = make_safe_filename (g_get_home_dir(), name);
-	gtk_file_selection_set_filename (filesel, file);
+	file = make_safe_filename (name);
+	gtk_file_chooser_set_current_folder (GTK_FILE_CHOOSER (filechooser), g_get_home_dir ());
+	gtk_file_chooser_set_current_name (GTK_FILE_CHOOSER (filechooser), file);
 	g_free (file);
 
-	info->filesel = filesel;
+	info->filechooser = filechooser;
 	info->vcard = e_vcard_to_string (E_VCARD (contact), EVC_FORMAT_VCARD_30);
 
-	g_signal_connect(filesel->ok_button, "clicked",
-			 G_CALLBACK (save_it), info);
-	g_signal_connect(filesel->cancel_button, "clicked",
-			 G_CALLBACK (close_it), info);
-	g_object_weak_ref (G_OBJECT (filesel), destroy_it, info);
+	g_signal_connect (filechooser, "response",
+			  G_CALLBACK (filechooser_response), info);
+	g_object_weak_ref (G_OBJECT (filechooser), destroy_it, info);
 
 	if (parent_window) {
-		gtk_window_set_transient_for (GTK_WINDOW (filesel),
+		gtk_window_set_transient_for (GTK_WINDOW (filechooser),
 					      parent_window);
-		gtk_window_set_modal (GTK_WINDOW (filesel), TRUE);
+		gtk_window_set_modal (GTK_WINDOW (filechooser), TRUE);
 	}
 
-	gtk_widget_show(GTK_WIDGET(filesel));
+	gtk_widget_show(GTK_WIDGET(filechooser));
 }
 
 void
 eab_contact_list_save (char *title, GList *list, GtkWindow *parent_window)
 {
-	GtkFileSelection *filesel;
+	GtkFileChooserDialog *filechooser;
 	SaveAsInfo *info = g_new(SaveAsInfo, 1);
 
-	filesel = GTK_FILE_SELECTION(gtk_file_selection_new(title));
+	filechooser = GTK_FILE_CHOOSER_DIALOG (gtk_file_chooser_dialog_new (title,
+									    parent_window,
+									    GTK_FILE_CHOOSER_ACTION_SAVE,
+									    GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
+									    GTK_STOCK_SAVE, GTK_RESPONSE_ACCEPT,
+									    NULL));
+	gtk_dialog_set_default_response (GTK_DIALOG (filechooser), GTK_RESPONSE_ACCEPT);
 
 	/* This is a filename. Translators take note. */
 	if (list && list->data && list->next == NULL) {
@@ -436,32 +455,32 @@
 		if (!name)
 			name = e_contact_get (E_CONTACT (list->data), E_CONTACT_FULL_NAME);
 
-		file = make_safe_filename (g_get_home_dir(), name);
-		gtk_file_selection_set_filename (filesel, file);
+		file = make_safe_filename (name);
+		gtk_file_chooser_set_current_folder (GTK_FILE_CHOOSER (filechooser), g_get_home_dir ());
+		gtk_file_chooser_set_current_name (GTK_FILE_CHOOSER (filechooser), file);
 		g_free (file);
 	} else {
 		char *file;
-		file = make_safe_filename (g_get_home_dir(), _("list"));
-		gtk_file_selection_set_filename (filesel, file);
+		file = make_safe_filename (_("list"));
+		gtk_file_chooser_set_current_folder (GTK_FILE_CHOOSER (filechooser), g_get_home_dir ());
+		gtk_file_chooser_set_current_name (GTK_FILE_CHOOSER (filechooser), file);
 		g_free (file);
 	}
 
-	info->filesel = filesel;
+	info->filechooser = filechooser;
 	info->vcard = eab_contact_list_to_string (list);
-	
-	g_signal_connect(filesel->ok_button, "clicked",
-			 G_CALLBACK (save_it), info);
-	g_signal_connect(filesel->cancel_button, "clicked",
-			 G_CALLBACK (close_it), info);
-	g_object_weak_ref (G_OBJECT (filesel), destroy_it, info);
+
+	g_signal_connect (filechooser, "response",
+			  G_CALLBACK (filechooser_response), info);
+	g_object_weak_ref (G_OBJECT (filechooser), destroy_it, info);
 
 	if (parent_window) {
-		gtk_window_set_transient_for (GTK_WINDOW (filesel),
+		gtk_window_set_transient_for (GTK_WINDOW (filechooser),
 					      parent_window);
-		gtk_window_set_modal (GTK_WINDOW (filesel), TRUE);
+		gtk_window_set_modal (GTK_WINDOW (filechooser), TRUE);
 	}
 
-	gtk_widget_show(GTK_WIDGET(filesel));
+	gtk_widget_show(GTK_WIDGET(filechooser));
 }
 
 typedef struct ContactCopyProcess_ ContactCopyProcess;
Index: composer/ChangeLog
===================================================================
RCS file: /cvs/gnome/evolution/composer/ChangeLog,v
retrieving revision 1.614
diff -u -r1.614 ChangeLog
--- composer/ChangeLog	22 Mar 2004 18:35:27 -0000	1.614
+++ composer/ChangeLog	26 Mar 2004 23:39:20 -0000
@@ -1,3 +1,8 @@
+2004-03-27  Carlos Garnacho Parro  <garnacho tuxerver net>
+
+	* e-msg-component-select-file.[ch], e-msg-composer.c: made it 
+	to use the GtkFileChooser widget
+
 2004-03-22  Radek Doulik  <rodo ximian com>
 
 	* e-msg-composer.c (disable_editor): do not set editor
Index: composer/e-msg-composer-select-file.c
===================================================================
RCS file: /cvs/gnome/evolution/composer/e-msg-composer-select-file.c,v
retrieving revision 1.26
diff -u -r1.26 e-msg-composer-select-file.c
--- composer/e-msg-composer-select-file.c	6 Oct 2003 16:56:52 -0000	1.26
+++ composer/e-msg-composer-select-file.c	26 Mar 2004 23:39:21 -0000
@@ -29,7 +29,7 @@
 
 #include <gtk/gtkbox.h>
 #include <gtk/gtkcheckbutton.h>
-#include <gtk/gtkfilesel.h>
+#include <gtk/gtkfilechooser.h>
 #include <gtk/gtkmain.h>
 #include <gtk/gtksignal.h>
 
@@ -38,71 +38,87 @@
 
 #include "e-msg-composer-select-file.h"
 
-static GtkFileSelection *
-run_selector(EMsgComposer *composer, const char *title, int multi, gboolean *showinline_p)
+static GtkFileChooserDialog *
+run_selector(EMsgComposer *composer, const char *title, int multi, gboolean *showinline_p, gboolean save_mode)
 {
-	GtkFileSelection *selection;
+	GtkFileChooserDialog *filechooser;
 	GtkWidget *showinline = NULL;
 	char *path;
+	GtkFileChooserAction action;
 
-	selection = (GtkFileSelection *)gtk_file_selection_new(title);
-	gtk_window_set_transient_for((GtkWindow *)selection, (GtkWindow *)composer);
-	gtk_window_set_wmclass((GtkWindow *)selection, "fileselection", "Evolution:composer");
-	gtk_window_set_modal((GtkWindow *)selection, TRUE);
-	gnome_window_icon_set_from_file((GtkWindow *)selection, EVOLUTION_DATADIR "/images/evolution/compose-message.png");
-	gtk_file_selection_set_select_multiple((GtkFileSelection *)selection, multi);
+	if (save_mode)
+		filechooser = (GtkFileChooserDialog *) gtk_file_chooser_dialog_new (title,
+										    NULL,
+										    GTK_FILE_CHOOSER_ACTION_SAVE,
+										    GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
+										    GTK_STOCK_SAVE, GTK_RESPONSE_ACCEPT,
+										    NULL);
+	else
+		filechooser = (GtkFileChooserDialog *) gtk_file_chooser_dialog_new (title,
+										    NULL,
+										    GTK_FILE_CHOOSER_ACTION_OPEN,
+										    GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
+										    GTK_STOCK_OPEN, GTK_RESPONSE_ACCEPT,
+										    NULL);
+
+	gtk_dialog_set_default_response (GTK_DIALOG (filechooser), GTK_RESPONSE_ACCEPT);
+
+	gtk_window_set_transient_for((GtkWindow *)filechooser, (GtkWindow *)composer);
+	gtk_window_set_wmclass((GtkWindow *)filechooser, "filechooser", "Evolution:composer");
+	gtk_window_set_modal((GtkWindow *)filechooser, TRUE);
+	gnome_window_icon_set_from_file((GtkWindow *)filechooser, EVOLUTION_DATADIR "/images/evolution/compose-message.png");
+
+	if (!save_mode)
+		gtk_file_chooser_set_select_multiple((GtkFileChooser *)filechooser, multi);
 
 	/* restore last path used */
 	path = g_object_get_data((GObject *)composer, "attach_path");
-	if (path == NULL) {
-		path = g_strdup_printf("%s/", g_get_home_dir());
-		gtk_file_selection_set_filename(selection, path);
-		g_free(path);
-	} else {
-		gtk_file_selection_set_filename(selection, path);
-	}
+	if (!path)
+		gtk_file_chooser_set_current_folder(GTK_FILE_CHOOSER (filechooser), g_get_home_dir ());
+	else
+		gtk_file_chooser_set_current_folder(GTK_FILE_CHOOSER (filechooser), path);
 
 	if (showinline_p) {
 		showinline = gtk_check_button_new_with_label (_("Suggest automatic display of attachment"));
 		gtk_widget_show (showinline);
-		gtk_box_pack_end (GTK_BOX (selection->main_vbox), showinline, FALSE, FALSE, 4);
+		gtk_file_chooser_set_extra_widget (GTK_FILE_CHOOSER (filechooser), showinline);
 	}
 
-	if (gtk_dialog_run((GtkDialog *)selection) == GTK_RESPONSE_OK) {
+	if (gtk_dialog_run(GTK_DIALOG (filechooser)) == GTK_RESPONSE_ACCEPT) {
 		if (showinline_p)
 			*showinline_p = gtk_toggle_button_get_active((GtkToggleButton *)showinline);
-		path = g_path_get_dirname(gtk_file_selection_get_filename(selection));
+		path = g_path_get_dirname(gtk_file_chooser_get_filename(GTK_FILE_CHOOSER (filechooser)));
 		g_object_set_data_full((GObject *)composer, "attach_path", g_strdup_printf("%s/", path), g_free);
 		g_free(path);
 	} else {
-		gtk_widget_destroy((GtkWidget *)selection);
-		selection = NULL;
+		gtk_widget_destroy((GtkWidget *)filechooser);
+		filechooser = NULL;
 	}
 
-	return selection;
+	return filechooser;
 }
 
 /**
  * e_msg_composer_select_file:
  * @composer: a composer
- * @title: the title for the file selection dialog box
+ * @title: the title for the file chooser dialog box
  *
- * This pops up a file selection dialog box with the given title
+ * This pops up a file chooser dialog box with the given title
  * and allows the user to select a file.
  *
  * Return value: the selected filename, or %NULL if the user
  * cancelled.
  **/
 char *
-e_msg_composer_select_file (EMsgComposer *composer, const char *title)
+e_msg_composer_select_file (EMsgComposer *composer, const char *title, gboolean save_mode)
 {
-	GtkFileSelection *selection;
+	GtkFileChooserDialog *filechooser;
 	char *name = NULL;
 
-	selection = run_selector (composer, title, TRUE, NULL);
-	if (selection) {
-		name = g_strdup(gtk_file_selection_get_filename(selection));
-		gtk_widget_destroy((GtkWidget *)selection);
+	filechooser = run_selector (composer, title, TRUE, FALSE, save_mode);
+	if (filechooser) {
+		name = g_strdup(gtk_file_chooser_get_filename(GTK_FILE_CHOOSER (filechooser)));
+		gtk_widget_destroy((GtkWidget *)filechooser);
 	}
 
 	return name;
@@ -111,26 +127,28 @@
 GPtrArray *
 e_msg_composer_select_file_attachments (EMsgComposer *composer, gboolean *showinline_p)
 {
-	GtkFileSelection *selection;
+	GtkFileChooserDialog *filechooser;
 	GPtrArray *list = NULL;
-	char **files;
-	int i;
+	GSList *files, *l;
 
-	selection = run_selector(composer, _("Attach file(s)"), TRUE, showinline_p);
-	if (selection) {
-		files = gtk_file_selection_get_selections(selection);
+	filechooser = run_selector(composer, _("Attach file(s)"), TRUE, showinline_p, FALSE);
+	if (filechooser) {
+		files = gtk_file_chooser_get_filenames (GTK_FILE_CHOOSER (filechooser));
 		
-		if (files != NULL) {
+		if (files) {
 			list = g_ptr_array_new ();
-			for (i = 0; files[i]; i++)
-				g_ptr_array_add (list, g_strdup (files[i]));
+			l = files;
 			
-			g_strfreev (files);
+			while (l) {
+				g_ptr_array_add (list, l->data);
+				l = l->next;
+			}
+
+			g_slist_free (files);
 		}
 		
-		gtk_widget_destroy((GtkWidget *)selection);
+		gtk_widget_destroy((GtkWidget *)filechooser);
 	}
 
 	return list;
 }
-
Index: composer/e-msg-composer-select-file.h
===================================================================
RCS file: /cvs/gnome/evolution/composer/e-msg-composer-select-file.h,v
retrieving revision 1.5
diff -u -r1.5 e-msg-composer-select-file.h
--- composer/e-msg-composer-select-file.h	11 Dec 2001 01:01:05 -0000	1.5
+++ composer/e-msg-composer-select-file.h	26 Mar 2004 23:39:21 -0000
@@ -27,7 +27,8 @@
 #include "e-msg-composer.h"
 
 char *e_msg_composer_select_file (EMsgComposer *composer,
-				  const char *title);
+				  const char *title,
+				  gboolean save_mode);
 
 GPtrArray *e_msg_composer_select_file_attachments (EMsgComposer *composer,
 						   gboolean *inline_p);
Index: composer/e-msg-composer.c
===================================================================
RCS file: /cvs/gnome/evolution/composer/e-msg-composer.c,v
retrieving revision 1.443
diff -u -r1.443 e-msg-composer.c
--- composer/e-msg-composer.c	22 Mar 2004 18:35:26 -0000	1.443
+++ composer/e-msg-composer.c	26 Mar 2004 23:39:32 -0000
@@ -1143,7 +1143,7 @@
 	if (default_filename != NULL)
 		filename = g_strdup (default_filename);
 	else
-		filename = e_msg_composer_select_file (composer, _("Save as..."));
+		filename = e_msg_composer_select_file (composer, _("Save as..."), TRUE);
 	
 	if (filename == NULL)
 		return;
@@ -1597,7 +1597,7 @@
 	
 	composer = E_MSG_COMPOSER (data);
 	
-	file_name = e_msg_composer_select_file (composer, _("Open file"));
+	file_name = e_msg_composer_select_file (composer, _("Open file"), FALSE);
 	if (file_name == NULL)
 		return;
 	
Index: e-util/ChangeLog
===================================================================
RCS file: /cvs/gnome/evolution/e-util/ChangeLog,v
retrieving revision 1.443
diff -u -r1.443 ChangeLog
--- e-util/ChangeLog	18 Mar 2004 13:21:06 -0000	1.443
+++ e-util/ChangeLog	26 Mar 2004 23:39:34 -0000
@@ -1,3 +1,7 @@
+2004-03-27  Carlos Garnacho Parro  <garnacho tuxerver net>
+
+	* e-dialog-utils.c: made it to use the new GtkFileChooser widget
+
 2004-03-18  Not Zed  <NotZed Ximian com>
 
 	* e-account.c: Added options for transport_url and source_url
Index: e-util/e-dialog-utils.c
===================================================================
RCS file: /cvs/gnome/evolution/e-util/e-dialog-utils.c,v
retrieving revision 1.18
diff -u -r1.18 e-dialog-utils.c
--- e-util/e-dialog-utils.c	9 Mar 2004 21:10:42 -0000	1.18
+++ e-util/e-dialog-utils.c	26 Mar 2004 23:39:35 -0000
@@ -26,7 +26,9 @@
 
 #include <gdk/gdkx.h>
 
-#include <gtk/gtkfilesel.h>
+#include <gtk/gtkfilechooser.h>
+#include <gtk/gtkfilechooserdialog.h>
+#include <gtk/gtkstock.h>
 #include <gtk/gtkmain.h>
 #include <gtk/gtkplug.h>
 
@@ -227,23 +229,19 @@
 	gdk_window_set_transient_for (GTK_WIDGET (dialog)->window, parent);
 }
 
-
-
 static void
-save_ok (GtkWidget *widget, gpointer data)
+save_ok (GtkWidget *fc, gpointer data)
 {
-	GtkWidget *fs;
 	char **filename = data;
 	const char *path;
 	int btn = GTK_RESPONSE_YES;
 	
-	fs = gtk_widget_get_toplevel (widget);
-	path = gtk_file_selection_get_filename (GTK_FILE_SELECTION (fs));
+	path = gtk_file_chooser_get_filename (GTK_FILE_CHOOSER (fc));
 	
 	if (g_file_test (path, G_FILE_TEST_IS_REGULAR)) {
 		GtkWidget *dlg;
 		
-		dlg = gtk_message_dialog_new (GTK_WINDOW (fs), 0,
+		dlg = gtk_message_dialog_new (GTK_WINDOW (fc), 0,
 					      GTK_MESSAGE_QUESTION,
 					      GTK_BUTTONS_YES_NO,
 					      _("A file by that name already exists.\n"
@@ -261,27 +259,38 @@
 	gtk_main_quit ();
 }
 
+static void
+filechooser_response (GtkWidget *fc, gint response_id, gpointer data)
+{
+	if (response_id == GTK_RESPONSE_ACCEPT)
+		save_ok (fc, data);
+	else
+		gtk_widget_destroy (fc);
+}
+
 char *
 e_file_dialog_save (const char *title)
 {
-	GtkFileSelection *fs;
-	char *path, *filename = NULL;
-	
-	fs = GTK_FILE_SELECTION (gtk_file_selection_new (title));
-	path = g_strdup_printf ("%s/", g_get_home_dir ());
-	gtk_file_selection_set_filename (fs, path);
-	g_free (path);
-	
-	g_signal_connect (fs->ok_button, "clicked", G_CALLBACK (save_ok), &filename);
-	g_signal_connect (fs->cancel_button, "clicked", G_CALLBACK (gtk_main_quit), NULL);
-	
-	gtk_widget_show (GTK_WIDGET (fs));
-	gtk_grab_add (GTK_WIDGET (fs));
+	GtkFileChooserDialog *fc;
+	char *filename = NULL;
+
+	fc = GTK_FILE_CHOOSER_DIALOG (gtk_file_chooser_dialog_new (title,
+								   NULL,
+								   GTK_FILE_CHOOSER_ACTION_SAVE,
+								   GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
+								   GTK_STOCK_SAVE, GTK_RESPONSE_ACCEPT,
+								   NULL));
+	gtk_dialog_set_default_response (GTK_DIALOG (fc), GTK_RESPONSE_ACCEPT);
+
+	gtk_file_chooser_set_current_folder (GTK_FILE_CHOOSER (fc), g_get_home_dir ());
+
+	g_signal_connect (fc, "response", G_CALLBACK (filechooser_response), &filename);
+
+	gtk_widget_show (GTK_WIDGET (fc));
+	gtk_grab_add (GTK_WIDGET (fc));
 	gtk_main ();
 	
-	gtk_widget_destroy (GTK_WIDGET (fs));
+	gtk_widget_destroy (GTK_WIDGET (fc));
 	
 	return filename;
 }
-
-
Index: mail/ChangeLog
===================================================================
RCS file: /cvs/gnome/evolution/mail/ChangeLog,v
retrieving revision 1.3188
diff -u -r1.3188 ChangeLog
--- mail/ChangeLog	25 Mar 2004 13:02:13 -0000	1.3188
+++ mail/ChangeLog	26 Mar 2004 23:39:53 -0000
@@ -1,3 +1,7 @@
+2004-03-27  Carlos Garnacho Parro  <garnacho tuxerver net>
+
+	* em-utils.c: made it to use the GtkFileChooser widget
+
 2004-03-25  Sivaiah Nallagatla <snallagatla novell com>
 
 	* Makefile.am : remove local-config.glade from glade_DATA as it 
Index: mail/em-utils.c
===================================================================
RCS file: /cvs/gnome/evolution/mail/em-utils.c,v
retrieving revision 1.26
diff -u -r1.26 em-utils.c
--- mail/em-utils.c	23 Mar 2004 06:15:08 -0000	1.26
+++ mail/em-utils.c	26 Mar 2004 23:39:57 -0000
@@ -1369,38 +1369,36 @@
 
 /* Saving messages... */
 
-static GtkFileSelection *
-emu_get_save_filesel (GtkWidget *parent, const char *title, const char *name)
+static GtkFileChooserDialog *
+emu_get_save_filechooser (GtkWidget *parent, const char *title, const char *name)
 {
-	GtkFileSelection *filesel;
-	char *gdir, *mname = NULL, *filename;
-	const char *realname, *dir;
+	GtkFileChooserDialog *filechooser;
+	const char *dir;
+	char *realname;
 	GConfClient *gconf;
 
-	filesel = (GtkFileSelection *)gtk_file_selection_new(title);
-	if (parent)
-		e_dialog_set_transient_for((GtkWindow *)filesel, parent);
-
+	filechooser = GTK_FILE_CHOOSER_DIALOG (gtk_file_chooser_dialog_new (title,
+									    GTK_WINDOW (parent),
+									    GTK_FILE_CHOOSER_ACTION_SAVE,
+									    GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
+									    GTK_STOCK_SAVE, GTK_RESPONSE_ACCEPT,
+									    NULL));
+	gtk_dialog_set_default_response (GTK_DIALOG (filechooser), GTK_RESPONSE_ACCEPT);
+	
 	gconf = gconf_client_get_default();
-	dir = gdir = gconf_client_get_string(gconf, "/apps/evolution/mail/save_dir", NULL);
+	dir = gconf_client_get_string(gconf, "/apps/evolution/mail/save_dir", NULL);
 	g_object_unref(gconf);
 	if (dir == NULL)
 		dir = g_get_home_dir();
+	gtk_file_chooser_set_current_folder (GTK_FILE_CHOOSER (filechooser), dir);
 
 	if (name && name[0]) {
-		realname = mname = g_strdup(name);
-		e_filename_make_safe(mname);
-	} else {
-		realname = "/";
+		realname = g_strdup(name);
+		e_filename_make_safe(realname);
+		gtk_file_chooser_set_current_name (GTK_FILE_CHOOSER (filechooser), realname);
 	}
 
-	filename = g_build_filename(dir, realname, NULL);
-	gtk_file_selection_set_filename(filesel, filename);
-	g_free(filename);
-	g_free(mname);
-	g_free (gdir);
-
-	return filesel;
+	return filechooser;
 }
 
 static void
@@ -1441,12 +1439,12 @@
 }
 
 static void
-emu_save_part_response(GtkFileSelection *filesel, int response, CamelMimePart *part)
+emu_save_part_response(GtkFileChooserDialog *filechooser, int response, CamelMimePart *part)
 {
-	if (response == GTK_RESPONSE_OK) {
-		const char *path = gtk_file_selection_get_filename(filesel);
+	if (response == GTK_RESPONSE_ACCEPT) {
+		const char *path = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER (filechooser));
 
-		if (!emu_can_save((GtkWindow *)filesel, path))
+		if (!emu_can_save((GtkWindow *)filechooser, path))
 			return;
 
 		emu_update_save_path(path);
@@ -1454,7 +1452,7 @@
 		mail_save_part(part, path, NULL, NULL);
 	}
 
-	gtk_widget_destroy((GtkWidget *)filesel);
+	gtk_widget_destroy((GtkWidget *)filechooser);
 	camel_object_unref(part);
 }
 
@@ -1470,7 +1468,7 @@
 em_utils_save_part(GtkWidget *parent, const char *prompt, CamelMimePart *part)
 {
 	const char *name;
-	GtkFileSelection *filesel;
+	GtkFileChooserDialog *filechooser;
 
 	name = camel_mime_part_get_filename(part);
 	if (name == NULL) {
@@ -1483,10 +1481,10 @@
 		}
 	}
 
-	filesel = emu_get_save_filesel(parent, prompt, name);
+	filechooser = emu_get_save_filechooser(parent, prompt, name);
 	camel_object_ref(part);
-	g_signal_connect(filesel, "response", G_CALLBACK(emu_save_part_response), part);
-	gtk_widget_show((GtkWidget *)filesel);
+	g_signal_connect(filechooser, "response", G_CALLBACK(emu_save_part_response), part);
+	gtk_widget_show((GtkWidget *)filechooser);
 }
 
 /**
@@ -1545,12 +1543,12 @@
 };
 
 static void
-emu_save_messages_response(GtkFileSelection *filesel, int response, struct _save_messages_data *data)
+emu_save_messages_response(GtkFileChooserDialog *filechooser, int response, struct _save_messages_data *data)
 {
-	if (response == GTK_RESPONSE_OK) {
-		const char *path = gtk_file_selection_get_filename(filesel);
+	if (response == GTK_RESPONSE_ACCEPT) {
+		const char *path = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER (filechooser));
 
-		if (!emu_can_save((GtkWindow *)filesel, path))
+		if (!emu_can_save((GtkWindow *)filechooser, path))
 			return;
 
 		emu_update_save_path(path);
@@ -1562,7 +1560,7 @@
 	if (data->uids)
 		em_utils_uids_free(data->uids);
 	g_free(data);
-	gtk_widget_destroy((GtkWidget *)filesel);
+	gtk_widget_destroy((GtkWidget *)filechooser);
 }
 
 /**
@@ -1578,20 +1576,20 @@
 em_utils_save_messages (GtkWidget *parent, CamelFolder *folder, GPtrArray *uids)
 {
 	struct _save_messages_data *data;
-	GtkFileSelection *filesel;
+	GtkFileChooserDialog *filechooser;
 
 	g_return_if_fail (CAMEL_IS_FOLDER (folder));
 	g_return_if_fail (uids != NULL);
 
-	filesel = emu_get_save_filesel(parent, _("Save Message..."), NULL);
+	filechooser = emu_get_save_filechooser(parent, _("Save Message..."), NULL);
 	camel_object_ref(folder);
 	
 	data = g_malloc(sizeof(struct _save_messages_data));
 	data->folder = folder;
 	data->uids = uids;
 
-	g_signal_connect(filesel, "response", G_CALLBACK(emu_save_messages_response), data);
-	gtk_widget_show((GtkWidget *)filesel);
+	g_signal_connect(filechooser, "response", G_CALLBACK(emu_save_messages_response), data);
+	gtk_widget_show((GtkWidget *)filechooser);
 }
 
 /* ********************************************************************** */
Index: smime/ChangeLog
===================================================================
RCS file: /cvs/gnome/evolution/smime/ChangeLog,v
retrieving revision 1.26
diff -u -r1.26 ChangeLog
--- smime/ChangeLog	24 Mar 2004 22:26:59 -0000	1.26
+++ smime/ChangeLog	26 Mar 2004 23:40:00 -0000
@@ -1,3 +1,7 @@
+2004-03-27  Carlos Garnacho Parro  <garnacho tuxerver net>
+
+	* gui/certificate-manager.c: made it to use the GtkFileChooser widget
+
 2004-03-24  Chris Toshok  <toshok ximian com>
 
 	* lib/smime-marshal.list: add BOOL:POINTER,POINTER,POINTER,POINTER
Index: smime/gui/certificate-manager.c
===================================================================
RCS file: /cvs/gnome/evolution/smime/gui/certificate-manager.c,v
retrieving revision 1.10
diff -u -r1.10 certificate-manager.c
--- smime/gui/certificate-manager.c	24 Mar 2004 22:27:00 -0000	1.10
+++ smime/gui/certificate-manager.c	26 Mar 2004 23:40:02 -0000
@@ -125,10 +125,16 @@
 static void
 import_your (GtkWidget *widget, CertificateManagerData *cfm)
 {
-	GtkWidget *filesel = gtk_file_selection_new (_("Select a cert to import..."));
+	GtkWidget *filechooser = gtk_file_chooser_dialog_new (_("Select a cert to import..."),
+							      NULL,
+							      GTK_FILE_CHOOSER_ACTION_OPEN,
+							      GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
+							      GTK_STOCK_OPEN, GTK_RESPONSE_ACCEPT,
+							      NULL);
+	gtk_dialog_set_default_response (GTK_DIALOG (filechooser), GTK_RESPONSE_ACCEPT);
 
-	if (GTK_RESPONSE_OK == gtk_dialog_run (GTK_DIALOG (filesel))) {
-		const char *filename = gtk_file_selection_get_filename (GTK_FILE_SELECTION (filesel));
+	if (GTK_RESPONSE_ACCEPT == gtk_dialog_run (GTK_DIALOG (filechooser))) {
+		const char *filename = gtk_file_chooser_get_filename (GTK_FILE_CHOOSER (filechooser));
 		if (e_cert_db_import_pkcs12_file (e_cert_db_peek (),
 						  filename, NULL /* XXX */)) {
 			/* there's no telling how many certificates were added during the import,
@@ -139,7 +145,7 @@
 		}
 	}
 
-	gtk_widget_destroy (filesel);
+	gtk_widget_destroy (filechooser);
 }
 
 static void
@@ -322,10 +328,16 @@
 static void
 import_contact (GtkWidget *widget, CertificateManagerData *cfm)
 {
-	GtkWidget *filesel = gtk_file_selection_new (_("Select a cert to import..."));
+	GtkWidget *filechooser = gtk_file_chooser_dialog_new (_("Select a cert to import..."),
+							      NULL,
+							      GTK_FILE_CHOOSER_ACTION_OPEN,
+							      GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
+							      GTK_STOCK_OPEN, GTK_RESPONSE_ACCEPT,
+							      NULL);
+	gtk_dialog_set_default_response (GTK_DIALOG (filechooser), GTK_RESPONSE_ACCEPT);
 
-	if (GTK_RESPONSE_OK == gtk_dialog_run (GTK_DIALOG (filesel))) {
-		const char *filename = gtk_file_selection_get_filename (GTK_FILE_SELECTION (filesel));
+	if (GTK_RESPONSE_ACCEPT == gtk_dialog_run (GTK_DIALOG (filechooser))) {
+		const char *filename = gtk_file_chooser_get_filename (GTK_FILE_CHOOSER (filechooser));
 
 		if (e_cert_db_import_certs_from_file (e_cert_db_peek (),
 						      filename,
@@ -340,7 +352,7 @@
 		}
 	}
 
-	gtk_widget_destroy (filesel);
+	gtk_widget_destroy (filechooser);
 }
 
 static void
@@ -500,10 +512,16 @@
 static void
 import_ca (GtkWidget *widget, CertificateManagerData *cfm)
 {
-	GtkWidget *filesel = gtk_file_selection_new (_("Select a cert to import..."));
+	GtkWidget *filechooser = gtk_file_chooser_dialog_new (_("Select a cert to import..."),
+							      NULL,
+							      GTK_FILE_CHOOSER_ACTION_OPEN,
+							      GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
+							      GTK_STOCK_OPEN, GTK_RESPONSE_ACCEPT,
+							      NULL);
+	gtk_dialog_set_default_response (GTK_DIALOG (filechooser), GTK_RESPONSE_ACCEPT);
 
-	if (GTK_RESPONSE_OK == gtk_dialog_run (GTK_DIALOG (filesel))) {
-		const char *filename = gtk_file_selection_get_filename (GTK_FILE_SELECTION (filesel));
+	if (GTK_RESPONSE_ACCEPT == gtk_dialog_run (GTK_DIALOG (filechooser))) {
+		const char *filename = gtk_file_chooser_get_filename (GTK_FILE_CHOOSER (filechooser));
 
 		if (e_cert_db_import_certs_from_file (e_cert_db_peek (),
 						      filename,
@@ -517,7 +535,7 @@
 		}
 	}
 
-	gtk_widget_destroy (filesel);
+	gtk_widget_destroy (filechooser);
 }
 
 static void


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]