* src/maemo/modest-msg-edit-window.c:
[modest] / src / modest-tny-folder.c
index 4b9c0d7..d4e4a19 100644 (file)
@@ -92,14 +92,16 @@ TnyFolderType
 modest_tny_folder_guess_folder_type (const TnyFolder *folder)
 {
        TnyFolderType type;
+       
+       g_return_val_if_fail (TNY_IS_FOLDER(folder), TNY_FOLDER_TYPE_UNKNOWN);
 
-       g_return_val_if_fail (folder, TNY_FOLDER_TYPE_UNKNOWN);
-
-       type = tny_folder_get_folder_type (TNY_FOLDER (folder));
+       if (modest_tny_folder_is_local_folder ((TnyFolder*)folder))
+               type = modest_tny_folder_get_local_folder_type ((TnyFolder*)folder);
+       else
+               type = tny_folder_get_folder_type (TNY_FOLDER (folder));
        
        if (type == TNY_FOLDER_TYPE_UNKNOWN) {
                const gchar *folder_name;
-
                folder_name = tny_folder_get_name (TNY_FOLDER (folder));
                type =  modest_tny_folder_guess_folder_type_from_name (folder_name);
        }
@@ -125,8 +127,8 @@ modest_tny_folder_get_rules   (TnyFolder *folder)
                switch (type) {
                case TNY_FOLDER_TYPE_OUTBOX:
                case TNY_FOLDER_TYPE_SENT:
-                       rules |= MODEST_FOLDER_RULES_FOLDER_NON_WRITEABLE;
                case TNY_FOLDER_TYPE_DRAFTS:
+                       rules |= MODEST_FOLDER_RULES_FOLDER_NON_WRITEABLE;
                case TNY_FOLDER_TYPE_INBOX:
                case TNY_FOLDER_TYPE_JUNK:
                case TNY_FOLDER_TYPE_TRASH:
@@ -145,8 +147,10 @@ modest_tny_folder_get_rules   (TnyFolder *folder)
                }
        } else {
                ModestTransportStoreProtocol proto;
-               TnyAccount *account =
-                       modest_tny_folder_get_account ((TnyFolder*)folder);
+               TnyFolderType folder_type;
+               TnyAccount *account;
+
+               account = modest_tny_folder_get_account ((TnyFolder*)folder);
                if (!account)
                        return -1; /* no account: nothing is allowed */
                
@@ -164,6 +168,15 @@ modest_tny_folder_get_rules   (TnyFolder *folder)
 
                }
                g_object_unref (G_OBJECT(account));
+
+               /* Neither INBOX not ROOT folders should me moveable */
+               folder_type = modest_tny_folder_guess_folder_type (folder);
+               if ((folder_type ==  TNY_FOLDER_TYPE_INBOX) ||
+                   (folder_type == TNY_FOLDER_TYPE_ROOT)) {
+                       rules |= MODEST_FOLDER_RULES_FOLDER_NON_DELETABLE;
+                       rules |= MODEST_FOLDER_RULES_FOLDER_NON_MOVEABLE;
+                       rules |= MODEST_FOLDER_RULES_FOLDER_NON_RENAMEABLE;
+               }
        }
        return rules;
 }
@@ -189,16 +202,17 @@ modest_tny_folder_is_local_folder   (TnyFolder *folder)
 
        /* Outbox is a special case, using a derived TnyAccount: */
        if (MODEST_IS_TNY_OUTBOX_ACCOUNT (account)) {
-               g_object_unref (account);
-               return TRUE;  
+               g_object_unref (G_OBJECT(account));
+               return TRUE;
        }
 
        const gchar* account_id = tny_account_get_id (account);
-       if (!account_id)
+       if (!account_id) {
+               g_object_unref (G_OBJECT(account));
                return FALSE;
-
-       g_object_unref (G_OBJECT(account));
+       }
        
+       g_object_unref (G_OBJECT(account));
        return (strcmp (account_id, MODEST_LOCAL_FOLDERS_ACCOUNT_ID) == 0);
 }