X-Git-Url: http://git.maemo.org/git/?a=blobdiff_plain;ds=sidebyside;f=src%2Fmodest-ui-dimming-rules.c;h=553b5ae751625cb9c0962ce89ea4b67d50e391b9;hb=1a265d71e544afc25fde77bba48ac02cb78cae5b;hp=9dc1b4f3e366346f4823853cd8a9d0bae0bb6c86;hpb=c3e0db5d03d977b01214b89211b2d72bcb7b8c9c;p=modest diff --git a/src/modest-ui-dimming-rules.c b/src/modest-ui-dimming-rules.c index 9dc1b4f..553b5ae 100644 --- a/src/modest-ui-dimming-rules.c +++ b/src/modest-ui-dimming-rules.c @@ -83,6 +83,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 +490,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); } } @@ -1352,6 +1358,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 +1431,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 +1471,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); @@ -2882,7 +2932,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 +3066,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 +3076,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 +3101,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;