* Fixes NB#100011, just created child folders are visible again
[modest] / src / widgets / modest-folder-view.c
index 78be16d..cd9ad27 100644 (file)
@@ -519,6 +519,7 @@ convert_parent_folders_to_dots (gchar **item_name)
 static void
 format_compact_style (gchar **item_name,
                      GObject *instance,
+                     const gchar *mailbox,
                      gboolean bold,
                      gboolean multiaccount,
                      gboolean *use_markup)
@@ -535,6 +536,22 @@ format_compact_style (gchar **item_name,
        folder_type = tny_folder_get_folder_type (folder);
        is_special = (get_cmp_pos (folder_type, folder)!= 4);
 
+       if (mailbox) {
+               /* Remove mailbox prefix if any */
+               gchar *prefix = g_strconcat (mailbox, MODEST_FOLDER_PATH_SEPARATOR, NULL);
+               if (g_str_has_prefix (*item_name, prefix)) {
+                       gchar *new_item_name;
+
+                       new_item_name = g_strdup (*item_name + strlen (prefix));
+                       if (!g_ascii_strcasecmp (new_item_name, "Inbox")) {
+                               g_free (new_item_name);
+                               new_item_name = g_strdup (_("mcen_me_folder_inbox"));
+                       }
+                       g_free (*item_name);
+                       *item_name = new_item_name;
+               }
+       }
+
        if (!is_special || multiaccount) {
                TnyAccount *account = tny_folder_get_account (folder);
                const gchar *folder_name;
@@ -680,7 +697,7 @@ text_cell_data  (GtkTreeViewColumn *column,
 
                multiaccount = (priv->style == MODEST_FOLDER_VIEW_STYLE_SHOW_ALL);
                /* Convert item_name to markup */
-               format_compact_style (&item_name, instance, 
+               format_compact_style (&item_name, instance, priv->mailbox,
                                      item_weight == 800, 
                                      multiaccount, &use_markup);
        }
@@ -1747,6 +1764,9 @@ foreach_folder_with_id (GtkTreeModel *model,
                }
        }
 
+       if (instance)
+               g_object_unref (instance);
+
        return info->found;
        
 }
@@ -1904,8 +1924,12 @@ filter_row (GtkTreeModel *model, GtkTreeIter *iter, gpointer data)
                                                  if (strcmp (account_id, priv->visible_account_id)) {
                                                          retval = FALSE;
                                                  } else if (priv->mailbox) {
+                                                         /* Filter mailboxes */
                                                          if (!g_str_has_prefix (fname, priv->mailbox)) {
                                                                  retval = FALSE;
+                                                         } else if (!strcmp (fname, priv->mailbox)) {
+                                                                 /* Hide mailbox parent */
+                                                                 retval = FALSE;
                                                          }
                                                  }
                                                }
@@ -1974,8 +1998,22 @@ filter_row (GtkTreeModel *model, GtkTreeIter *iter, gpointer data)
        }
 
        if (retval && (priv->filter & MODEST_FOLDER_VIEW_FILTER_HIDE_LOCAL_FOLDERS)) {
-               if (!modest_tny_folder_store_is_remote (TNY_FOLDER_STORE (instance))) {
-                       return FALSE;
+               if (TNY_IS_ACCOUNT (instance)) {
+                       if (modest_tny_account_is_virtual_local_folders (TNY_ACCOUNT (instance)))
+                               return FALSE;
+               } else if (TNY_IS_FOLDER (instance)) {
+                       if (modest_tny_folder_is_local_folder (TNY_FOLDER (instance)))
+                               return FALSE;
+               }
+       }
+
+       if (retval && (priv->filter & MODEST_FOLDER_VIEW_FILTER_HIDE_MCC_FOLDERS)) {
+               if (TNY_IS_ACCOUNT (instance)) {
+                       if (modest_tny_account_is_memory_card_account (TNY_ACCOUNT (instance)))
+                               return FALSE;
+               } else if (TNY_IS_FOLDER (instance)) {
+                       if (modest_tny_folder_is_memory_card_folder (TNY_FOLDER (instance)))
+                               return FALSE;
                }
        }