aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog12
-rw-r--r--ChangeLog.ja12
-rw-r--r--src/compose.c14
-rw-r--r--src/export.c7
-rw-r--r--src/filesel.c159
-rw-r--r--src/filesel.h9
-rw-r--r--src/import.c7
-rw-r--r--src/messageview.c13
-rw-r--r--src/mimeview.c12
-rw-r--r--src/summaryview.c13
10 files changed, 124 insertions, 134 deletions
diff --git a/ChangeLog b/ChangeLog
index 8eb88c84..f7099534 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,15 @@
+2005-02-25
+
+ * src/compose.c
+ src/messageview.c
+ src/mimeview.c
+ src/export.c
+ src/summaryview.c
+ src/import.c
+ src/filesel.[ch]: replaced GtkFileSelection with
+ GtkFileChooserDialog.
+ Added filesel_save_as().
+
2005-02-24
* src/alertpanel.c: modified its design to fit other GTK2 apps.
diff --git a/ChangeLog.ja b/ChangeLog.ja
index 74e9f30b..8ea7471e 100644
--- a/ChangeLog.ja
+++ b/ChangeLog.ja
@@ -1,3 +1,15 @@
+2005-02-25
+
+ * src/compose.c
+ src/messageview.c
+ src/mimeview.c
+ src/export.c
+ src/summaryview.c
+ src/import.c
+ src/filesel.[ch]: GtkFileSelection を GtkFileChooserDialog で
+ 置き換えた。
+ filesel_save_as() を追加。
+
2005-02-24
* src/alertpanel.c: 他の GTK2 アプリに合うようにデザインを修正。
diff --git a/src/compose.c b/src/compose.c
index 15dca3ad..2e160099 100644
--- a/src/compose.c
+++ b/src/compose.c
@@ -5246,28 +5246,34 @@ static void compose_draft_cb(gpointer data, guint action, GtkWidget *widget)
static void compose_attach_cb(gpointer data, guint action, GtkWidget *widget)
{
Compose *compose = (Compose *)data;
- const gchar *file;
+ gchar *file;
gchar *utf8_filename;
- file = filesel_select_file(_("Select file"), NULL);
+ file = filesel_select_file(_("Select file"), NULL,
+ GTK_FILE_CHOOSER_ACTION_OPEN);
if (file && *file) {
utf8_filename = conv_filename_to_utf8(file);
compose_attach_append(compose, file, utf8_filename, NULL);
g_free(utf8_filename);
}
+
+ g_free(file);
}
static void compose_insert_file_cb(gpointer data, guint action,
GtkWidget *widget)
{
Compose *compose = (Compose *)data;
- const gchar *file;
+ gchar *file;
- file = filesel_select_file(_("Select file"), NULL);
+ file = filesel_select_file(_("Select file"), NULL,
+ GTK_FILE_CHOOSER_ACTION_OPEN);
if (file && *file)
compose_insert_file(compose, file);
+
+ g_free(file);
}
static void compose_insert_sig_cb(gpointer data, guint action,
diff --git a/src/export.c b/src/export.c
index ee5d06b8..f1de66a9 100644
--- a/src/export.c
+++ b/src/export.c
@@ -225,10 +225,11 @@ static void export_cancel_cb(GtkWidget *widget, gpointer data)
static void export_filesel_cb(GtkWidget *widget, gpointer data)
{
- const gchar *filename;
+ gchar *filename;
gchar *utf8_filename;
- filename = filesel_select_file(_("Select exporting file"), NULL);
+ filename = filesel_select_file(_("Select exporting file"), NULL,
+ GTK_FILE_CHOOSER_ACTION_SAVE);
if (!filename) return;
utf8_filename = g_filename_to_utf8(filename, -1, NULL, NULL, NULL);
@@ -238,6 +239,8 @@ static void export_filesel_cb(GtkWidget *widget, gpointer data)
}
gtk_entry_set_text(GTK_ENTRY(file_entry), utf8_filename);
g_free(utf8_filename);
+
+ g_free(filename);
}
static void export_srcsel_cb(GtkWidget *widget, gpointer data)
diff --git a/src/filesel.c b/src/filesel.c
index f885eac2..eb11a12e 100644
--- a/src/filesel.c
+++ b/src/filesel.c
@@ -1,6 +1,6 @@
/*
* Sylpheed -- a GTK+ based, lightweight, and fast e-mail client
- * Copyright (C) 1999-2003 Hiroyuki Yamamoto
+ * Copyright (C) 1999-2005 Hiroyuki Yamamoto
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -18,133 +18,98 @@
*/
#include <glib.h>
+#include <glib/gi18n.h>
#include <gdk/gdkkeysyms.h>
-#include <gtk/gtkwidget.h>
-#include <gtk/gtkfilesel.h>
-#include <gtk/gtkentry.h>
-#include <gtk/gtkmain.h>
-#include <gtk/gtksignal.h>
+#include <gtk/gtkfilechooserdialog.h>
+#include <gtk/gtkstock.h>
#include "main.h"
#include "filesel.h"
#include "manage_window.h"
-#include "gtkutils.h"
-#include "codeconv.h"
+#include "alertpanel.h"
+#include "utils.h"
-static GtkWidget *filesel;
-static gboolean filesel_ack;
-static gboolean filesel_fin;
+static GtkWidget *filesel_create(const gchar *title,
+ GtkFileChooserAction action);
-static void filesel_create(const gchar *title);
-static void filesel_ok_cb(GtkWidget *widget, gpointer data);
-static void filesel_cancel_cb(GtkWidget *widget, gpointer data);
-static gint delete_event(GtkWidget *widget, GdkEventAny *event, gpointer data);
-static gboolean key_pressed(GtkWidget *widget, GdkEventKey *event, gpointer data);
-
-gchar *filesel_select_file(const gchar *title, const gchar *file)
+gchar *filesel_select_file(const gchar *title, const gchar *file,
+ GtkFileChooserAction action)
{
- static gchar *filename = NULL;
static gchar *cwd = NULL;
+ GtkWidget *dialog;
+ gchar *filename = NULL;
- filesel_create(title);
-
- manage_window_set_transient(GTK_WINDOW(filesel));
+ dialog = filesel_create(title, action);
- if (filename) {
- g_free(filename);
- filename = NULL;
- }
+ manage_window_set_transient(GTK_WINDOW(dialog));
if (!cwd)
- cwd = g_strconcat(startup_dir, G_DIR_SEPARATOR_S, NULL);
-
- gtk_file_selection_set_filename(GTK_FILE_SELECTION(filesel), cwd);
-
- if (file) {
- gchar *fs_filename;
-
- fs_filename = conv_filename_from_utf8(file);
- gtk_file_selection_set_filename(GTK_FILE_SELECTION(filesel),
- fs_filename);
- gtk_editable_select_region
- (GTK_EDITABLE(GTK_FILE_SELECTION(filesel)->selection_entry),
- 0, -1);
- g_free(fs_filename);
- }
+ cwd = g_strdup(startup_dir);
- gtk_widget_show(filesel);
+ gtk_file_chooser_set_current_folder(GTK_FILE_CHOOSER(dialog), cwd);
+ if (file)
+ gtk_file_chooser_set_current_name(GTK_FILE_CHOOSER(dialog),
+ file);
- filesel_ack = filesel_fin = FALSE;
+ gtk_widget_show(dialog);
- while (filesel_fin == FALSE)
- gtk_main_iteration();
-
- if (filesel_ack) {
- const gchar *str;
-
- str = gtk_file_selection_get_filename
- (GTK_FILE_SELECTION(filesel));
- if (str && str[0] != '\0') {
+ if (gtk_dialog_run(GTK_DIALOG(dialog)) == GTK_RESPONSE_ACCEPT) {
+ filename = gtk_file_chooser_get_filename
+ (GTK_FILE_CHOOSER(dialog));
+ if (filename) {
gchar *dir;
- filename = g_strdup(str);
- dir = g_dirname(str);
+ dir = g_dirname(filename);
g_free(cwd);
- cwd = g_strconcat(dir, G_DIR_SEPARATOR_S, NULL);
- g_free(dir);
+ cwd = dir;
}
}
- manage_window_focus_out(filesel, NULL, NULL);
- gtk_widget_destroy(filesel);
- GTK_EVENTS_FLUSH();
+ manage_window_focus_out(dialog, NULL, NULL);
+ gtk_widget_destroy(dialog);
return filename;
}
-static void filesel_create(const gchar *title)
+gchar *filesel_save_as(const gchar *file)
{
- filesel = gtk_file_selection_new(title);
- gtk_window_set_position(GTK_WINDOW(filesel), GTK_WIN_POS_CENTER);
- gtk_window_set_modal(GTK_WINDOW(filesel), TRUE);
- gtk_window_set_wmclass
- (GTK_WINDOW(filesel), "file_selection", "Sylpheed");
-
- g_signal_connect(G_OBJECT(GTK_FILE_SELECTION(filesel)->ok_button),
- "clicked", G_CALLBACK(filesel_ok_cb),
- NULL);
- g_signal_connect
- (G_OBJECT(GTK_FILE_SELECTION(filesel)->cancel_button),
- "clicked", G_CALLBACK(filesel_cancel_cb),
- NULL);
- g_signal_connect(G_OBJECT(filesel), "delete_event",
- G_CALLBACK(delete_event), NULL);
- g_signal_connect(G_OBJECT(filesel), "key_press_event",
- G_CALLBACK(key_pressed), NULL);
- MANAGE_WINDOW_SIGNALS_CONNECT(filesel);
-}
+ gchar *filename;
-static void filesel_ok_cb(GtkWidget *widget, gpointer data)
-{
- filesel_ack = TRUE;
- filesel_fin = TRUE;
-}
+ filename = filesel_select_file(_("Save as"), file,
+ GTK_FILE_CHOOSER_ACTION_SAVE);
-static void filesel_cancel_cb(GtkWidget *widget, gpointer data)
-{
- filesel_ack = FALSE;
- filesel_fin = TRUE;
-}
+ if (filename && is_file_exist(filename)) {
+ AlertValue aval;
-static gint delete_event(GtkWidget *widget, GdkEventAny *event, gpointer data)
-{
- filesel_cancel_cb(NULL, NULL);
- return TRUE;
+ aval = alertpanel(_("Overwrite"),
+ _("Overwrite existing file?"),
+ GTK_STOCK_OK, GTK_STOCK_CANCEL, NULL);
+ if (G_ALERTDEFAULT != aval) {
+ g_free(filename);
+ filename = NULL;
+ }
+ }
+
+ return filename;
}
-static gboolean key_pressed(GtkWidget *widget, GdkEventKey *event, gpointer data)
+static GtkWidget *filesel_create(const gchar *title,
+ GtkFileChooserAction action)
{
- if (event && event->keyval == GDK_Escape)
- filesel_cancel_cb(NULL, NULL);
- return FALSE;
+ GtkWidget *dialog;
+
+ dialog = gtk_file_chooser_dialog_new
+ (title, NULL, action,
+ action == GTK_FILE_CHOOSER_ACTION_SAVE ? GTK_STOCK_SAVE
+ : GTK_STOCK_OPEN, GTK_RESPONSE_ACCEPT,
+ GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
+ NULL);
+ gtk_window_set_position(GTK_WINDOW(dialog), GTK_WIN_POS_CENTER);
+ gtk_window_set_modal(GTK_WINDOW(dialog), TRUE);
+ gtk_window_set_wmclass
+ (GTK_WINDOW(dialog), "file_selection", "Sylpheed");
+
+ MANAGE_WINDOW_SIGNALS_CONNECT(dialog);
+
+ return dialog;
}
diff --git a/src/filesel.h b/src/filesel.h
index e4018585..098e31c1 100644
--- a/src/filesel.h
+++ b/src/filesel.h
@@ -1,6 +1,6 @@
/*
* Sylpheed -- a GTK+ based, lightweight, and fast e-mail client
- * Copyright (C) 1999,2000 Hiroyuki Yamamoto
+ * Copyright (C) 1999-2005 Hiroyuki Yamamoto
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -21,7 +21,12 @@
#define __FILESEL_H__
#include <glib.h>
+#include <gtk/gtkfilechooser.h>
-gchar *filesel_select_file(const gchar *title, const gchar *file);
+gchar *filesel_select_file (const gchar *title,
+ const gchar *file,
+ GtkFileChooserAction action);
+
+gchar *filesel_save_as (const gchar *file);
#endif /* __FILESEL_H__ */
diff --git a/src/import.c b/src/import.c
index c11ef21c..378847e0 100644
--- a/src/import.c
+++ b/src/import.c
@@ -230,10 +230,11 @@ static void import_cancel_cb(GtkWidget *widget, gpointer data)
static void import_filesel_cb(GtkWidget *widget, gpointer data)
{
- const gchar *filename;
+ gchar *filename;
gchar *utf8_filename;
- filename = filesel_select_file(_("Select importing file"), NULL);
+ filename = filesel_select_file(_("Select importing file"), NULL,
+ GTK_FILE_CHOOSER_ACTION_OPEN);
if (!filename) return;
utf8_filename = g_filename_to_utf8(filename, -1, NULL, NULL, NULL);
@@ -243,6 +244,8 @@ static void import_filesel_cb(GtkWidget *widget, gpointer data)
}
gtk_entry_set_text(GTK_ENTRY(file_entry), utf8_filename);
g_free(utf8_filename);
+
+ g_free(filename);
}
static void import_destsel_cb(GtkWidget *widget, gpointer data)
diff --git a/src/messageview.c b/src/messageview.c
index dd0b3788..02fd543a 100644
--- a/src/messageview.c
+++ b/src/messageview.c
@@ -613,16 +613,9 @@ void messageview_save_as(MessageView *messageview)
Xstrdup_a(filename, msginfo->subject, return);
subst_for_filename(filename);
}
- dest = filesel_select_file(_("Save as"), filename);
- if (!dest) return;
- if (is_file_exist(dest)) {
- AlertValue aval;
- aval = alertpanel(_("Overwrite"),
- _("Overwrite existing file?"),
- GTK_STOCK_OK, GTK_STOCK_CANCEL, NULL);
- if (G_ALERTDEFAULT != aval) return;
- }
+ dest = filesel_save_as(filename);
+ if (!dest) return;
src = procmsg_get_message_file(msginfo);
if (copy_file(src, dest, TRUE) < 0) {
@@ -630,6 +623,8 @@ void messageview_save_as(MessageView *messageview)
g_basename(dest));
}
g_free(src);
+
+ g_free(dest);
}
static void messageview_destroy_cb(GtkWidget *widget, MessageView *messageview)
diff --git a/src/mimeview.c b/src/mimeview.c
index 517778dc..8f1178dd 100644
--- a/src/mimeview.c
+++ b/src/mimeview.c
@@ -801,20 +801,14 @@ static void mimeview_save_as(MimeView *mimeview)
subst_for_filename(defname);
}
- filename = filesel_select_file(_("Save as"), defname);
+ filename = filesel_save_as(defname);
if (!filename) return;
- if (is_file_exist(filename)) {
- AlertValue aval;
-
- aval = alertpanel(_("Overwrite"),
- _("Overwrite existing file?"),
- GTK_STOCK_OK, GTK_STOCK_CANCEL, NULL);
- if (G_ALERTDEFAULT != aval) return;
- }
if (procmime_get_part(filename, mimeview->file, partinfo) < 0)
alertpanel_error
(_("Can't save the part of multipart message."));
+
+ g_free(filename);
}
static void mimeview_launch(MimeView *mimeview)
diff --git a/src/summaryview.c b/src/summaryview.c
index aac3bf61..92a75593 100644
--- a/src/summaryview.c
+++ b/src/summaryview.c
@@ -2709,16 +2709,9 @@ void summary_save_as(SummaryView *summaryview)
Xstrdup_a(filename, msginfo->subject, return);
subst_for_filename(filename);
}
- dest = filesel_select_file(_("Save as"), filename);
- if (!dest) return;
- if (is_file_exist(dest)) {
- AlertValue aval;
- aval = alertpanel(_("Overwrite"),
- _("Overwrite existing file?"),
- GTK_STOCK_OK, GTK_STOCK_CANCEL, NULL);
- if (G_ALERTDEFAULT != aval) return;
- }
+ dest = filesel_save_as(filename);
+ if (!dest) return;
src = procmsg_get_message_file(msginfo);
if (copy_file(src, dest, TRUE) < 0) {
@@ -2730,6 +2723,8 @@ void summary_save_as(SummaryView *summaryview)
g_free(utf8_dest);
}
g_free(src);
+
+ g_free(dest);
}
void summary_print(SummaryView *summaryview)