[evolution-patches] Patch for using GtkFileChooser
- From: Carlos Garnacho <garnacho tuxerver net>
- To: evolution-patches lists ximian com
- Subject: [evolution-patches] Patch for using GtkFileChooser
- Date: Sat, 27 Mar 2004 12:17:05 +0100
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]