From 0cc8439cc0cf7354a314eec5b5fd6b7cee057f1a Mon Sep 17 00:00:00 2001 From: Javier Fernandez Garcia-Boente Date: Wed, 6 Jun 2007 12:06:03 +0000 Subject: [PATCH] on_selection_changed signal handler takes into account selection may be mutliple, and returns first header path. Fixes: #NB56719 pmo-trunk-r2079 --- src/modest-ui-actions.c | 2 +- src/modest-ui-dimming-rules.c | 68 ++++++++++++++++++++++++++++++++++++++ src/widgets/modest-header-view.c | 6 +++- 3 files changed, 74 insertions(+), 2 deletions(-) diff --git a/src/modest-ui-actions.c b/src/modest-ui-actions.c index 7d1d4ef..15be43a 100644 --- a/src/modest-ui-actions.c +++ b/src/modest-ui-actions.c @@ -916,7 +916,7 @@ reply_forward (ReplyForwardAction action, ModestWindow *win) reply_forward_cb must do it */ msg = modest_msg_view_window_get_message (MODEST_MSG_VIEW_WINDOW(win)); header = modest_msg_view_window_get_header (MODEST_MSG_VIEW_WINDOW(win)); - if (!msg || !header) { + if (!msg || !header) { if (msg) g_object_unref (msg); if (header) diff --git a/src/modest-ui-dimming-rules.c b/src/modest-ui-dimming-rules.c index e044d9d..f113be0 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_sent_in_progress (ModestWindow *win); gboolean @@ -151,6 +152,10 @@ modest_ui_dimming_rules_on_open_msg (ModestWindow *win, gpointer user_data) /* Check dimmed rule */ if (!dimmed) 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")); + } return dimmed; } @@ -699,3 +704,66 @@ _msg_download_in_progress (ModestMsgViewWindow *win) return result; } + +static gboolean +_msg_sent_in_progress (ModestWindow *win) +{ + ModestTnySendQueue *send_queue = NULL; + GtkWidget *header_view = NULL; + ModestTnyAccountStore *acc_store = NULL; + TnyAccount *account = NULL; + TnyList *header_list = NULL; + TnyIterator *iter = NULL; + TnyHeader *header = NULL; + const gchar *account_name = NULL; + gboolean result = FALSE; + gchar *id = NULL; + + g_return_val_if_fail (MODEST_IS_MSG_VIEW_WINDOW (win), FALSE); + + /* Get transport account */ + acc_store = modest_runtime_get_account_store(); + account_name = modest_window_get_active_account (win); + account = modest_tny_account_store_get_transport_account_for_open_connection (acc_store, account_name); + + /* Get send queue for current ransport account */ + send_queue = modest_runtime_get_send_queue (TNY_TRANSPORT_ACCOUNT(account)); + g_return_val_if_fail (MODEST_IS_TNY_SEND_QUEUE (send_queue), FALSE); + + if (MODEST_IS_MAIN_WINDOW(win)) { + + /* 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 */ + header_list = modest_header_view_get_selected_headers (MODEST_HEADER_VIEW(header_view)); + + /* Get message header */ + if (!header_list) return FALSE; + iter = tny_list_create_iterator (header_list); + header = TNY_HEADER (tny_iterator_get_current (iter)); + + /* Get message id */ + id = g_strdup(tny_header_get_message_id (header)); + + } else if (MODEST_IS_MSG_VIEW_WINDOW(win)) { + + /* Get message header */ + header = modest_msg_view_window_get_header (MODEST_MSG_VIEW_WINDOW(win)); + + /* Get message id */ + id = g_strdup(tny_header_get_message_id (header)); + } + + /* Check if msg id is being processed inside send queue */ + result = modest_tny_send_queue_msg_is_being_sent (send_queue, id); + + /* Free */ + g_free(id); + g_object_unref (header); + g_free(header_list); + g_free(iter); + + return result; +} diff --git a/src/widgets/modest-header-view.c b/src/widgets/modest-header-view.c index 56b6919..a24b458 100644 --- a/src/widgets/modest-header-view.c +++ b/src/widgets/modest-header-view.c @@ -975,6 +975,7 @@ on_selection_changed (GtkTreeSelection *sel, gpointer user_data) GtkTreeIter iter; ModestHeaderView *self; ModestHeaderViewPrivate *priv; + GList *selected = NULL; g_return_if_fail (sel); g_return_if_fail (user_data); @@ -982,7 +983,9 @@ on_selection_changed (GtkTreeSelection *sel, gpointer user_data) self = MODEST_HEADER_VIEW (user_data); priv = MODEST_HEADER_VIEW_GET_PRIVATE(self); - path = get_selected_row (GTK_TREE_VIEW(self), &model); + selected = gtk_tree_selection_get_selected_rows (sel, &model); + if (selected != NULL) + path = (GtkTreePath *) selected->data; if ((path == NULL) || (!gtk_tree_model_get_iter(model, &iter, path))) return; /* msg was _un_selected */ @@ -1181,6 +1184,7 @@ on_focus_in (GtkWidget *self, /* Need to get the all the rows because is selection multiple */ selected = gtk_tree_selection_get_selected_rows (selection, &model); + if (selected == NULL) return FALSE; selected_path = (GtkTreePath *) selected->data; /* Check if we need to scroll */ -- 1.7.9.5