From c1f2c3afff07724b37290ae2ad80a251f23aa80c Mon Sep 17 00:00:00 2001 From: Javier Fernandez Garcia-Boente Date: Fri, 8 Jun 2007 09:59:04 +0000 Subject: [PATCH] * Fixes: NB#59378, NB#59389 * Implemented some pending dimming rules pmo-trunk-r2129 --- src/maemo/modest-msg-view-window.c | 21 +++++++++ src/modest-ui-dimming-rules.c | 81 +++++++++++++++++++++++++++++----- src/widgets/modest-msg-view-window.h | 11 +++++ 3 files changed, 102 insertions(+), 11 deletions(-) diff --git a/src/maemo/modest-msg-view-window.c b/src/maemo/modest-msg-view-window.c index 35b6bbb..b3cff16 100644 --- a/src/maemo/modest-msg-view-window.c +++ b/src/maemo/modest-msg-view-window.c @@ -105,6 +105,8 @@ static void set_toolbar_mode (ModestMsgViewWindow *self, static gboolean set_toolbar_transfer_mode (ModestMsgViewWindow *self); + + /* list my signals */ enum { /* MY_SIGNAL_1, */ @@ -142,6 +144,7 @@ struct _ModestMsgViewWindowPrivate { GtkWidget *cancel_toolitem; GtkWidget *prev_toolitem; GtkWidget *next_toolitem; + ModestToolBarModes current_toolbar_mode; /* Optimized view enabled */ gboolean optimized_view; @@ -238,6 +241,7 @@ modest_msg_view_window_init (ModestMsgViewWindow *obj) priv->msg_view = NULL; priv->header_model = NULL; priv->clipboard_change_handler = 0; + priv->current_toolbar_mode = TOOLBAR_MODE_NORMAL; priv->optimized_view = FALSE; priv->progress_bar_timeout = 0; @@ -277,6 +281,9 @@ set_toolbar_mode (ModestMsgViewWindow *self, parent_priv = MODEST_WINDOW_GET_PRIVATE(self); priv = MODEST_MSG_VIEW_WINDOW_GET_PRIVATE(self); + /* Sets current toolbar mode */ + priv->current_toolbar_mode = mode; + switch (mode) { case TOOLBAR_MODE_NORMAL: widget = gtk_ui_manager_get_action (parent_priv->ui_manager, "/ToolBar/ToolbarMessageNew"); @@ -635,6 +642,16 @@ modest_msg_view_window_new (TnyMsg *msg, } +gboolean +modest_msg_view_window_toolbar_on_transfer_mode (ModestMsgViewWindow *self) +{ + ModestMsgViewWindowPrivate *priv= NULL; + + g_return_val_if_fail (MODEST_IS_MSG_VIEW_WINDOW (self), FALSE); + priv = MODEST_MSG_VIEW_WINDOW_GET_PRIVATE (self); + + return priv->current_toolbar_mode == TOOLBAR_MODE_TRANSFER; +} TnyHeader* modest_msg_view_window_get_header (ModestMsgViewWindow *self) @@ -982,6 +999,8 @@ modest_msg_view_window_select_next_message (ModestMsgViewWindow *window) if (!(flags & TNY_HEADER_FLAG_SEEN)) tny_header_set_flags (header, flags | TNY_HEADER_FLAG_SEEN); + /* Msg download initied */ + /* New mail operation */ mail_op = modest_mail_operation_new (MODEST_MAIL_OPERATION_TYPE_RECEIVE, G_OBJECT(window)); modest_mail_operation_queue_add (modest_runtime_get_mail_operation_queue (), mail_op); @@ -1712,3 +1731,5 @@ modest_msg_view_window_remove_attachments (ModestMsgViewWindow *window, GList *m { /* g_message ("not implemented %s", __FUNCTION__); */ } + + diff --git a/src/modest-ui-dimming-rules.c b/src/modest-ui-dimming-rules.c index 4cb0167..6e45a6d 100644 --- a/src/modest-ui-dimming-rules.c +++ b/src/modest-ui-dimming-rules.c @@ -47,6 +47,7 @@ static gboolean _selected_folder_is_any_of_type (ModestMainWindow *win, TnyFolde static gboolean _selected_folder_is_root (ModestMainWindow *win); static gboolean _selected_folder_is_empty (ModestMainWindow *win); static gboolean _msg_download_in_progress (ModestMsgViewWindow *win); +static gboolean _msg_download_completed (ModestMainWindow *win); static gboolean _msg_sent_in_progress (ModestWindow *win); static gboolean _marked_as_deleted (ModestWindow *win); @@ -155,7 +156,8 @@ modest_ui_dimming_rules_on_open_msg (ModestWindow *win, gpointer user_data) dimmed = _invalid_msg_selected (MODEST_MAIN_WINDOW(win), TRUE, user_data); if (!dimmed) { dimmed = _msg_sent_in_progress (win); - modest_dimming_rule_set_notification (rule, _("TEST")); + if (dimmed) + modest_dimming_rule_set_notification (rule, _("TEST")); } return dimmed; @@ -181,11 +183,13 @@ modest_ui_dimming_rules_on_reply_msg (ModestWindow *win, gpointer user_data) /* Check dimmed rule */ if (!dimmed) { dimmed = _selected_folder_is_any_of_type (MODEST_MAIN_WINDOW(win), types, 3); - modest_dimming_rule_set_notification (rule, _("mcen_ib_unable_to_reply")); + if (dimmed) + modest_dimming_rule_set_notification (rule, _("mcen_ib_unable_to_reply")); } if (!dimmed) { dimmed = _selected_folder_is_empty (MODEST_MAIN_WINDOW(win)); - modest_dimming_rule_set_notification (rule, _("mcen_ib_nothing_to_reply")); + if (dimmed) + modest_dimming_rule_set_notification (rule, _("mcen_ib_nothing_to_reply")); } if (!dimmed) dimmed = _invalid_msg_selected (MODEST_MAIN_WINDOW(win), TRUE, rule); @@ -210,7 +214,10 @@ modest_ui_dimming_rules_on_contents_msg (ModestWindow *win, gpointer user_data) g_return_val_if_fail (MODEST_IS_MAIN_WINDOW(win), FALSE); /* Check dimmed rule */ - dimmed = _invalid_msg_selected (MODEST_MAIN_WINDOW(win), FALSE, user_data); + if (!dimmed) + dimmed = _invalid_msg_selected (MODEST_MAIN_WINDOW(win), FALSE, user_data); + if (!dimmed) + dimmed = _msg_download_completed (MODEST_MAIN_WINDOW(win)); return dimmed; } @@ -242,23 +249,28 @@ modest_ui_dimming_rules_on_delete_msg (ModestWindow *win, gpointer user_data) /* Check dimmed rule */ if (!dimmed) { dimmed = _selected_folder_is_empty (MODEST_MAIN_WINDOW(win)); - modest_dimming_rule_set_notification (rule, _("mcen_ib_nothing_to_del")); + if (dimmed) + modest_dimming_rule_set_notification (rule, _("mcen_ib_nothing_to_del")); } if (!dimmed) { dimmed = _invalid_msg_selected (MODEST_MAIN_WINDOW(win), FALSE, user_data); - modest_dimming_rule_set_notification (rule, _("mcen_ib_no_message_selected")); + if (dimmed) + modest_dimming_rule_set_notification (rule, _("mcen_ib_no_message_selected")); } if (!dimmed) { dimmed = _already_opened_msg (win); - modest_dimming_rule_set_notification (rule, _("mcen_nc_unable_to_delete_n_messages")); + if (dimmed) + modest_dimming_rule_set_notification (rule, _("mcen_nc_unable_to_delete_n_messages")); } if (!dimmed) { dimmed = _marked_as_deleted (win); - modest_dimming_rule_set_notification (rule, _("mcen_ib_message_unableto_delete")); + if (dimmed) + modest_dimming_rule_set_notification (rule, _("mcen_ib_message_unableto_delete")); } if (!dimmed) { dimmed = _msg_sent_in_progress (win); - modest_dimming_rule_set_notification (rule, _("mcen_ib_message_unableto_delete")); + if (dimmed) + modest_dimming_rule_set_notification (rule, _("mcen_ib_message_unableto_delete")); } return dimmed; @@ -661,11 +673,13 @@ _invalid_msg_selected (ModestMainWindow *win, if (!result) { result = ((selected_headers == NULL) || (GTK_WIDGET_HAS_FOCUS (folder_view))); - modest_dimming_rule_set_notification (rule, _("mcen_ib_no_message_selected")); + if (result) + modest_dimming_rule_set_notification (rule, _("mcen_ib_no_message_selected")); } if (!result && unique) { result = tny_list_get_length (selected_headers) > 1; - modest_dimming_rule_set_notification (rule, _("mcen_ib_select_one_message")); + if (result) + modest_dimming_rule_set_notification (rule, _("mcen_ib_select_one_message")); } /* free */ @@ -770,6 +784,51 @@ _msg_download_in_progress (ModestMsgViewWindow *win) g_return_val_if_fail (MODEST_IS_MSG_VIEW_WINDOW (win), FALSE); + result = modest_msg_view_window_toolbar_on_transfer_mode (win); + + return result; +} + +static gboolean +_msg_download_completed (ModestMainWindow *win) +{ + GtkWidget *header_view = NULL; + TnyList *selected_headers = NULL; + TnyIterator *iter = NULL; + TnyHeader *header = NULL; + TnyHeaderFlags flags; + gboolean result = FALSE; + + g_return_val_if_fail (MODEST_IS_MAIN_WINDOW (win), FALSE); + + + /* Get header view to check selected messages */ + header_view = modest_main_window_get_child_widget (MODEST_MAIN_WINDOW(win), + MODEST_WIDGET_TYPE_HEADER_VIEW); + + /* Get selected headers */ + selected_headers = modest_header_view_get_selected_headers (MODEST_HEADER_VIEW(header_view)); + if (selected_headers == NULL) + return TRUE; + + /* Check dimmed rule */ + result = TRUE; + iter = tny_list_create_iterator (selected_headers); + while (!tny_iterator_is_done (iter) && result) { + header = TNY_HEADER (tny_iterator_get_current (iter)); + + flags = tny_header_get_flags (header); + /* TODO: is this the right flag?, it seems that some + headers that have been previously downloaded do not + come with it */ + result = (flags & TNY_HEADER_FLAG_CACHED); + + g_object_unref (header); + tny_iterator_next (iter); + } + + g_object_unref (iter); + return result; } diff --git a/src/widgets/modest-msg-view-window.h b/src/widgets/modest-msg-view-window.h index b3d161c..eb044a1 100644 --- a/src/widgets/modest-msg-view-window.h +++ b/src/widgets/modest-msg-view-window.h @@ -209,6 +209,17 @@ void modest_msg_view_window_save_attachments (ModestMsgViewWindow *wi void modest_msg_view_window_remove_attachments (ModestMsgViewWindow *window, GList *mime_parts); + +/** + * modest_msg_view_window_toolbar_on_transfer_mode: + * @window: a #ModestMsgViewWindow + * + * Check if toolbar is in transfer mode, which determines whether a + * transfer operation is being processed. + */ +gboolean +modest_msg_view_window_toolbar_on_transfer_mode (ModestMsgViewWindow *self); + G_END_DECLS #endif /* __MODEST_MSG_VIEW_WINDOW_H__ */ -- 1.7.9.5