+ /* Check dimmed rule */
+ dimmed = _invalid_attach_selected (win, TRUE, TRUE, FALSE, rule);
+
+ if (!dimmed) {
+ dimmed = _purged_attach_selected (win, FALSE, NULL);
+ if (dimmed) {
+ modest_dimming_rule_set_notification (rule, _("mail_ib_attach_not_local"));
+ }
+ }
+
+ 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)
+{
+ ModestDimmingRule *rule = NULL;
+ gboolean dimmed = FALSE;
+
+ g_return_val_if_fail (MODEST_IS_MSG_VIEW_WINDOW(win), FALSE);
+ g_return_val_if_fail (MODEST_IS_DIMMING_RULE (user_data), FALSE);
+ 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, TRUE, NULL);
+ if (dimmed) {
+ modest_dimming_rule_set_notification (rule, _("mail_ib_attach_not_local"));
+ }
+ }
+#endif
+ return dimmed;
+}
+
+gboolean
+modest_ui_dimming_rules_on_remove_attachments (ModestWindow *win, gpointer user_data)
+{
+ ModestDimmingRule *rule = NULL;
+ const DimmedState *state = NULL;
+ gboolean dimmed = FALSE;
+
+ g_return_val_if_fail (MODEST_IS_WINDOW(win), FALSE);
+ g_return_val_if_fail (MODEST_IS_DIMMING_RULE (user_data), FALSE);
+ rule = MODEST_DIMMING_RULE (user_data);
+ state = modest_window_get_dimming_state (win);
+
+ /* Check in main window if there's only one message selected */
+ if (MODEST_IS_MAIN_WINDOW (win)) {
+ dimmed = _invalid_msg_selected (MODEST_MAIN_WINDOW (win), TRUE, rule);
+ }
+
+ /* Check in view window if there's any attachment selected */
+ if (!dimmed && MODEST_IS_MSG_VIEW_WINDOW (win)) {
+ dimmed = _invalid_attach_selected (win, FALSE, FALSE, TRUE, NULL);
+ if (dimmed)
+ modest_dimming_rule_set_notification (rule, _("FIXME:no attachment selected"));
+
+ if (!dimmed) {
+ 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);
+ }
+ }
+ }
+
+ if (!dimmed) {
+
+ dimmed = _selected_msg_sent_in_progress (win);
+ if (dimmed) {
+ modest_dimming_rule_set_notification (rule, _("mail_ib_unable_to_purge_attachments"));
+ }
+ }
+
+ /* cannot purge in editable drafts nor pop folders */
+ if (!dimmed) {
+ dimmed = _invalid_folder_for_purge (win, rule);
+ if (dimmed)
+ modest_dimming_rule_set_notification (rule, _("mail_ib_unable_to_purge_attachments"));
+ }
+
+ /* Check if the selected message in main window has attachments */
+ if (!dimmed && MODEST_IS_MAIN_WINDOW (win)) {
+ dimmed = !(state->any_has_attachments);
+ if (dimmed)
+ modest_dimming_rule_set_notification (rule, _("mail_ib_unable_to_purge_attachments"));
+ }
+
+ /* Check if all attachments are already purged */
+ if (!dimmed) {
+ dimmed = _purged_attach_selected (win, TRUE, rule);
+ }
+
+ /* Check if the message is already downloaded */
+ if (!dimmed && MODEST_IS_MAIN_WINDOW (win)) {
+ dimmed = !_msg_download_completed (MODEST_MAIN_WINDOW (win));
+ if (dimmed)
+ modest_dimming_rule_set_notification (rule, _("mail_ib_attach_not_local"));
+ }
+
+ return dimmed;
+}
+
+gboolean
+modest_ui_dimming_rules_on_undo (ModestWindow *win, gpointer user_data)
+{
+ ModestDimmingRule *rule = NULL;
+ gboolean dimmed = FALSE;
+
+ g_return_val_if_fail (MODEST_IS_DIMMING_RULE (user_data), FALSE);
+ rule = MODEST_DIMMING_RULE (user_data);
+
+ /* Check dimmed rule */
+ if (MODEST_IS_MAIN_WINDOW (win)) {
+ dimmed = _clipboard_is_empty (win);
+ if (dimmed)
+ modest_dimming_rule_set_notification (rule, "");
+ }
+
+ if (!dimmed && MODEST_IS_MSG_EDIT_WINDOW (win)) {
+ dimmed = !modest_msg_edit_window_can_undo (MODEST_MSG_EDIT_WINDOW (win));
+ }
+
+ return dimmed;
+}
+
+gboolean
+modest_ui_dimming_rules_on_redo (ModestWindow *win, gpointer user_data)
+{
+ ModestDimmingRule *rule = NULL;
+ gboolean dimmed = FALSE;
+
+ g_return_val_if_fail (MODEST_IS_DIMMING_RULE (user_data), FALSE);
+ rule = MODEST_DIMMING_RULE (user_data);
+
+ /* Check dimmed rule */
+ if (MODEST_IS_MSG_EDIT_WINDOW (win)) {
+ dimmed = !modest_msg_edit_window_can_redo (MODEST_MSG_EDIT_WINDOW (win));
+ }
+
+ return dimmed;
+}
+
+gboolean
+modest_ui_dimming_rules_on_cut (ModestWindow *win, gpointer user_data)
+{
+ ModestDimmingRule *rule = NULL;
+ const DimmedState *state = NULL;
+ gboolean dimmed = FALSE;
+
+ g_return_val_if_fail (MODEST_IS_DIMMING_RULE (user_data), FALSE);
+ rule = MODEST_DIMMING_RULE (user_data);
+ state = modest_window_get_dimming_state (win);
+
+ /* Check common dimming rules */
+ dimmed = _invalid_clipboard_selected (win, rule);
+
+ /* Check window specific dimming rules */
+ if (MODEST_IS_MAIN_WINDOW (win)) {
+ /* Get focused widget */
+ GtkWidget *focused = gtk_window_get_focus (GTK_WINDOW (win));
+
+ if (MODEST_IS_HEADER_VIEW (focused)) {
+ if (!dimmed) {
+ dimmed = _selected_folder_is_empty (MODEST_MAIN_WINDOW(win));
+ if (dimmed)
+ modest_dimming_rule_set_notification (rule, "");
+ }
+ if (!dimmed) {
+ dimmed = _selected_msg_sent_in_progress (win);
+ if (dimmed)
+ modest_dimming_rule_set_notification (rule, _("mcen_ib_unable_to_cut_mess"));
+ }
+ if (!dimmed) {
+ dimmed = (state->already_opened_msg > 0) ? TRUE : FALSE;
+ if(dimmed)
+ modest_dimming_rule_set_notification (rule, _("mcen_ib_unable_to_cut_mess"));
+ }
+ }
+ else if (MODEST_IS_FOLDER_VIEW (focused)) {
+ TnyFolderType types[3];
+
+ types[0] = TNY_FOLDER_TYPE_DRAFTS;
+ types[1] = TNY_FOLDER_TYPE_OUTBOX;
+ types[2] = TNY_FOLDER_TYPE_SENT;
+
+ /* Apply folder rules */
+ if (!dimmed) {
+ dimmed = _selected_folder_not_deletable (MODEST_MAIN_WINDOW(win));
+ if (dimmed)
+ modest_dimming_rule_set_notification (rule, _("emev_nc_unabletomove_items"));
+ }
+ if (!dimmed) {
+ dimmed = _selected_folder_is_root_or_inbox (MODEST_MAIN_WINDOW(win));
+ if (dimmed)
+ modest_dimming_rule_set_notification (rule, _("emev_nc_unabletomove_items"));
+ }
+ if (!dimmed) {
+ dimmed = _selected_folder_is_any_of_type (win, types, 3);
+ if (dimmed)
+ modest_dimming_rule_set_notification (rule, _("emev_nc_unabletomove_items"));
+ }
+ }
+ }
+
+ return dimmed;
+}
+
+gboolean
+modest_ui_dimming_rules_on_copy (ModestWindow *win, gpointer user_data)
+{
+ ModestDimmingRule *rule = NULL;
+ const DimmedState *state = NULL;
+ gboolean dimmed = FALSE;
+
+ g_return_val_if_fail (MODEST_IS_DIMMING_RULE (user_data), FALSE);
+ rule = MODEST_DIMMING_RULE (user_data);
+ state = modest_window_get_dimming_state (win);
+
+ /* Check common dimming rules */
+ dimmed = _invalid_clipboard_selected (win, rule);
+
+ /* Check window specific dimming rules */
+ if (MODEST_IS_MAIN_WINDOW (win)) {
+ /* Get focused widget */
+ GtkWidget *focused = gtk_window_get_focus (GTK_WINDOW (win));
+
+ if (MODEST_IS_HEADER_VIEW (focused)) {
+ if (!dimmed) {
+ dimmed = _selected_folder_is_empty (MODEST_MAIN_WINDOW(win));
+ if (dimmed)
+ modest_dimming_rule_set_notification (rule, "");
+ }
+ if (!dimmed) {
+ dimmed = _selected_msg_sent_in_progress (win);
+ if (dimmed)
+ modest_dimming_rule_set_notification (rule, _(""));
+ }
+ if (!dimmed) {
+ dimmed = (state->already_opened_msg > 0) ? TRUE : FALSE;
+ if(dimmed)
+ modest_dimming_rule_set_notification (rule, _(""));
+ }
+ }
+ else if (MODEST_IS_FOLDER_VIEW (focused)) {
+ TnyFolderType types[3];
+
+ types[0] = TNY_FOLDER_TYPE_DRAFTS;
+ types[1] = TNY_FOLDER_TYPE_OUTBOX;
+ types[2] = TNY_FOLDER_TYPE_SENT;
+
+ if (!dimmed) {
+ dimmed = _selected_folder_is_root (MODEST_MAIN_WINDOW(win));
+ if (dimmed)
+ modest_dimming_rule_set_notification (rule, _(""));
+ }
+ if (!dimmed) {
+ dimmed = _selected_folder_is_any_of_type (win, types, 3);
+ if (dimmed)
+ modest_dimming_rule_set_notification (rule, _(""));
+ }
+ }
+ }
+
+ return dimmed;
+}
+
+gboolean
+modest_ui_dimming_rules_on_set_style (ModestWindow *win, gpointer user_data)
+{
+ ModestDimmingRule *rule = NULL;
+ const DimmedState *state = NULL;
+ gboolean dimmed = FALSE;
+
+ g_return_val_if_fail (MODEST_IS_DIMMING_RULE (user_data), FALSE);
+ g_return_val_if_fail (MODEST_IS_MSG_EDIT_WINDOW (win), TRUE);
+ rule = MODEST_DIMMING_RULE (user_data);
+ state = modest_window_get_dimming_state (win);
+
+
+ /* Check common dimming rules */
+ ModestMsgEditFormat format;
+ format = modest_msg_edit_window_get_format (MODEST_MSG_EDIT_WINDOW (win));
+
+ dimmed = (format != MODEST_MSG_EDIT_FORMAT_HTML);
+ if (dimmed)
+ modest_dimming_rule_set_notification (rule, _("mcen_ib_item_unavailable_plaintext"));
+
+ if (!dimmed) {
+ GtkWidget *body;
+ body = modest_msg_edit_window_get_child_widget (MODEST_MSG_EDIT_WINDOW (win),
+ MODEST_MSG_EDIT_WINDOW_WIDGET_TYPE_BODY);
+
+ dimmed = ((body == NULL)||(!gtk_widget_is_focus (body)));
+ if (dimmed)
+ modest_dimming_rule_set_notification (rule, _("mcen_ib_move_cursor_to_message"));
+ }
+
+
+ return dimmed;
+}
+
+gboolean
+modest_ui_dimming_rules_on_zoom (ModestWindow *win, gpointer user_data)
+{
+ ModestDimmingRule *rule = NULL;
+ const DimmedState *state = NULL;
+ gboolean dimmed = FALSE;
+
+ g_return_val_if_fail (MODEST_IS_DIMMING_RULE (user_data), FALSE);
+ g_return_val_if_fail (MODEST_IS_MSG_EDIT_WINDOW (win), TRUE);
+ rule = MODEST_DIMMING_RULE (user_data);
+ state = modest_window_get_dimming_state (win);
+
+ GtkWidget *body;
+ body = modest_msg_edit_window_get_child_widget (MODEST_MSG_EDIT_WINDOW (win),
+ MODEST_MSG_EDIT_WINDOW_WIDGET_TYPE_BODY);
+
+ dimmed = ((body == NULL)||(!gtk_widget_is_focus (body)));
+ if (dimmed)
+ modest_dimming_rule_set_notification (rule, _("mcen_ib_move_cursor_to_message"));
+
+ return dimmed;
+}
+
+gboolean
+modest_ui_dimming_rules_on_editor_paste (ModestWindow *win, gpointer user_data)
+{
+ ModestDimmingRule *rule = NULL;
+ const DimmedState *state = NULL;
+ gboolean dimmed = FALSE;
+ GtkWidget *focused = NULL;
+
+ g_return_val_if_fail (MODEST_IS_DIMMING_RULE (user_data), FALSE);
+ g_return_val_if_fail (MODEST_IS_MSG_EDIT_WINDOW (win), TRUE);
+ rule = MODEST_DIMMING_RULE (user_data);
+ state = modest_window_get_dimming_state (win);
+
+ focused = gtk_window_get_focus (GTK_WINDOW (win));
+
+ dimmed = MODEST_IS_ATTACHMENTS_VIEW (focused);
+
+ if (!dimmed) {
+ dimmed = GTK_IS_TOGGLE_BUTTON (focused);
+ }
+
+ if (!dimmed) {
+ ModestEmailClipboard *e_clipboard = modest_runtime_get_email_clipboard ();
+ const gchar *clipboard_text = modest_msg_edit_window_get_clipboard_text (MODEST_MSG_EDIT_WINDOW (win));
+
+ dimmed = modest_email_clipboard_cleared (e_clipboard) &&
+ ((clipboard_text == NULL) || (clipboard_text[0] == '\0'));
+ }
+
+ return dimmed;
+}
+
+gboolean
+modest_ui_dimming_rules_on_editor_remove_attachment (ModestWindow *win, gpointer user_data)
+{
+ ModestDimmingRule *rule = NULL;
+ const DimmedState *state = NULL;
+ gboolean dimmed = FALSE;
+ TnyList *selected_attachments = NULL;
+ gint n_att_selected = 0;
+ GtkWidget *attachments_view;
+
+ g_return_val_if_fail (MODEST_IS_DIMMING_RULE (user_data), FALSE);
+ g_return_val_if_fail (MODEST_IS_MSG_EDIT_WINDOW (win), TRUE);
+ rule = MODEST_DIMMING_RULE (user_data);
+ state = modest_window_get_dimming_state (win);
+
+ attachments_view = modest_msg_edit_window_get_child_widget (
+ MODEST_MSG_EDIT_WINDOW (win),
+ MODEST_MSG_EDIT_WINDOW_WIDGET_TYPE_ATTACHMENTS);
+
+#ifdef MODEST_TOOLKIT_HILDON2
+ selected_attachments = modest_attachments_view_get_attachments (
+ MODEST_ATTACHMENTS_VIEW (attachments_view));
+#else
+ selected_attachments = modest_attachments_view_get_selection (
+ MODEST_ATTACHMENTS_VIEW (attachments_view));
+#endif
+ n_att_selected = tny_list_get_length (selected_attachments);
+ g_object_unref (selected_attachments);
+
+ dimmed = (n_att_selected < 1);
+
+ return dimmed;
+}
+
+gboolean
+modest_ui_dimming_rules_on_send (ModestWindow *win, gpointer user_data)
+{
+ ModestDimmingRule *rule = NULL;
+ const DimmedState *state = NULL;
+ gboolean dimmed = FALSE;
+ GtkWidget *subject_field, *body_field;
+ const gchar *subject = NULL;
+
+ g_return_val_if_fail (MODEST_IS_DIMMING_RULE (user_data), FALSE);
+ g_return_val_if_fail (MODEST_IS_MSG_EDIT_WINDOW (win), TRUE);
+ rule = MODEST_DIMMING_RULE (user_data);
+ state = modest_window_get_dimming_state (win);
+
+ body_field = modest_msg_edit_window_get_child_widget (
+ MODEST_MSG_EDIT_WINDOW (win),
+ MODEST_MSG_EDIT_WINDOW_WIDGET_TYPE_BODY);
+ subject_field = modest_msg_edit_window_get_child_widget (
+ MODEST_MSG_EDIT_WINDOW (win),
+ MODEST_MSG_EDIT_WINDOW_WIDGET_TYPE_SUBJECT);
+ subject = gtk_entry_get_text (GTK_ENTRY (subject_field));
+
+ dimmed = (subject == NULL || subject[0] == '\0');
+ if (dimmed)
+ modest_dimming_rule_set_notification (rule, _("mcen_ib_subject_not_modified"));
+
+ if (!dimmed) {
+ GtkWidget *to_field, *cc_field, *bcc_field;
+ GtkTextBuffer * to_buffer, *cc_buffer, *bcc_buffer;
+ cc_field = modest_msg_edit_window_get_child_widget (
+ MODEST_MSG_EDIT_WINDOW (win),
+ MODEST_MSG_EDIT_WINDOW_WIDGET_TYPE_CC);
+ to_field = modest_msg_edit_window_get_child_widget (
+ MODEST_MSG_EDIT_WINDOW (win),
+ MODEST_MSG_EDIT_WINDOW_WIDGET_TYPE_TO);
+ bcc_field = modest_msg_edit_window_get_child_widget (
+ MODEST_MSG_EDIT_WINDOW (win),
+ MODEST_MSG_EDIT_WINDOW_WIDGET_TYPE_BCC);
+ to_buffer = modest_recpt_editor_get_buffer (MODEST_RECPT_EDITOR (to_field));
+ cc_buffer = modest_recpt_editor_get_buffer (MODEST_RECPT_EDITOR (cc_field));
+ bcc_buffer = modest_recpt_editor_get_buffer (MODEST_RECPT_EDITOR (bcc_field));
+
+ dimmed = ((gtk_text_buffer_get_char_count (to_buffer) +
+ gtk_text_buffer_get_char_count (cc_buffer) +
+ gtk_text_buffer_get_char_count (bcc_buffer)) == 0);
+ if (dimmed)
+ modest_dimming_rule_set_notification (rule, _("mcen_ib_add_recipients_first"));
+ }
+
+ return dimmed;
+}
+
+gboolean
+modest_ui_dimming_rules_on_view_previous (ModestWindow *win, gpointer user_data)
+{
+ ModestDimmingRule *rule = NULL;
+ gboolean dimmed = FALSE;
+
+ g_return_val_if_fail (MODEST_IS_DIMMING_RULE (user_data), FALSE);
+ rule = MODEST_DIMMING_RULE (user_data);
+
+ g_return_val_if_fail (MODEST_IS_MSG_VIEW_WINDOW(win), FALSE);
+
+ /* Check dimmed rule */
+ dimmed = _transfer_mode_enabled (win);
+ if (dimmed)
+ modest_dimming_rule_set_notification (rule, _("mail_ib_notavailable_downloading"));