X-Git-Url: http://git.maemo.org/git/?a=blobdiff_plain;f=src%2Fmodest-ui-dimming-rules.c;h=794c0fa31af4af24383fc3bf125232c20bf68c2e;hb=38331c03731a7f43d5d8bd75bc2585475158d4d6;hp=9dc1b4f3e366346f4823853cd8a9d0bae0bb6c86;hpb=c3e0db5d03d977b01214b89211b2d72bcb7b8c9c;p=modest diff --git a/src/modest-ui-dimming-rules.c b/src/modest-ui-dimming-rules.c index 9dc1b4f..794c0fa 100644 --- a/src/modest-ui-dimming-rules.c +++ b/src/modest-ui-dimming-rules.c @@ -34,6 +34,7 @@ #include #include "modest-ui-dimming-rules.h" #include "modest-ui-actions.h" +#include "modest-account-mgr-helpers.h" #include "modest-dimming-rule.h" #include "modest-debug.h" #include "modest-tny-folder.h" @@ -83,6 +84,7 @@ static gboolean _selected_folder_has_subfolder_with_same_name (ModestWindow *win static void fill_list_of_caches (gpointer key, gpointer value, gpointer userdata); static gboolean _send_receive_in_progress (ModestWindow *win); static gboolean _msgs_send_in_progress (void); +static gboolean _all_msgs_in_sending_status (ModestHeaderView *header_view) G_GNUC_UNUSED; static DimmedState * _define_main_window_dimming_state (ModestMainWindow *window) @@ -489,6 +491,11 @@ modest_ui_dimming_rules_on_delete (ModestWindow *win, gpointer user_data) folder = modest_header_view_get_folder (MODEST_HEADER_VIEW (header_view)); if (folder) { dimmed = (tny_folder_get_all_count (TNY_FOLDER (folder)) == 0); + + if (!dimmed && + (tny_folder_get_folder_type (TNY_FOLDER (folder)) == TNY_FOLDER_TYPE_OUTBOX)) { + dimmed = _all_msgs_in_sending_status (MODEST_HEADER_VIEW (header_view));; + } g_object_unref (folder); } } @@ -612,11 +619,6 @@ modest_ui_dimming_rules_on_rename_folder (ModestWindow *win, gpointer user_data) if (dimmed) modest_dimming_rule_set_notification (rule, ""); } - if (!dimmed) { - dimmed = _transfer_mode_enabled (win); - if (dimmed) - modest_dimming_rule_set_notification (rule, ""); - } return dimmed; } @@ -1352,6 +1354,68 @@ modest_ui_dimming_rules_on_view_attachments (ModestWindow *win, gpointer user_da return dimmed; } +#ifdef MODEST_TOOLKIT_HILDON2 +static gboolean +_not_valid_attachments (ModestWindow *win, gboolean save_not_remove) +{ + gint n_attachments; + TnyList *attachments; + gboolean result = FALSE; + + /* Get atachments */ + attachments = modest_msg_view_window_get_attachments (MODEST_MSG_VIEW_WINDOW(win)); + n_attachments = tny_list_get_length (attachments); + + /* Check unique */ + if (!result) { + result = n_attachments < 1; + } + + /* Check attached type (view operation not required) */ + if (!result) { + gint n_valid = 0; + + TnyIterator *iter; + iter = tny_list_create_iterator (attachments); + while (!tny_iterator_is_done (iter)) { + gboolean is_valid = TRUE; + TnyMimePart *mime_part = TNY_MIME_PART (tny_iterator_get_current (iter)); + TnyList *nested_list = tny_simple_list_new (); + tny_mime_part_get_parts (mime_part, nested_list); + + if (tny_mime_part_is_purged (mime_part)) { + is_valid = FALSE; + } + + if (is_valid && modest_tny_mime_part_is_msg (mime_part)) { + TnyMsg *window_msg; + window_msg = modest_msg_view_window_get_message (MODEST_MSG_VIEW_WINDOW (win)); + if (window_msg) { + if (save_not_remove && (TnyMimePart *) window_msg != mime_part) { + is_valid = FALSE; + } + g_object_unref (window_msg); + } + if (is_valid && save_not_remove && tny_list_get_length (nested_list) > 0) { + is_valid = FALSE; + } + } + g_object_unref (nested_list); + g_object_unref (mime_part); + tny_iterator_next (iter); + + if (is_valid) + n_valid++; + } + g_object_unref (iter); + result = (n_valid == 0); + } + g_object_unref (attachments); + return result; + +} +#endif + gboolean modest_ui_dimming_rules_on_save_attachments (ModestWindow *win, gpointer user_data) { @@ -1363,15 +1427,19 @@ modest_ui_dimming_rules_on_save_attachments (ModestWindow *win, gpointer user_da rule = MODEST_DIMMING_RULE (user_data); /* Check dimmed rule */ + +#ifdef MODEST_TOOLKIT_HILDON2 + dimmed = _not_valid_attachments (win, TRUE); +#else dimmed = _invalid_attach_selected (win, FALSE, FALSE, FALSE, rule); if (!dimmed) { - dimmed = _purged_attach_selected (win, FALSE, NULL); + dimmed = _purged_attach_selected (win, TRUE, NULL); if (dimmed) { modest_dimming_rule_set_notification (rule, _("mail_ib_attach_not_local")); } } - +#endif return dimmed; } @@ -1399,28 +1467,6 @@ modest_ui_dimming_rules_on_remove_attachments (ModestWindow *win, gpointer user_ modest_dimming_rule_set_notification (rule, _("FIXME:no attachment selected")); } -#ifndef MODEST_TOOLKIT_HILDON2 - /* Messages as attachments could not be removed */ - if (!dimmed && MODEST_IS_MSG_VIEW_WINDOW (win)) { - TnyList *attachments; - TnyIterator *iter; - attachments = modest_msg_view_window_get_attachments (MODEST_MSG_VIEW_WINDOW (win)); - if (attachments) { - iter = tny_list_create_iterator (attachments); - while (!tny_iterator_is_done (iter) && !dimmed) { - TnyMimePart *mime_part = (TnyMimePart *) - tny_iterator_get_current (iter); - if (modest_tny_mime_part_is_msg (mime_part)) - dimmed = TRUE; - g_object_unref (mime_part); - tny_iterator_next (iter); - } - g_object_unref (iter); - g_object_unref (attachments); - } - } -#endif - if (!dimmed) { dimmed = _selected_msg_sent_in_progress (win); @@ -1841,20 +1887,52 @@ modest_ui_dimming_rules_on_view_next (ModestWindow *win, gpointer user_data) if (!dimmed) { dimmed = modest_msg_view_window_last_message_selected (MODEST_MSG_VIEW_WINDOW (win)); modest_dimming_rule_set_notification (rule, NULL); - } + } return dimmed; } -gboolean +gboolean modest_ui_dimming_rules_on_tools_smtp_servers (ModestWindow *win, gpointer user_data) { - return !modest_account_mgr_has_accounts(modest_runtime_get_account_mgr(), - TRUE); + gboolean dimmed; + ModestAccountMgr *mgr; + + mgr = modest_runtime_get_account_mgr(); + dimmed = !modest_account_mgr_has_accounts(mgr, TRUE); + + /* Dimm it if we only have metaaccounts */ + if (!dimmed) { + ModestProtocolRegistry *reg = modest_runtime_get_protocol_registry (); + GSList *account_names = modest_account_mgr_account_names (mgr, TRUE); + + if (account_names) { + ModestProtocolType store_protocol; + gboolean found = FALSE; + GSList *iter = account_names; + const gchar *tag = MODEST_PROTOCOL_REGISTRY_MULTI_MAILBOX_PROVIDER_PROTOCOLS; + + while (iter && !found) { + gchar* account_name; + + account_name = (gchar *) iter->data; + store_protocol = modest_account_mgr_get_store_protocol (mgr, account_name); + + if (!modest_protocol_registry_protocol_type_has_tag (reg, store_protocol, tag)) + found = TRUE; + else + iter = g_slist_next (iter); + } + modest_account_mgr_free_account_names (account_names); + dimmed = !found; + } + } + + return dimmed; } -gboolean +gboolean modest_ui_dimming_rules_on_cancel_sending (ModestWindow *win, gpointer user_data) { ModestDimmingRule *rule = NULL; @@ -2882,7 +2960,36 @@ _selected_folder_has_subfolder_with_same_name (ModestWindow *win) return result; -} +} + +static gboolean +_all_msgs_in_sending_status (ModestHeaderView *header_view) +{ + GtkTreeModel *model; + GtkTreeIter iter; + gboolean all_sending = TRUE; + + model = gtk_tree_view_get_model (GTK_TREE_VIEW (header_view)); + if (gtk_tree_model_get_iter_first (model, &iter)) { + do { + TnyHeader *header; + + gtk_tree_model_get (model, &iter, + TNY_GTK_HEADER_LIST_MODEL_INSTANCE_COLUMN, + &header, + -1); + + if (header) { + if (modest_tny_all_send_queues_get_msg_status (header) != + MODEST_TNY_SEND_QUEUE_SENDING) + all_sending = FALSE; + g_object_unref (header); + } + + } while (all_sending && gtk_tree_model_iter_next (model, &iter)); + } + return all_sending; +} gboolean modest_ui_dimming_rules_on_save_to_drafts (ModestWindow *win, @@ -2987,7 +3094,7 @@ modest_ui_dimming_rules_on_header_window_move_to (ModestWindow *win, gpointer us /* Check dimmed rule */ dimmed = _transfer_mode_enabled (win); if (dimmed) - modest_dimming_rule_set_notification (rule, _("mail_ib_notavailable_downloading")); + modest_dimming_rule_set_notification (rule, _("mail_ib_notavailable_downloading")); if (!dimmed) { GtkWidget *header_view; @@ -2997,6 +3104,11 @@ modest_ui_dimming_rules_on_header_window_move_to (ModestWindow *win, gpointer us folder = modest_header_view_get_folder (MODEST_HEADER_VIEW (header_view)); if (folder) { dimmed = (tny_folder_get_all_count (TNY_FOLDER (folder)) == 0); + + if (!dimmed && + (tny_folder_get_folder_type (TNY_FOLDER (folder)) == TNY_FOLDER_TYPE_OUTBOX)) { + dimmed = _all_msgs_in_sending_status (MODEST_HEADER_VIEW (header_view));; + } g_object_unref (folder); } } @@ -3017,7 +3129,7 @@ modest_ui_dimming_rules_on_folder_window_move_to (ModestWindow *win, gpointer us /* Check dimmed rule */ dimmed = _transfer_mode_enabled (win); if (dimmed) - modest_dimming_rule_set_notification (rule, _("mail_ib_notavailable_downloading")); + modest_dimming_rule_set_notification (rule, _("mail_ib_notavailable_downloading")); if (MODEST_IS_FOLDER_WINDOW (win)) { ModestFolderView *folder_view; @@ -3026,6 +3138,12 @@ modest_ui_dimming_rules_on_folder_window_move_to (ModestWindow *win, gpointer us MODEST_FOLDER_RULES_FOLDER_NON_MOVEABLE); } + if (!dimmed) { + dimmed = _transfer_mode_enabled (win); + if (dimmed) + modest_dimming_rule_set_notification (rule, ""); + } + return dimmed; } @@ -3051,6 +3169,12 @@ modest_ui_dimming_rules_on_folder_window_delete (ModestWindow *win, gpointer use MODEST_FOLDER_RULES_FOLDER_NON_DELETABLE); } + if (!dimmed) { + dimmed = _transfer_mode_enabled (win); + if (dimmed) + modest_dimming_rule_set_notification (rule, ""); + } + return dimmed; }