From 89e6b2e07630f0a135113c3f69e1185a2154c29c Mon Sep 17 00:00:00 2001 From: Javier Fernandez Garcia-Boente Date: Tue, 28 Aug 2007 16:46:16 +0000 Subject: [PATCH] * Define a new mail-operation to remove several messages. * 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 | 120 ++++++++++++++++++++++++++----- src/modest-mail-operation.h | 15 ++++ src/modest-ui-actions.c | 84 ++++++++++++---------- src/modest-ui-actions.h | 6 ++ src/widgets/modest-header-view-render.c | 51 ++++++++++--- src/widgets/modest-header-view.c | 5 +- src/widgets/modest-window-priv.h | 1 + src/widgets/modest-window.c | 30 +++++++- src/widgets/modest-window.h | 20 ++++++ 9 files changed, 263 insertions(+), 69 deletions(-) diff --git a/src/modest-mail-operation.c b/src/modest-mail-operation.c index 0a65cda..d15b510 100644 --- a/src/modest-mail-operation.c +++ b/src/modest-mail-operation.c @@ -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); } diff --git a/src/modest-mail-operation.h b/src/modest-mail-operation.h index ee25fa1..8fc8caf 100644 --- a/src/modest-mail-operation.h +++ b/src/modest-mail-operation.h @@ -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 diff --git a/src/modest-ui-actions.c b/src/modest-ui-actions.c index 1716441..0bab679 100644 --- a/src/modest-ui-actions.c +++ b/src/modest-ui-actions.c @@ -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)); } } diff --git a/src/modest-ui-actions.h b/src/modest-ui-actions.h index 04c4343..18f1def 100644 --- a/src/modest-ui-actions.h +++ b/src/modest-ui-actions.h @@ -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. */ diff --git a/src/widgets/modest-header-view-render.c b/src/widgets/modest-header-view-render.c index cbe0051..3a0b66c 100644 --- a/src/widgets/modest-header-view-render.c +++ b/src/widgets/modest-header-view-render.c @@ -27,10 +27,12 @@ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ +#include #include #include #include #include +#include #include #include #include @@ -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; + } } } diff --git a/src/widgets/modest-header-view.c b/src/widgets/modest-header-view.c index d980d35..be2a80b 100644 --- a/src/widgets/modest-header-view.c +++ b/src/widgets/modest-header-view.c @@ -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) diff --git a/src/widgets/modest-window-priv.h b/src/widgets/modest-window-priv.h index c845af6..89304ca 100644 --- a/src/widgets/modest-window-priv.h +++ b/src/widgets/modest-window-priv.h @@ -44,6 +44,7 @@ struct _ModestWindowPrivate { GtkWidget *toolbar; GtkWidget *menubar; DimmedState *dimming_state; + gboolean ui_dimming_enabled; gchar *active_account; }; diff --git a/src/widgets/modest-window.c b/src/widgets/modest-window.c index 265fc04..2469941 100644 --- a/src/widgets/modest-window.c +++ b/src/widgets/modest-window.c @@ -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) diff --git a/src/widgets/modest-window.h b/src/widgets/modest-window.h index b44e518..d3fa65d 100644 --- a/src/widgets/modest-window.h +++ b/src/widgets/modest-window.h @@ -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); -- 1.7.9.5