Now we set the proper mailbox filtering in folder window
authorJose Dapena Paz <jdapena@igalia.com>
Mon, 2 Mar 2009 15:42:19 +0000 (15:42 +0000)
committerJose Dapena Paz <jdapena@igalia.com>
Mon, 2 Mar 2009 15:42:19 +0000 (15:42 +0000)
pmo-trunk-r7756

src/hildon2/modest-folder-window.c
src/hildon2/modest-folder-window.h
src/hildon2/modest-mailboxes-window.c
src/widgets/modest-folder-view.c
src/widgets/modest-folder-view.h

index a171a99..8ee75b3 100644 (file)
@@ -437,6 +437,19 @@ free_refs:
 
 }
 
+void
+modest_folder_window_set_mailbox (ModestFolderWindow *self,
+                                 const gchar *mailbox)
+{
+       ModestFolderWindowPrivate *priv = NULL;
+
+       g_return_if_fail (MODEST_IS_FOLDER_WINDOW(self));
+       priv = MODEST_FOLDER_WINDOW_GET_PRIVATE (self);
+
+       modest_folder_view_set_mailbox (MODEST_FOLDER_VIEW (priv->folder_view), mailbox);
+
+}
+
 static void
 setup_menu (ModestFolderWindow *self)
 {
index f7fb2bf..bf978e5 100644 (file)
@@ -95,6 +95,16 @@ void modest_folder_window_set_account (ModestFolderWindow *self,
                                       const gchar *account_name);
 
 /**
+ * modest_folder_window_set_mailbox:
+ * @self: a #ModestFolderWindow
+ * @mailbox: a string
+ *
+ * Sets the current mailbox in the folder window.
+ */
+void modest_folder_window_set_mailbox (ModestFolderWindow *self,
+                                      const gchar *mailbox);
+
+/**
  * modest_folder_Window_transfer_mode_enabled:
  * @self: a #ModestFolderWindow
  *
index 4e6fd9c..ae9ce57 100644 (file)
@@ -400,8 +400,13 @@ on_mailbox_activated (ModestFolderView *mailboxes_view,
                gtk_widget_destroy (new_window);
                new_window = NULL;
        } else {
+               const gchar *name;
                active_account = modest_window_get_active_account (MODEST_WINDOW (self));
                modest_folder_window_set_account (MODEST_FOLDER_WINDOW (new_window), active_account);
+               name = tny_folder_get_name (folder);
+               if (name) {
+                       modest_folder_window_set_mailbox (MODEST_FOLDER_WINDOW (new_window), name);
+               }
                gtk_widget_show (new_window);
        }
        
index acf572f..aa64f3a 100644 (file)
@@ -232,6 +232,7 @@ struct _ModestFolderViewPrivate {
 
        gchar                *local_account_name;
        gchar                *visible_account_id;
+       gchar                *mailbox;
        ModestFolderViewStyle style;
        ModestFolderViewCellStyle cell_style;
 
@@ -1149,6 +1150,7 @@ modest_folder_view_init (ModestFolderView *obj)
        priv->style          = MODEST_FOLDER_VIEW_STYLE_SHOW_ALL;
        priv->cur_folder_store   = NULL;
        priv->visible_account_id = NULL;
+       priv->mailbox = NULL;
        priv->folder_to_select = NULL;
        priv->outbox_deleted_handler = 0;
        priv->reexpand = TRUE;
@@ -1266,6 +1268,7 @@ modest_folder_view_finalize (GObject *obj)
 
        g_free (priv->local_account_name);
        g_free (priv->visible_account_id);
+       g_free (priv->mailbox);
 
        if (priv->conf_key_signal) {
                g_signal_handler_disconnect (modest_runtime_get_conf (),
@@ -1577,6 +1580,7 @@ on_account_removed (TnyAccountStore *account_store,
 
                /* Clear the current visible account_id */
                modest_folder_view_set_account_id_of_visible_server_account (self, NULL);
+               modest_folder_view_set_mailbox (self, NULL);
 
                /* Call the restore method, this will set the new visible account */
                modest_widget_memory_restore (modest_runtime_get_conf(), G_OBJECT(self),
@@ -1839,11 +1843,13 @@ filter_row (GtkTreeModel *model, GtkTreeIter *iter, gpointer data)
        gboolean found = FALSE;
        gboolean cleared = FALSE;
        ModestTnyFolderRules rules = 0;
+       gchar *fname;
 
        g_return_val_if_fail (MODEST_IS_FOLDER_VIEW (data), FALSE);
        priv = MODEST_FOLDER_VIEW_GET_PRIVATE (data);
 
        gtk_tree_model_get (model, iter,
+                           NAME_COLUMN, &fname,
                            TYPE_COLUMN, &type,
                            INSTANCE_COLUMN, &instance,
                            -1);
@@ -1852,8 +1858,10 @@ filter_row (GtkTreeModel *model, GtkTreeIter *iter, gpointer data)
           happen when the model is being modified while it's being
           drawn. This could occur for example when moving folders
           using drag&drop */
-       if (!instance)
+       if (!instance) {
+               g_free (fname);
                return FALSE;
+       }
 
        if (TNY_IS_ACCOUNT (instance)) {
                TnyAccount *acc = TNY_ACCOUNT (instance);
@@ -1893,8 +1901,13 @@ filter_row (GtkTreeModel *model, GtkTreeIter *iter, gpointer data)
                                            strcmp (account_id, MODEST_MMC_ACCOUNT_ID)) {
                                                /* Show only the visible account id */
                                                if (priv->visible_account_id) {
-                                                       if (strcmp (account_id, priv->visible_account_id))
-                                                               retval = FALSE;
+                                                 if (strcmp (account_id, priv->visible_account_id)) {
+                                                         retval = FALSE;
+                                                 } else if (priv->mailbox) {
+                                                         if (!g_str_has_prefix (fname, priv->mailbox)) {
+                                                                 retval = FALSE;
+                                                         }
+                                                 }
                                                }
                                        }
                                                g_object_unref (account);
@@ -2056,6 +2069,7 @@ filter_row (GtkTreeModel *model, GtkTreeIter *iter, gpointer data)
 
        /* Free */
        g_object_unref (instance);
+        g_free (fname);
 
        return retval;
 }
@@ -3872,3 +3886,17 @@ modest_folder_view_set_list_to_move (ModestFolderView *self,
 
        priv->list_to_move = list;
 }
+
+void
+modest_folder_view_set_mailbox (ModestFolderView *self, const gchar *mailbox)
+{
+       ModestFolderViewPrivate *priv;
+
+       g_return_if_fail (MODEST_IS_FOLDER_VIEW (self));
+       priv = MODEST_FOLDER_VIEW_GET_PRIVATE (self);
+
+       if (priv->mailbox)
+               g_free (priv->mailbox);
+
+       priv->mailbox = g_strdup (mailbox);
+}
index 3d30402..3424d4c 100644 (file)
@@ -184,6 +184,17 @@ void         modest_folder_view_set_account_id_of_visible_server_account (Modest
                                                                          const gchar *account_id);
 
 /**
+ * modest_folder_view_set_visible_mailbox:
+ * @self: a #ModestFolderView
+ * @account_id: the remote account mailbox to show
+ * 
+ * if set an account id to filter, this filters also to show only
+ * folders of a specific mailbox.
+ **/
+void         modest_folder_view_set_mailbox (ModestFolderView *self,
+                                            const gchar *mailbox);
+
+/**
  * modest_folder_view_get_account_id_of_visible_server_account:
  * @self: a #ModestFolderView
  *