* Define a new mail-operation to remove several messages.
authorJavier Fernandez Garcia-Boente <jfernandez@igalia.com>
Tue, 28 Aug 2007 16:46:16 +0000 (16:46 +0000)
committerJavier Fernandez Garcia-Boente <jfernandez@igalia.com>
Tue, 28 Aug 2007 16:46:16 +0000 (16:46 +0000)
* Sync folder after send mail from Draft folder, to actually remove it.
* Sync folder after remove message from outbox, after they were sent.
* Changes on header-view-render to get send-queus of all defined accounts
if they were not in send-queue cache.
* Define a new status for header-view to determine if all messages in
the current selected folder are marked as deleted.
* Allow to enable and disable dimming rules. This feature could
improve performance in operations which require that a lot of headers
were selected.
* Fixes: NB#64359, NB#64321, NB#61954, NB#63011

pmo-trunk-r3114

src/modest-mail-operation.c
src/modest-mail-operation.h
src/modest-ui-actions.c
src/modest-ui-actions.h
src/widgets/modest-header-view-render.c
src/widgets/modest-header-view.c
src/widgets/modest-window-priv.h
src/widgets/modest-window.c
src/widgets/modest-window.h

index 0a65cda..d15b510 100644 (file)
@@ -556,15 +556,22 @@ modest_mail_operation_send_mail (ModestMailOperation *self,
                g_set_error (&(priv->error), MODEST_MAIL_OPERATION_ERROR,
                             MODEST_MAIL_OPERATION_ERROR_ITEM_NOT_FOUND,
                             "modest: could not find send queue for account\n");
+               priv->status = MODEST_MAIL_OPERATION_STATUS_FAILED;
+
        } else {
                /* TODO: connect to the msg-sent in order to know when
                   the mail operation is finished */
+
                tny_send_queue_add (send_queue, msg, &(priv->error));
+
                /* TODO: we're setting always success, do the check in
                   the handler */
                priv->status = MODEST_MAIL_OPERATION_STATUS_SUCCESS;
        }
 
+       if (priv->status == MODEST_MAIL_OPERATION_STATUS_SUCCESS)
+               modest_platform_information_banner (NULL, NULL, _("mcen_ib_outbox_waiting_to_be_sent"));
+
        /* TODO: do this in the handler of the "msg-sent"
           signal.Notify about operation end */
        modest_mail_operation_notify_end (self);
@@ -710,6 +717,7 @@ modest_mail_operation_send_new_mail_cb (ModestMailOperation *self,
        TnyFolder *draft_folder = NULL;
        TnyFolder *outbox_folder = NULL;
        TnyHeader *header;
+       GError *err = NULL;
 
        if (!msg) {
                goto end;
@@ -737,13 +745,17 @@ modest_mail_operation_send_new_mail_cb (ModestMailOperation *self,
                 * because this function requires it to have a UID. */          
                header = tny_msg_get_header (info->draft_msg);
                tny_folder_remove_msg (src_folder, header, NULL);
-               tny_header_set_flags (header, TNY_HEADER_FLAG_DELETED);
-               tny_header_set_flags (header, TNY_HEADER_FLAG_SEEN);
+
+               tny_folder_sync (folder, TRUE, &err); /* FALSE --> don't expunge */
+/*             tny_folder_sync_async (src_folder, TRUE, NULL, NULL, NULL);  /\* expunge *\/ */
+               
                g_object_unref (header);
                g_object_unref (folder);
        }
 
 end:
+       if (err != NULL)
+               g_error_free(err);      
        if (info->draft_msg)
                g_object_unref (info->draft_msg);
        if (draft_folder)
@@ -839,11 +851,15 @@ modest_mail_operation_save_to_drafts_cb (ModestMailOperation *self,
        if ((!priv->error) && (info->draft_msg != NULL)) {
                header = tny_msg_get_header (info->draft_msg);
                src_folder = tny_header_get_folder (header); 
+
                /* Remove the old draft expunging it */
                tny_folder_remove_msg (src_folder, header, NULL);
-               tny_header_set_flags (header, TNY_HEADER_FLAG_DELETED);
-               tny_header_set_flags (header, TNY_HEADER_FLAG_SEEN);
+/*             tny_header_set_flags (header, TNY_HEADER_FLAG_DELETED); */
+/*             tny_header_set_flags (header, TNY_HEADER_FLAG_SEEN); */
+
+               tny_folder_sync (folder, TRUE, &(priv->error)); /* FALSE --> don't expunge */
                tny_folder_sync_async (src_folder, TRUE, NULL, NULL, NULL);  /* expunge */
+
                g_object_unref (header);
        }
        
@@ -1696,7 +1712,8 @@ transfer_folder_status_cb (GObject *obj,
 
 
 static void
-transfer_folder_cb (TnyFolder *folder, gboolean cancelled, 
+transfer_folder_cb (TnyFolder *folder, 
+                   gboolean cancelled, 
                    TnyFolderStore *into, 
                    TnyFolder *new_folder, 
                    GError *err, 
@@ -1918,10 +1935,10 @@ modest_mail_operation_xfer_folder (ModestMailOperation *self,
                tny_folder_copy_async (folder,
                                       parent,
                                       tny_folder_get_name (folder),
-                                              delete_original,
+                                      delete_original,
                                       transfer_folder_cb,
                                       transfer_folder_status_cb,
-                                      helper);
+                                      helper);         
        } 
        
 }
@@ -2387,7 +2404,8 @@ modest_mail_operation_get_msgs_full (ModestMailOperation *self,
 
 
 void 
-modest_mail_operation_remove_msg (ModestMailOperation *self,  TnyHeader *header,
+modest_mail_operation_remove_msg (ModestMailOperation *self,  
+                                 TnyHeader *header,
                                  gboolean remove_to_trash /*ignored*/)
 {
        TnyFolder *folder;
@@ -2409,21 +2427,21 @@ modest_mail_operation_remove_msg (ModestMailOperation *self,  TnyHeader *header,
 
        /* remove message from folder */
        tny_folder_remove_msg (folder, header, &(priv->error));
-/*     if (!priv->error) { */
-/*             tny_header_set_flags (header, TNY_HEADER_FLAG_DELETED); */
-/*             tny_header_set_flags (header, TNY_HEADER_FLAG_SEEN); */
+       if (!priv->error) {
+               tny_header_set_flags (header, TNY_HEADER_FLAG_DELETED);
+               tny_header_set_flags (header, TNY_HEADER_FLAG_SEEN);
 
-/*             if (TNY_IS_CAMEL_IMAP_FOLDER (folder)) */
+               if (TNY_IS_CAMEL_IMAP_FOLDER (folder))
 /*                     tny_folder_sync_async(folder, FALSE, NULL, NULL, NULL); /\* FALSE --> don't expunge *\/ */
-/* /\*                         tny_folder_sync (folder, FALSE, &(priv->error)); /\\* FALSE --> don't expunge *\\/ *\/ */
-/*             else if (TNY_IS_CAMEL_POP_FOLDER (folder)) */
+                       tny_folder_sync (folder, FALSE, &(priv->error)); /* FALSE --> don't expunge */
+               else if (TNY_IS_CAMEL_POP_FOLDER (folder))
 /*                     tny_folder_sync_async(folder, FALSE, NULL, NULL, NULL); /\* TRUE --> dont expunge *\/ */
-/* /\*                         tny_folder_sync (folder, TRUE, &(priv->error)); /\\* TRUE --> expunge *\\/ *\/ */
-/*             else */
-/*                     /\* local folders *\/ */
+                       tny_folder_sync (folder, TRUE, &(priv->error)); /* TRUE --> expunge */
+               else
+                       /* local folders */
 /*                     tny_folder_sync_async(folder, TRUE, NULL, NULL, NULL); /\* TRUE --> expunge *\/ */
-/* /\*                         tny_folder_sync (folder, TRUE, &(priv->error)); /\\* TRUE --> expunge *\\/ *\/ */
-/*     } */
+                       tny_folder_sync (folder, TRUE, &(priv->error)); /* TRUE --> expunge */
+       }
        
        
        /* Set status */
@@ -2439,6 +2457,66 @@ modest_mail_operation_remove_msg (ModestMailOperation *self,  TnyHeader *header,
        modest_mail_operation_notify_end (self);
 }
 
+void 
+modest_mail_operation_remove_msgs (ModestMailOperation *self,  
+                                  TnyList *headers,
+                                 gboolean remove_to_trash /*ignored*/)
+{
+       TnyFolder *folder;
+       ModestMailOperationPrivate *priv;
+       TnyIterator *iter = NULL;
+       TnyHeader *header = NULL;
+
+       g_return_if_fail (MODEST_IS_MAIL_OPERATION (self));
+       g_return_if_fail (TNY_IS_LIST (headers));
+
+       if (remove_to_trash)
+               g_warning ("remove to trash is not implemented");
+
+       priv = MODEST_MAIL_OPERATION_GET_PRIVATE (self);
+
+       /* Get folder from first header and sync it */
+       iter = tny_list_create_iterator (headers);
+       header = TNY_HEADER (tny_iterator_get_current (iter));
+       folder = tny_header_get_folder (header);
+       
+       /* Get account and set it into mail_operation */
+       priv->account = modest_tny_folder_get_account (TNY_FOLDER(folder));
+
+       priv->status = MODEST_MAIL_OPERATION_STATUS_IN_PROGRESS;
+
+       /* remove message from folder */
+       tny_folder_remove_msgs (folder, headers, &(priv->error));
+       if (!priv->error) {
+               if (TNY_IS_CAMEL_IMAP_FOLDER (folder))
+/*                     tny_folder_sync_async(folder, FALSE, NULL, NULL, NULL); /\* FALSE --> don't expunge *\/ */
+                       tny_folder_sync (folder, FALSE, &(priv->error)); /* FALSE --> don't expunge */
+               else if (TNY_IS_CAMEL_POP_FOLDER (folder))
+/*                     tny_folder_sync_async(folder, FALSE, NULL, NULL, NULL); /\* TRUE --> dont expunge *\/ */
+                       tny_folder_sync (folder, TRUE, &(priv->error)); /* TRUE --> expunge */
+               else
+                       /* local folders */
+/*                     tny_folder_sync_async(folder, TRUE, NULL, NULL, NULL); /\* TRUE --> expunge *\/ */
+                       tny_folder_sync (folder, TRUE, &(priv->error)); /* TRUE --> expunge */
+       }
+       
+       
+       /* Set status */
+       if (!priv->error)
+               priv->status = MODEST_MAIL_OPERATION_STATUS_SUCCESS;
+       else
+               priv->status = MODEST_MAIL_OPERATION_STATUS_FAILED;
+
+       /* Free */
+       g_object_unref (header);
+       g_object_unref (iter);
+       g_object_unref (G_OBJECT (folder));
+
+       /* Notify about operation end */
+       modest_mail_operation_notify_end (self);
+}
+
+
 static void
 transfer_msgs_status_cb (GObject *obj,
                         TnyStatus *status,  
@@ -2504,6 +2582,10 @@ transfer_msgs_cb (TnyFolder *folder, gboolean cancelled, GError *err, gpointer u
        } else {
                priv->done = 1;
                priv->status = MODEST_MAIL_OPERATION_STATUS_SUCCESS;
+
+               /* Update folder counts */
+               tny_folder_poke_status (folder);                
+               tny_folder_poke_status (helper->dest_folder);           
        }
 
        
index ee25fa1..8fc8caf 100644 (file)
@@ -506,6 +506,21 @@ void          modest_mail_operation_remove_msg     (ModestMailOperation *self,
                                                    gboolean remove_to_trash);
 
 /**
+ * modest_mail_operation_remove_msg:
+ * @self: a #ModestMailOperation
+ * @headers: the #TnyList of the messages to delete
+ * @remove_to_trash: TRUE to move it to trash or FALSE to delete it
+ * permanently
+ * 
+ * Deletes a list of messages. This operation is synchronous, so the
+ * #ModestMailOperation should not be added to any
+ * #ModestMailOperationQueue
+ **/
+void          modest_mail_operation_remove_msgs     (ModestMailOperation *self,
+                                                    TnyList *headers,
+                                                    gboolean remove_to_trash);
+
+/**
  * modest_mail_operation_get_msg:
  * @self: a #ModestMailOperation
  * @header_list: the #TnyHeader of the message to get
index 1716441..0bab679 100644 (file)
@@ -143,11 +143,6 @@ static gboolean download_uncached_messages (TnyList *header_list,
                                            GtkWindow *win);
 
 
-/* static gint     msgs_move_to_confirmation (GtkWindow *win, */
-/*                                        TnyFolder *dest_folder, */
-/*                                        gboolean delete, */
-/*                                        TnyList *headers); */
-
 
 /* Show the account creation wizard dialog.
  * returns: TRUE if an account was created. FALSE if the user cancelled.
@@ -320,14 +315,32 @@ void modest_do_message_delete (TnyHeader *header, ModestWindow *win)
        g_object_unref (G_OBJECT (mail_op));
 }
 
-static void
-headers_action_delete (TnyHeader *header,
-                      ModestWindow *win,
-                      gpointer user_data)
+/** A convenience method, because deleting a message is 
+ * otherwise complicated, and it's best to change it in one place 
+ * when we change it.
+ */
+void modest_do_messages_delete (TnyList *headers, ModestWindow *win)
 {
-       modest_do_message_delete (header, win);
+       ModestMailOperation *mail_op = NULL;
+       mail_op = modest_mail_operation_new (MODEST_MAIL_OPERATION_TYPE_DELETE, 
+               win ? G_OBJECT(win) : NULL);
+       modest_mail_operation_queue_add (modest_runtime_get_mail_operation_queue (),
+                                        mail_op);
+       
+       /* Always delete. TODO: Move to trash still not supported */
+       modest_mail_operation_remove_msgs (mail_op, headers, FALSE);
+       g_object_unref (G_OBJECT (mail_op));
 }
 
+/* static void */
+/* headers_action_delete (TnyHeader *header, */
+/*                    ModestWindow *win, */
+/*                    gpointer user_data) */
+/* { */
+/*     modest_do_message_delete (header, win); */
+
+/* } */
+
 /** After deleing a message that is currently visible in a window, 
  * show the next message from the list, or close the window if there are no more messages.
  **/
@@ -432,7 +445,6 @@ modest_ui_actions_on_delete_message (GtkAction *action, ModestWindow *win)
                GList *sel_list = NULL, *tmp = NULL;
                GtkTreeRowReference *row_reference = NULL;
                GtkTreePath *next_path = NULL;
-               TnyFolder *folder = NULL;
                GError *err = NULL;
 
                /* Find last selected row */                    
@@ -450,11 +462,21 @@ modest_ui_actions_on_delete_message (GtkAction *action, ModestWindow *win)
                        }
                }
                
+               /* Disable window dimming management */
+               modest_window_disable_dimming (MODEST_WINDOW(win));
+
                /* Remove each header. If it's a view window header_view == NULL */
-               do_headers_action (win, headers_action_delete, header_view);
+/*             do_headers_action (win, headers_action_delete, header_view); */
+               modest_do_messages_delete (header_list, win);
+               
 
-               /* refresh the header view (removing marked-as-deleted)*/
-               modest_header_view_refilter (MODEST_HEADER_VIEW(header_view)); 
+               /* Enable window dimming management */
+               gtk_tree_selection_unselect_all (sel);
+               modest_window_enable_dimming (MODEST_WINDOW(win));
+
+               /* FIXME: May be folder_monitor will also refilter treemode on EXPUNGE changes ? */
+               /* refresh the header view (removing marked-as-deleted) */
+/*             modest_header_view_refilter (MODEST_HEADER_VIEW(header_view));  */
                
                if (MODEST_IS_MSG_VIEW_WINDOW (win)) {
                        modest_ui_actions_refresh_message_window_after_delete (MODEST_MSG_VIEW_WINDOW (win));
@@ -477,29 +499,10 @@ modest_ui_actions_on_delete_message (GtkAction *action, ModestWindow *win)
                                gtk_tree_row_reference_free (row_reference);
                }
 
-               /* Get folder from first header and sync it */
-               iter = tny_list_create_iterator (header_list);
-               header = TNY_HEADER (tny_iterator_get_current (iter));
-               folder = tny_header_get_folder (header);
-               if (TNY_IS_CAMEL_IMAP_FOLDER (folder))
-/*                     tny_folder_sync_async(folder, FALSE, NULL, NULL, NULL); /\* FALSE --> don't expunge *\/ */
-                       tny_folder_sync (folder, FALSE, &err); /* FALSE --> don't expunge */
-               else if (TNY_IS_CAMEL_POP_FOLDER (folder))
-/*                     tny_folder_sync_async(folder, FALSE, NULL, NULL, NULL); /\* TRUE --> dont expunge *\/ */
-                       tny_folder_sync (folder, TRUE, &err); /* TRUE --> expunge */
-               else
-                       /* local folders */
-/*                     tny_folder_sync_async(folder, TRUE, NULL, NULL, NULL); /\* TRUE --> expunge *\/ */
-                       tny_folder_sync (folder, TRUE, &err); /* TRUE --> expunge */
-
                if (err != NULL) {
                        printf ("DEBUG: %s: Error: code=%d, text=%s\n", __FUNCTION__, err->code, err->message);
                        g_error_free(err);
                }
-
-               g_object_unref (header);
-               g_object_unref (iter);
-               g_object_unref (folder);
                
                /* Update toolbar dimming state */
                modest_ui_actions_check_toolbar_dimming_rules (MODEST_WINDOW (main_window));
@@ -1834,7 +1837,7 @@ folder_refreshed_cb (ModestMailOperation *mail_op,
        folder_empty = folder_empty || all_marked_as_deleted ;
        if (folder_empty) {
 
-       printf ("DEBUG: %s: tny_folder_get_all_count() returned 0.\n", __FUNCTION__);
+               printf ("DEBUG: %s: tny_folder_get_all_count() returned 0.\n", __FUNCTION__);
                modest_main_window_set_contents_style (win,
                                                       MODEST_MAIN_WINDOW_CONTENTS_STYLE_EMPTY);
        } else {
@@ -2120,8 +2123,6 @@ modest_ui_actions_on_send (GtkWidget *widget, ModestMsgEditWindow *edit_window)
        
        gchar *from = modest_account_mgr_get_from_string (account_mgr, account_name);
 
-/*     modest_platform_information_banner (NULL, NULL, _("mcen_ib_outbox_waiting_to_be_sent")); */
-
        /* Create the mail operation */
        ModestMailOperation *mail_operation = modest_mail_operation_new (MODEST_MAIL_OPERATION_TYPE_SEND, G_OBJECT(edit_window));
        modest_mail_operation_queue_add (modest_runtime_get_mail_operation_queue (), mail_operation);
@@ -3110,16 +3111,25 @@ modest_ui_actions_on_select_all (GtkAction *action,
                GtkWidget *header_view = focused_widget;
                GtkTreeSelection *selection = NULL;
                
-               if (!(MODEST_IS_HEADER_VIEW (focused_widget)))
+               if (!(MODEST_IS_HEADER_VIEW (focused_widget))) {
                        header_view = modest_main_window_get_child_widget (MODEST_MAIN_WINDOW (window),
                                                                           MODEST_WIDGET_TYPE_HEADER_VIEW);
+               }
                                
+               /* Disable window dimming management */
+               modest_window_disable_dimming (MODEST_WINDOW(window));
+               
                /* Select all messages */
                selection = gtk_tree_view_get_selection (GTK_TREE_VIEW(header_view));
                gtk_tree_selection_select_all (selection);
 
                /* Set focuse on header view */
                gtk_widget_grab_focus (header_view);
+
+
+               /* Enable window dimming management */
+               modest_window_enable_dimming (MODEST_WINDOW(window));
+               modest_ui_actions_check_toolbar_dimming_rules (MODEST_WINDOW (window));
        }
 
 }
index 04c4343..18f1def 100644 (file)
@@ -453,6 +453,12 @@ void     modest_ui_actions_get_msgs_full_error_handler         (ModestMailOperat
  **/
 void modest_do_message_delete (TnyHeader *header, ModestWindow *win);
 
+/** A convenience method, because deleting a message is 
+ * otherwise complicated, and it's best to change it in one place 
+ * when we change it.
+ **/
+void modest_do_messages_delete (TnyList *headers, ModestWindow *win);
+
 /* Show the account creation wizard dialog.
  * returns: TRUE if an account was created. FALSE if the user cancelled.
  */
index cbe0051..3a0b66c 100644 (file)
  * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
+#include <tny-simple-list.h>
 #include <modest-header-view.h>
 #include <modest-header-view-priv.h>
 #include <modest-icon-names.h>
 #include <modest-text-utils.h>
+#include <modest-tny-account-store.h>
 #include <modest-tny-send-queue.h>
 #include <modest-tny-folder.h>
 #include <modest-tny-account.h>
@@ -50,13 +52,18 @@ fill_list_of_caches (gpointer key, gpointer value, gpointer userdata)
 static ModestTnySendQueueStatus
 get_status_of_uid (TnyHeader *header)
 {
-       ModestCacheMgr *cache_mgr;
-       GHashTable     *send_queue_cache;
+       ModestCacheMgr *cache_mgr = NULL;
+       GHashTable     *send_queue_cache = NULL;
+       ModestTnyAccountStore *accounts_store = NULL;
+       TnyList *accounts = NULL;
+       TnyIterator *iter = NULL;
+       TnyTransportAccount *account = NULL;
        GSList *send_queues = NULL, *node;
        /* get_msg_status returns suspended by default, so we want to detect changes */
        ModestTnySendQueueStatus status = MODEST_TNY_SEND_QUEUE_SUSPENDED;
        ModestTnySendQueueStatus queue_status = MODEST_TNY_SEND_QUEUE_SUSPENDED;
        gchar *msg_uid = NULL;
+       ModestTnySendQueue *send_queue = NULL;
        
        msg_uid = modest_tny_send_queue_get_msg_id (header);
        cache_mgr = modest_runtime_get_cache_mgr ();
@@ -64,14 +71,38 @@ get_status_of_uid (TnyHeader *header)
                                                       MODEST_CACHE_MGR_CACHE_TYPE_SEND_QUEUE);
        
        g_hash_table_foreach (send_queue_cache, (GHFunc) fill_list_of_caches, &send_queues);
-       
-       for (node = send_queues; node != NULL; node = g_slist_next (node)) {
-               ModestTnySendQueue *send_queue = MODEST_TNY_SEND_QUEUE (node->data);
-
-               queue_status = modest_tny_send_queue_get_msg_status (send_queue, msg_uid);
-               if (queue_status != MODEST_TNY_SEND_QUEUE_UNKNONW) {
-                       status = queue_status;
-                       break;
+       if (send_queues == NULL) {
+               accounts = tny_simple_list_new (); 
+               accounts_store = modest_runtime_get_account_store ();
+               tny_account_store_get_accounts (TNY_ACCOUNT_STORE(accounts_store), 
+                                               accounts, 
+                                               TNY_ACCOUNT_STORE_TRANSPORT_ACCOUNTS);
+               
+               iter = tny_list_create_iterator (accounts);
+               while (!tny_iterator_is_done (iter)) {                  
+                       account = TNY_TRANSPORT_ACCOUNT(tny_iterator_get_current (iter));
+                       send_queue = modest_runtime_get_send_queue(TNY_TRANSPORT_ACCOUNT(account));
+                       g_object_unref(account);
+
+                       queue_status = modest_tny_send_queue_get_msg_status (send_queue, msg_uid);
+                       if (queue_status != MODEST_TNY_SEND_QUEUE_UNKNONW) {
+                               status = queue_status;
+                               break;
+                       }
+                       tny_iterator_next (iter);
+               }
+               g_object_unref (iter);
+               g_object_unref (accounts);
+       }
+       else {
+               for (node = send_queues; node != NULL; node = g_slist_next (node)) {
+                       send_queue = MODEST_TNY_SEND_QUEUE (node->data);
+                       
+                       queue_status = modest_tny_send_queue_get_msg_status (send_queue, msg_uid);
+                       if (queue_status != MODEST_TNY_SEND_QUEUE_UNKNONW) {
+                               status = queue_status;
+                               break;
+                       }
                }
        }
 
index d980d35..be2a80b 100644 (file)
@@ -932,6 +932,9 @@ modest_header_view_set_folder_intern (ModestHeaderView *self, TnyFolder *folder)
        sortable = gtk_tree_model_sort_new_with_model (GTK_TREE_MODEL(headers));
        g_object_unref (G_OBJECT (headers));
 
+       /* Init filter_row function to examine empty status */
+       priv->status  = HEADER_VIEW_INIT;
+
        /* Create a tree model filter to hide and show rows for cut operations  */
        filter_model = gtk_tree_model_filter_new (sortable, NULL);
        gtk_tree_model_filter_set_visible_func (GTK_TREE_MODEL_FILTER (filter_model),
@@ -1688,7 +1691,7 @@ filter_row (GtkTreeModel *model,
        }
 
  frees:
-       priv->status = priv->status && !visible;
+       priv->status = ((gboolean) priv->status) && !visible;
        
        /* Free */
        if (header)
index c845af6..89304ca 100644 (file)
@@ -44,6 +44,7 @@ struct _ModestWindowPrivate {
        GtkWidget               *toolbar;
        GtkWidget               *menubar;
        DimmedState             *dimming_state;
+       gboolean                ui_dimming_enabled;
        gchar                   *active_account;
 };
 
index 265fc04..2469941 100644 (file)
@@ -129,6 +129,8 @@ modest_window_init (ModestWindow *obj)
        priv->toolbar        = NULL;
        priv->menubar        = NULL;
 
+       priv->dimming_state = NULL;
+       priv->ui_dimming_enabled = TRUE;
        priv->active_account = NULL;
 
        /* Connect signals */
@@ -193,7 +195,8 @@ modest_window_check_dimming_rules (ModestWindow *self)
        g_return_if_fail (MODEST_IS_WINDOW (self));
        priv = MODEST_WINDOW_GET_PRIVATE(self);
 
-       modest_ui_dimming_manager_process_dimming_rules (priv->ui_dimming_manager);
+       if (priv->ui_dimming_enabled)
+               modest_ui_dimming_manager_process_dimming_rules (priv->ui_dimming_manager);
 }
 
 void
@@ -205,7 +208,8 @@ modest_window_check_dimming_rules_group (ModestWindow *self,
        g_return_if_fail (MODEST_IS_WINDOW (self));
        priv = MODEST_WINDOW_GET_PRIVATE(self);
 
-       modest_ui_dimming_manager_process_dimming_rules_group (priv->ui_dimming_manager, group_name);
+       if (priv->ui_dimming_enabled)
+               modest_ui_dimming_manager_process_dimming_rules_group (priv->ui_dimming_manager, group_name);
 }
 
 void
@@ -236,6 +240,28 @@ modest_window_get_dimming_state (ModestWindow *window)
        return priv->dimming_state;
 }
 
+void
+modest_window_disable_dimming (ModestWindow *self)
+{
+       ModestWindowPrivate *priv;      
+
+       g_return_if_fail (MODEST_IS_WINDOW (self));
+       priv = MODEST_WINDOW_GET_PRIVATE(self);
+
+       priv->ui_dimming_enabled = FALSE;
+}
+
+void
+modest_window_enable_dimming (ModestWindow *self)
+{
+       ModestWindowPrivate *priv;      
+
+       g_return_if_fail (MODEST_IS_WINDOW (self));
+       priv = MODEST_WINDOW_GET_PRIVATE(self);
+
+       priv->ui_dimming_enabled = TRUE;
+}
+
 GtkAction *
 modest_window_get_action (ModestWindow *window, 
                          const gchar *action_path) 
index b44e518..d3fa65d 100644 (file)
@@ -274,6 +274,26 @@ void modest_window_check_dimming_rules_group (ModestWindow *self,
                                              const gchar *group_name);
 
 
+/**
+ * modest_window_enable_dimming:
+ * @self: a #ModestWindow instance object
+ * 
+ * Enables UI dimming rules checking.
+ *
+ **/
+void modest_window_enable_dimming (ModestWindow *self);
+
+
+/**
+ * modest_window_disable_dimming:
+ * @self: a #ModestWindow instance object
+ * 
+ * Disables UI dimming rules checking.
+ *
+ **/
+void modest_window_disable_dimming (ModestWindow *self);
+
+
 void modest_window_disconnect_signals (ModestWindow *self);