From 4e00aa5fcd63aca03c7d7cf9494c3191f1d64721 Mon Sep 17 00:00:00 2001 From: Jose Dapena Paz Date: Thu, 2 Apr 2009 12:25:00 +0000 Subject: [PATCH] Remember last used paths in filechoosers, and set docs as default folder for non image operations (fixes NB#90878) pmo-trunk-r8552 --- src/hildon2/modest-maemo-utils.c | 19 +++++++++----- src/hildon2/modest-msg-edit-window.c | 46 ++++++++++++++++++++++++++++++++-- src/hildon2/modest-msg-view-window.c | 28 ++++++++++++++++++--- src/modest-defs.h | 5 ++++ src/modest-init.c | 8 ++++++ 5 files changed, 94 insertions(+), 12 deletions(-) diff --git a/src/hildon2/modest-maemo-utils.c b/src/hildon2/modest-maemo-utils.c index 2a10670..a0bad06 100644 --- a/src/hildon2/modest-maemo-utils.c +++ b/src/hildon2/modest-maemo-utils.c @@ -107,18 +107,25 @@ modest_maemo_utils_get_device_name (void) void modest_maemo_utils_setup_images_filechooser (GtkFileChooser *chooser) { - gchar *images_folder; GtkFileFilter *file_filter; GList *image_mimetypes_list; GList *node; + gchar *conf_folder; g_return_if_fail (GTK_IS_FILE_CHOOSER (chooser)); - /* Set the default folder to images folder */ - images_folder = g_build_filename (g_getenv (MODEST_MAEMO_UTILS_MYDOCS_ENV), - MODEST_MAEMO_UTILS_DEFAULT_IMAGE_FOLDER, NULL); - gtk_file_chooser_set_current_folder (chooser, images_folder); - g_free (images_folder); + conf_folder = modest_conf_get_string (modest_runtime_get_conf (), MODEST_CONF_LATEST_INSERT_IMAGE_PATH, NULL); + if (conf_folder && conf_folder[0] != '\0') { + gtk_file_chooser_set_current_folder_uri (chooser, conf_folder); + } else { + gchar *images_folder; + /* Set the default folder to images folder */ + images_folder = g_build_filename (g_getenv (MODEST_MAEMO_UTILS_MYDOCS_ENV), + MODEST_MAEMO_UTILS_DEFAULT_IMAGE_FOLDER, NULL); + gtk_file_chooser_set_current_folder (chooser, images_folder); + g_free (images_folder); + } + g_free (conf_folder); /* Set the images mime filter */ file_filter = gtk_file_filter_new (); diff --git a/src/hildon2/modest-msg-edit-window.c b/src/hildon2/modest-msg-edit-window.c index 4f77d83..396d7f6 100644 --- a/src/hildon2/modest-msg-edit-window.c +++ b/src/hildon2/modest-msg-edit-window.c @@ -2192,8 +2192,22 @@ modest_msg_edit_window_insert_image (ModestMsgEditWindow *window) response = gtk_dialog_run (GTK_DIALOG (dialog)); switch (response) { case GTK_RESPONSE_OK: + { + gchar *current_folder; uris = gtk_file_chooser_get_uris (GTK_FILE_CHOOSER (dialog)); - break; + current_folder = gtk_file_chooser_get_current_folder_uri (GTK_FILE_CHOOSER (dialog)); + if (current_folder && current_folder != '\0') { + GError *err = NULL; + modest_conf_set_string (modest_runtime_get_conf (), MODEST_CONF_LATEST_INSERT_IMAGE_PATH, + current_folder, &err); + if (err != NULL) { + g_debug ("Error storing latest used folder: %s", err->message); + g_error_free (err); + } + } + g_free (current_folder); + } + break; default: break; } @@ -2305,8 +2319,23 @@ on_attach_file_response (GtkDialog *dialog, switch (arg1) { case GTK_RESPONSE_OK: + { + gchar *current_folder; + uris = gtk_file_chooser_get_uris (GTK_FILE_CHOOSER (dialog)); - break; + current_folder = gtk_file_chooser_get_current_folder_uri (GTK_FILE_CHOOSER (dialog)); + if (current_folder && current_folder != '\0') { + GError *err = NULL; + modest_conf_set_string (modest_runtime_get_conf (), MODEST_CONF_LATEST_ATTACH_FILE_PATH, + current_folder, &err); + if (err != NULL) { + g_debug ("Error storing latest used folder: %s", err->message); + g_error_free (err); + } + } + g_free (current_folder); + } + break; default: break; } @@ -2345,6 +2374,7 @@ modest_msg_edit_window_offer_attach_file (ModestMsgEditWindow *window) { GtkWidget *dialog = NULL; ModestMsgEditWindowPrivate *priv; + gchar *conf_folder; g_return_if_fail (MODEST_IS_MSG_EDIT_WINDOW(window)); @@ -2356,6 +2386,18 @@ modest_msg_edit_window_offer_attach_file (ModestMsgEditWindow *window) dialog = hildon_file_chooser_dialog_new (GTK_WINDOW (window), GTK_FILE_CHOOSER_ACTION_OPEN); gtk_window_set_title (GTK_WINDOW (dialog), _("mcen_ti_select_attachment_title")); + conf_folder = modest_conf_get_string (modest_runtime_get_conf (), MODEST_CONF_LATEST_ATTACH_FILE_PATH, NULL); + if (conf_folder && conf_folder[0] != '\0') { + gtk_file_chooser_set_current_folder_uri (GTK_FILE_CHOOSER (dialog), conf_folder); + } else { + gchar *docs_folder; + /* Set the default folder to images folder */ + docs_folder = g_build_filename (g_getenv (MODEST_MAEMO_UTILS_MYDOCS_ENV), + ".documents", NULL); + gtk_file_chooser_set_current_folder (GTK_FILE_CHOOSER (dialog), docs_folder); + g_free (docs_folder); + } + g_free (conf_folder); gtk_file_chooser_set_select_multiple (GTK_FILE_CHOOSER (dialog), TRUE); modest_window_mgr_set_modal (modest_runtime_get_window_mgr (), GTK_WINDOW (dialog), GTK_WINDOW (window)); diff --git a/src/hildon2/modest-msg-view-window.c b/src/hildon2/modest-msg-view-window.c index 605f8df..45a981c 100644 --- a/src/hildon2/modest-msg-view-window.c +++ b/src/hildon2/modest-msg-view-window.c @@ -2697,6 +2697,7 @@ save_attachments_response (GtkDialog *dialog, TnyList *mime_parts; gchar *chooser_uri; GList *files_to_save = NULL; + gchar *current_folder; mime_parts = TNY_LIST (user_data); @@ -2704,6 +2705,17 @@ save_attachments_response (GtkDialog *dialog, goto end; chooser_uri = gtk_file_chooser_get_uri (GTK_FILE_CHOOSER (dialog)); + current_folder = gtk_file_chooser_get_current_folder_uri (GTK_FILE_CHOOSER (dialog)); + if (current_folder && current_folder != '\0') { + GError *err = NULL; + modest_conf_set_string (modest_runtime_get_conf (), MODEST_CONF_LATEST_SAVE_ATTACHMENT_PATH, + current_folder,&err); + if (err != NULL) { + g_debug ("Error storing latest used folder: %s", err->message); + g_error_free (err); + } + } + g_free (current_folder); if (!modest_utils_folder_writable (chooser_uri)) { hildon_banner_show_information @@ -2758,7 +2770,7 @@ modest_msg_view_window_save_attachments (ModestMsgViewWindow *window, { ModestMsgViewWindowPrivate *priv; GtkWidget *save_dialog = NULL; - gchar *folder = NULL; + gchar *conf_folder = NULL; gchar *filename = NULL; gchar *save_multiple_str = NULL; @@ -2811,9 +2823,17 @@ modest_msg_view_window_save_attachments (ModestMsgViewWindow *window, GTK_FILE_CHOOSER_ACTION_SAVE); /* set folder */ - folder = g_build_filename (g_getenv (MYDOCS_ENV), DOCS_FOLDER, NULL); - gtk_file_chooser_set_current_folder (GTK_FILE_CHOOSER (save_dialog), folder); - g_free (folder); + conf_folder = modest_conf_get_string (modest_runtime_get_conf (), MODEST_CONF_LATEST_SAVE_ATTACHMENT_PATH, NULL); + if (conf_folder && conf_folder[0] != '\0') { + gtk_file_chooser_set_current_folder_uri (GTK_FILE_CHOOSER (save_dialog), conf_folder); + } else { + gchar *docs_folder; + /* Set the default folder to images folder */ + docs_folder = g_build_filename (g_getenv (MYDOCS_ENV), DOCS_FOLDER, NULL); + gtk_file_chooser_set_current_folder (GTK_FILE_CHOOSER (save_dialog), docs_folder); + g_free (docs_folder); + } + g_free (conf_folder); /* set filename */ if (filename) { diff --git a/src/modest-defs.h b/src/modest-defs.h index 0476fa6..18ac528 100644 --- a/src/modest-defs.h +++ b/src/modest-defs.h @@ -116,6 +116,11 @@ const gchar *modest_defs_namespace (const gchar *string); #define MODEST_CONF_SHOW_CC (modest_defs_namespace ("/show_cc")) #define MODEST_CONF_SHOW_BCC (modest_defs_namespace ("/show_bcc")) +/* Last used folders for insert images, attach file and save attachments */ +#define MODEST_CONF_LATEST_ATTACH_FILE_PATH (modest_defs_namespace ("/latest_attach_file_path")) +#define MODEST_CONF_LATEST_INSERT_IMAGE_PATH (modest_defs_namespace ("/latest_inset_image_path")) +#define MODEST_CONF_LATEST_SAVE_ATTACHMENT_PATH (modest_defs_namespace ("/latest_save_attachment_path")) + /* This is the alarmd cookie, obtained from alarm_event_add(), * which apparently remains valid between application instances. * We store it so that we can remove it later. diff --git a/src/modest-init.c b/src/modest-init.c index b2e91e9..f62b431 100644 --- a/src/modest-init.c +++ b/src/modest-init.c @@ -727,6 +727,14 @@ init_default_settings (ModestConf *conf) if (!modest_conf_key_exists (conf, MODEST_CONF_SHOW_BCC, NULL)) modest_conf_set_bool (conf, MODEST_CONF_SHOW_BCC, FALSE, NULL); + /* File chooser keys */ + if (!modest_conf_key_exists (conf, MODEST_CONF_LATEST_ATTACH_FILE_PATH, NULL)) + modest_conf_set_string (conf, MODEST_CONF_LATEST_ATTACH_FILE_PATH, "", NULL); + if (!modest_conf_key_exists (conf, MODEST_CONF_LATEST_INSERT_IMAGE_PATH, NULL)) + modest_conf_set_string (conf, MODEST_CONF_LATEST_INSERT_IMAGE_PATH, "", NULL); + if (!modest_conf_key_exists (conf, MODEST_CONF_LATEST_SAVE_ATTACHMENT_PATH, NULL)) + modest_conf_set_string (conf, MODEST_CONF_LATEST_SAVE_ATTACHMENT_PATH, "", NULL); + /* Global settings */ if (!modest_conf_key_exists (conf, MODEST_CONF_AUTO_UPDATE, NULL)) modest_conf_set_bool (conf, MODEST_CONF_AUTO_UPDATE, TRUE, NULL); -- 1.7.9.5