* Fixes NB#56966, NB#57493
authorSergio Villar Senin <svillar@igalia.com>
Tue, 29 May 2007 13:27:05 +0000 (13:27 +0000)
committerSergio Villar Senin <svillar@igalia.com>
Tue, 29 May 2007 13:27:05 +0000 (13:27 +0000)
* Now the folder view remembers its last selected folder and shows it when the application is launched
* Commented some debug code
* Removed an unneeded call to update_model

pmo-trunk-r1986

src/maemo/modest-main-window.c
src/modest-tny-account.c
src/modest-widget-memory.c
src/widgets/modest-folder-view.c

index 903d891..63ed5e0 100644 (file)
@@ -323,12 +323,14 @@ restore_settings (ModestMainWindow *self)
 
        conf = modest_runtime_get_conf ();
        
-       modest_widget_memory_restore (conf, G_OBJECT(self), 
+       modest_widget_memory_restore (conf, G_OBJECT(self),
                                      MODEST_CONF_MAIN_WINDOW_KEY);
-       modest_widget_memory_restore (conf, G_OBJECT(priv->main_paned),
-                                     MODEST_CONF_MAIN_PANED_KEY);
        modest_widget_memory_restore (conf, G_OBJECT(priv->header_view),
                                      MODEST_CONF_HEADER_VIEW_KEY);
+       modest_widget_memory_restore (conf, G_OBJECT(priv->main_paned),
+                                     MODEST_CONF_MAIN_PANED_KEY);
+       modest_widget_memory_restore (conf, G_OBJECT(priv->folder_view),
+                                     MODEST_CONF_FOLDER_VIEW_KEY);
 }
 
 
@@ -348,6 +350,8 @@ save_state (ModestWindow *window)
                                   MODEST_CONF_MAIN_PANED_KEY);
        modest_widget_memory_save (conf, G_OBJECT(priv->header_view), 
                                   MODEST_CONF_HEADER_VIEW_KEY);
+       modest_widget_memory_save (conf, G_OBJECT(priv->folder_view), 
+                                  MODEST_CONF_FOLDER_VIEW_KEY);
 }
 
 static void
@@ -743,7 +747,6 @@ modest_main_window_set_style (ModestMainWindow *self,
        action = gtk_ui_manager_get_action (parent_priv->ui_manager, "/ToolBar/ToolbarToggleView");
 
        priv->style = style;
-
        switch (style) {
        case MODEST_MAIN_WINDOW_STYLE_SIMPLE:
                /* Remove main paned */
index 1a3cd5f..0e521fe 100644 (file)
@@ -213,7 +213,7 @@ modest_tny_account_new_from_server_account (ModestAccountMgr *account_mgr,
         * We do that in modest_tny_account_new_for_local_folders() instead. */
        if (account_data->uri)  {
                tny_account_set_url_string (TNY_ACCOUNT(tny_account), account_data->uri);
-               g_message ("DEBUG: %s: local account-url:\n  %s", __FUNCTION__, account_data->uri);
+/*             g_message ("DEBUG: %s: local account-url:\n  %s", __FUNCTION__, account_data->uri); */
        }
        else {
                /* Set camel-specific options: */
@@ -304,7 +304,7 @@ modest_tny_account_new_from_server_account (ModestAccountMgr *account_mgr,
 
        /* FIXME: for debugging */
        url = tny_account_get_url_string (TNY_ACCOUNT(tny_account));
-       g_message ("modest: %s:\n  account-url: %s", __FUNCTION__, url);
+/*     g_message ("modest: %s:\n  account-url: %s", __FUNCTION__, url); */
        g_free (url);
        /***********************/
        
index c1d6ed7..faf0cd8 100644 (file)
@@ -393,16 +393,32 @@ save_settings_folder_view (ModestConf *conf, ModestFolderView *folder_view,
 {
        gchar *key;
        const gchar* account_id;
+       GtkTreeSelection *selection;
+       GtkTreeModel *model;
+       GtkTreeIter iter;
 
-       /* Restore the visible account */
+       /* Save the visible account */
        key = _modest_widget_memory_get_keyname (name, "visible_server_account_id");
 
        account_id = modest_folder_view_get_account_id_of_visible_server_account (folder_view);
        if (account_id)
                modest_conf_set_string (conf, key, account_id, NULL);
+       g_free (key);
 
+       /* Save the last selected folder */
+       key = _modest_widget_memory_get_keyname (name, "last_selected_path");
+       selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (folder_view));
+       if (gtk_tree_selection_get_selected (selection, &model, &iter)) {
+               gchar *str;
+               GtkTreePath *path = gtk_tree_model_get_path (model, &iter);
+               str = gtk_tree_path_to_string (path);
+               modest_conf_set_string (conf, key, str, NULL);
+               g_free (str);
+               gtk_tree_path_free (path);
+       }
        g_free (key);
 
+
        return TRUE;
 }
 
@@ -411,7 +427,7 @@ restore_settings_folder_view (ModestConf *conf,
                              ModestFolderView *folder_view,
                              const gchar *name)
 {
-       gchar *key, *account_id;
+       gchar *key, *account_id, *str;
 
        /* Restore the visible account */
        key = _modest_widget_memory_get_keyname (name, "visible_server_account_id");
@@ -446,6 +462,24 @@ restore_settings_folder_view (ModestConf *conf,
 
        g_free (key);
 
+       /* Restore the last selected folder. Check first that the model is not NULL */
+       if (gtk_tree_view_get_model (GTK_TREE_VIEW (folder_view))) {
+               key = _modest_widget_memory_get_keyname (name, "last_selected_path");
+               if (modest_conf_key_exists (conf, key, NULL)) {
+                       GtkTreePath *path;
+                       GtkTreeSelection *selection;
+
+                       selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (folder_view));
+                       str = modest_conf_get_string (conf, key, NULL);
+                       path = gtk_tree_path_new_from_string ((const gchar *) str);
+                       gtk_tree_view_expand_to_path (GTK_TREE_VIEW (folder_view), path);
+                       gtk_tree_selection_select_path (selection, path);
+                       g_free (str);
+                       gtk_tree_path_free (path);
+               }
+               g_free (key);
+       }
+
        return TRUE;
 }
 
index ca54cbf..ae7a423 100644 (file)
@@ -140,7 +140,6 @@ struct _ModestFolderViewPrivate {
        gulong                changed_signal;
        gulong                accounts_reloaded_signal;
        
-       GtkTreeSelection     *cur_selection;
        TnyFolderStoreQuery  *query;
        guint                 timer_expander;
 
@@ -493,9 +492,6 @@ modest_folder_view_init (ModestFolderView *obj)
        /* Setup drag and drop */
        setup_drag_and_drop (GTK_TREE_VIEW(obj));
 
-       /* Restore conf */
-       modest_widget_memory_restore (conf, G_OBJECT (obj), MODEST_CONF_FOLDER_VIEW_KEY);
-
        /* Connect signals */
        g_signal_connect (G_OBJECT (obj), 
                          "key-press-event", 
@@ -597,10 +593,6 @@ modest_folder_view_set_account_store (TnyAccountStoreView *self, TnyAccountStore
                g_signal_connect (G_OBJECT(account_store), "accounts_reloaded",
                                  G_CALLBACK (on_accounts_reloaded), self);
        
-       if (!update_model (MODEST_FOLDER_VIEW (self),
-                          MODEST_TNY_ACCOUNT_STORE (priv->account_store)))
-               g_printerr ("modest: failed to update model\n");
-
        g_object_unref (G_OBJECT (device));
 }
 
@@ -618,8 +610,12 @@ static void
 on_accounts_reloaded   (TnyAccountStore *account_store, 
                        gpointer user_data)
 {
+       ModestConf *conf = modest_runtime_get_conf ();
+
+       modest_widget_memory_save (conf, G_OBJECT (user_data), MODEST_CONF_FOLDER_VIEW_KEY);
        update_model (MODEST_FOLDER_VIEW (user_data), 
                      MODEST_TNY_ACCOUNT_STORE(account_store));
+       modest_widget_memory_restore (conf, G_OBJECT (user_data), MODEST_CONF_FOLDER_VIEW_KEY);
 }
 
 void
@@ -827,7 +823,6 @@ static gboolean
 update_model (ModestFolderView *self, ModestTnyAccountStore *account_store)
 {
        ModestFolderViewPrivate *priv;
-
        GtkTreeModel     *model;
 
        g_return_val_if_fail (account_store, FALSE);
@@ -953,8 +948,7 @@ on_selection_changed (GtkTreeSelection *sel, gpointer user_data)
        g_return_if_fail (user_data);
        
        priv = MODEST_FOLDER_VIEW_GET_PRIVATE(user_data);
-       priv->cur_selection = sel;
-       
+
        /* folder was _un_selected if true */
        if (!gtk_tree_selection_get_selected (sel, &model, &iter)) {
                if (priv->cur_folder_store)
@@ -1679,7 +1673,6 @@ modest_folder_view_set_account_id_of_visible_server_account (ModestFolderView *s
                                                             const gchar *account_id)
 {
        ModestFolderViewPrivate *priv;
-       ModestConf *conf;
        GtkTreeModel *model;
 
        g_return_if_fail (self);
@@ -1692,10 +1685,6 @@ modest_folder_view_set_account_id_of_visible_server_account (ModestFolderView *s
                g_free (priv->visible_account_id);
        priv->visible_account_id = g_strdup (account_id);
 
-       /* Save preferences */
-       conf = modest_runtime_get_conf ();
-       modest_widget_memory_save (conf, G_OBJECT (self), MODEST_CONF_FOLDER_VIEW_KEY);
-
        /* Refilter */
        model = gtk_tree_view_get_model (GTK_TREE_VIEW (self));
        if (GTK_IS_TREE_MODEL_FILTER (model))