aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/filesel.c20
-rw-r--r--src/mimeview.c5
-rw-r--r--src/textview.c7
3 files changed, 26 insertions, 6 deletions
diff --git a/src/filesel.c b/src/filesel.c
index 67db7881..be1b1cb6 100644
--- a/src/filesel.c
+++ b/src/filesel.c
@@ -64,16 +64,22 @@ static GSList *filesel_select_file_full(const gchar *title, const gchar *file,
GtkFileChooserAction action,
gboolean multiple)
{
- static gchar *cwd = NULL;
+ static GHashTable *path_table = NULL;
+ gchar *cwd;
GtkWidget *dialog;
gchar *prev_dir;
GSList *list = NULL;
- if (!cwd)
- cwd = g_strdup(startup_dir);
+ if (!path_table)
+ path_table = g_hash_table_new_full(g_str_hash, g_str_equal,
+ g_free, g_free);
prev_dir = g_get_current_dir();
- change_dir(cwd);
+
+ if ((cwd = g_hash_table_lookup(path_table, title)) != NULL)
+ change_dir(cwd);
+ else
+ change_dir(startup_dir);
dialog = filesel_create(title, action);
@@ -94,9 +100,11 @@ static GSList *filesel_select_file_full(const gchar *title, const gchar *file,
if (gtk_dialog_run(GTK_DIALOG(dialog)) == GTK_RESPONSE_ACCEPT) {
list = gtk_file_chooser_get_filenames(GTK_FILE_CHOOSER(dialog));
if (list) {
- g_free(cwd);
cwd = gtk_file_chooser_get_current_folder
(GTK_FILE_CHOOSER(dialog));
+ if (cwd)
+ g_hash_table_replace
+ (path_table, g_strdup(title), cwd);
}
}
@@ -143,6 +151,8 @@ static GtkWidget *filesel_create(const gchar *title,
gtk_window_set_modal(GTK_WINDOW(dialog), TRUE);
gtk_window_set_wmclass
(GTK_WINDOW(dialog), "file_selection", "Sylpheed");
+ gtk_dialog_set_default_response
+ (GTK_DIALOG(dialog), GTK_RESPONSE_ACCEPT);
MANAGE_WINDOW_SIGNALS_CONNECT(dialog);
diff --git a/src/mimeview.c b/src/mimeview.c
index d6529f8e..00288090 100644
--- a/src/mimeview.c
+++ b/src/mimeview.c
@@ -837,8 +837,11 @@ static gint mimeview_key_pressed(GtkWidget *widget, GdkEventKey *event,
KEY_PRESS_EVENT_STOP();
mimeview_display_as_text(mimeview);
return TRUE;
- case GDK_Left:
case GDK_Escape:
+ if (summaryview)
+ gtk_widget_grab_focus(summaryview->ctree);
+ break;
+ case GDK_Left:
case GDK_Delete:
if (summaryview)
summary_pass_key_press_event(summaryview, event);
diff --git a/src/textview.c b/src/textview.c
index 5e575945..8ad0eff1 100644
--- a/src/textview.c
+++ b/src/textview.c
@@ -1546,6 +1546,13 @@ static gboolean textview_key_pressed(GtkWidget *widget, GdkEventKey *event,
if (summaryview)
summary_pass_key_press_event(summaryview, event);
break;
+ case GDK_Escape:
+ if (summaryview && textview == messageview->textview)
+ gtk_widget_grab_focus(summaryview->ctree);
+ else if (messageview->type == MVIEW_MIME &&
+ textview == messageview->mimeview->textview)
+ gtk_widget_grab_focus(messageview->mimeview->ctree);
+ break;
case GDK_n:
case GDK_N:
case GDK_p: