* Fixes NB#58331, INBOX must not be moveable
authorSergio Villar Senin <svillar@igalia.com>
Fri, 15 Jun 2007 07:57:31 +0000 (07:57 +0000)
committerSergio Villar Senin <svillar@igalia.com>
Fri, 15 Jun 2007 07:57:31 +0000 (07:57 +0000)
* Added an pvanhoof's speedup enhancenment when marking headers as read/unread
* Added folder rules for the inbox folder
* Unregistered a signal handler in the folder view when finalized

pmo-trunk-r2247

src/modest-mail-operation.c
src/modest-tny-folder.c
src/modest-ui-actions.c
src/widgets/modest-folder-view.c

index b60cb7e..ca10622 100644 (file)
@@ -106,7 +106,6 @@ struct _ModestMailOperationPrivate {
 typedef struct _GetMsgAsyncHelper {    
        ModestMailOperation *mail_op;
        GetMsgAsyncUserCallback user_callback;  
-       guint pending_ops;
        gpointer user_data;
 } GetMsgAsyncHelper;
 
@@ -1444,7 +1443,6 @@ void modest_mail_operation_get_msg (ModestMailOperation *self,
                helper = g_slice_new0 (GetMsgAsyncHelper);
                helper->mail_op = self;
                helper->user_callback = user_callback;
-               helper->pending_ops = 1;
                helper->user_data = user_data;
 
                tny_folder_get_msg_async (folder, header, get_msg_cb, get_msg_status_cb, helper);
@@ -1478,8 +1476,6 @@ get_msg_cb (TnyFolder *folder,
        self = helper->mail_op;
        g_return_if_fail (MODEST_IS_MAIL_OPERATION(self));
        priv = MODEST_MAIL_OPERATION_GET_PRIVATE(self);
-       
-       helper->pending_ops--;
 
        /* Check errors and cancel */
        if (*error) {
@@ -1503,14 +1499,12 @@ get_msg_cb (TnyFolder *folder,
                helper->user_callback (self, NULL, msg, helper->user_data);
        }
 
-       /* Free */
  out:
-       if (helper->pending_ops == 0) {
-               g_slice_free (GetMsgAsyncHelper, helper);
+       /* Free */
+       g_slice_free (GetMsgAsyncHelper, helper);
                
-               /* Notify about operation end */
-               modest_mail_operation_notify_end (self);        
-       }
+       /* Notify about operation end */
+       modest_mail_operation_notify_end (self);        
 }
 
 static void     
index 1b678cb..54f6643 100644 (file)
@@ -147,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 */
                
@@ -166,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 = tny_folder_get_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;
 }
index 71f925f..be1f87e 100644 (file)
@@ -2901,22 +2901,34 @@ do_headers_action (ModestWindow *win,
 {
        TnyList *headers_list;
        TnyIterator *iter;
+       TnyHeader *header;
+       TnyFolder *folder;
 
        /* Get headers */
        headers_list = get_selected_headers (win);
        if (!headers_list)
                return;
 
-       /* Call the function for each header */
+       /* Get the folder */
        iter = tny_list_create_iterator (headers_list);
-       while (!tny_iterator_is_done (iter)) {
-               TnyHeader *header;
+       header = TNY_HEADER (tny_iterator_get_current (iter));
+       folder = tny_header_get_folder (header);
+       g_object_unref (header);
 
+       /* Call the function for each header */
+       while (!tny_iterator_is_done (iter)) {
                header = TNY_HEADER (tny_iterator_get_current (iter));
                func (header, win, user_data);
                g_object_unref (header);
                tny_iterator_next (iter);
        }
+
+       /* Trick: do a poke status in order to speed up the signaling
+          of observers */
+       tny_folder_poke_status (folder);
+
+       /* Frees */
+       g_object_unref (folder);
        g_object_unref (iter);
        g_object_unref (headers_list);
 }
index baf66a3..bb553cd 100644 (file)
@@ -140,6 +140,7 @@ struct _ModestFolderViewPrivate {
        gulong                changed_signal;
        gulong                accounts_reloaded_signal;
        gulong                account_removed_signal;
+       gulong                conf_key_signal;
        
        TnyFolderStoreQuery  *query;
        guint                 timer_expander;
@@ -486,10 +487,10 @@ modest_folder_view_init (ModestFolderView *obj)
         * Track changes in the local account name (in the device it
         * will be the device name)
         */
-       g_signal_connect (G_OBJECT(conf), 
-                         "key_changed",
-                         G_CALLBACK(on_configuration_key_changed), obj);
-
+       priv->conf_key_signal = 
+               g_signal_connect (G_OBJECT(conf), 
+                                 "key_changed",
+                                 G_CALLBACK(on_configuration_key_changed), obj);
 }
 
 static void
@@ -540,6 +541,12 @@ modest_folder_view_finalize (GObject *obj)
        g_free (priv->local_account_name);
        g_free (priv->visible_account_id);
        
+       if (priv->conf_key_signal) {
+               g_signal_handler_disconnect (modest_runtime_get_conf (),
+                                            priv->conf_key_signal);
+               priv->conf_key_signal = 0;
+       }
+
        G_OBJECT_CLASS(parent_class)->finalize (obj);
 }