Remember last used paths in filechoosers, and set docs as default
authorJose Dapena Paz <jdapena@igalia.com>
Thu, 2 Apr 2009 12:25:00 +0000 (12:25 +0000)
committerJose Dapena Paz <jdapena@igalia.com>
Thu, 2 Apr 2009 12:25:00 +0000 (12:25 +0000)
folder for non image operations (fixes NB#90878)

pmo-trunk-r8552

src/hildon2/modest-maemo-utils.c
src/hildon2/modest-msg-edit-window.c
src/hildon2/modest-msg-view-window.c
src/modest-defs.h
src/modest-init.c

index 2a10670..a0bad06 100644 (file)
@@ -107,18 +107,25 @@ modest_maemo_utils_get_device_name (void)
 void
 modest_maemo_utils_setup_images_filechooser (GtkFileChooser *chooser)
 {
 void
 modest_maemo_utils_setup_images_filechooser (GtkFileChooser *chooser)
 {
-       gchar *images_folder;
        GtkFileFilter *file_filter;
        GList *image_mimetypes_list;
        GList *node;
        GtkFileFilter *file_filter;
        GList *image_mimetypes_list;
        GList *node;
+       gchar *conf_folder;
 
        g_return_if_fail (GTK_IS_FILE_CHOOSER (chooser));
 
 
        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 ();
 
        /* Set the images mime filter */
        file_filter = gtk_file_filter_new ();
index 4f77d83..396d7f6 100644 (file)
@@ -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:
        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));
                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;
        }
        default:
                break;
        }
@@ -2305,8 +2319,23 @@ on_attach_file_response (GtkDialog *dialog,
 
        switch (arg1) {
        case GTK_RESPONSE_OK:
 
        switch (arg1) {
        case GTK_RESPONSE_OK:
+       {
+               gchar *current_folder;
+
                uris = gtk_file_chooser_get_uris (GTK_FILE_CHOOSER (dialog));
                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;
        }
        default:
                break;
        }
@@ -2345,6 +2374,7 @@ modest_msg_edit_window_offer_attach_file (ModestMsgEditWindow *window)
 {
        GtkWidget *dialog = NULL;
        ModestMsgEditWindowPrivate *priv;
 {
        GtkWidget *dialog = NULL;
        ModestMsgEditWindowPrivate *priv;
+       gchar *conf_folder;
 
        g_return_if_fail (MODEST_IS_MSG_EDIT_WINDOW(window));
 
 
        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"));
        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));
        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));
index 605f8df..45a981c 100644 (file)
@@ -2697,6 +2697,7 @@ save_attachments_response (GtkDialog *dialog,
        TnyList *mime_parts;
        gchar *chooser_uri;
        GList *files_to_save = NULL;
        TnyList *mime_parts;
        gchar *chooser_uri;
        GList *files_to_save = NULL;
+       gchar *current_folder;
 
        mime_parts = TNY_LIST (user_data);
 
 
        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));
                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 
 
        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;
 {
        ModestMsgViewWindowPrivate *priv;
        GtkWidget *save_dialog = NULL;
-       gchar *folder = NULL;
+       gchar *conf_folder = NULL;
        gchar *filename = NULL;
        gchar *save_multiple_str = 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 */
                                                      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) {
 
        /* set filename */
        if (filename) {
index 0476fa6..18ac528 100644 (file)
@@ -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"))
 
 #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.
 /* 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.
index b2e91e9..f62b431 100644 (file)
@@ -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);
 
        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);
        /* Global settings */
        if (!modest_conf_key_exists (conf, MODEST_CONF_AUTO_UPDATE, NULL))
                modest_conf_set_bool (conf, MODEST_CONF_AUTO_UPDATE, TRUE, NULL);