From: Peter Csaszar Date: Thu, 9 Aug 2007 14:11:15 +0000 (+0000) Subject: modest-ui-actions.c: some alignment in the code X-Git-Tag: git_migration_finished~2608 X-Git-Url: http://git.maemo.org/git/?p=modest;a=commitdiff_plain;h=27ef05705f9dfbb30b4a60646b70a9f219de2bc6 modest-ui-actions.c: some alignment in the code modest-ui-dimming-rules.c: some cleanup of unnecessary codes modest-msg-view-window.c: partially fixes bug 60714, and have further modifications. The concept is using signals of tree_model for any change. If there is a change, dimming rules should be applied on msg-view-window. Not: There remains some bugs, which I do not know if registered on bugzilla or not, but are near the same problems like 60714. The tree_view (header_view) in main window might have new tree_model due to some user actions and so 60714 bug become current again. pmo-trunk-r2959 --- diff --git a/src/maemo/modest-msg-view-window.c b/src/maemo/modest-msg-view-window.c index b0a3839..b57d266 100644 --- a/src/maemo/modest-msg-view-window.c +++ b/src/maemo/modest-msg-view-window.c @@ -89,6 +89,29 @@ static void modest_msg_view_window_show_toolbar (ModestWindow *window, static void modest_msg_view_window_clipboard_owner_change (GtkClipboard *clipboard, GdkEvent *event, ModestMsgViewWindow *window); +void modest_msg_view_window_on_row_changed( + GtkTreeModel *header_model, + GtkTreePath *arg1, + GtkTreeIter *arg2, + ModestMsgViewWindow *window); + +void modest_msg_view_window_on_row_deleted( + GtkTreeModel *header_model, + GtkTreePath *arg1, + ModestMsgViewWindow *window); + +void modest_msg_view_window_on_row_inserted( + GtkTreeModel *header_model, + GtkTreePath *arg1, + GtkTreeIter *arg2, + ModestMsgViewWindow *window); + +void modest_msg_view_window_on_row_reordered( + GtkTreeModel *header_model, + GtkTreePath *arg1, + GtkTreeIter *arg2, + gpointer arg3, + ModestMsgViewWindow *window); static void cancel_progressbar (GtkToolButton *toolbutton, ModestMsgViewWindow *self); @@ -581,6 +604,19 @@ modest_msg_view_window_new_with_header_model (TnyMsg *msg, priv->next_row_reference = gtk_tree_row_reference_copy (row_reference); select_next_valid_row (model, &(priv->next_row_reference), TRUE); + g_signal_connect (GTK_TREE_MODEL(model), "row-changed", + G_CALLBACK (modest_msg_view_window_on_row_changed), + window); + g_signal_connect (GTK_TREE_MODEL(model), "row-deleted", + G_CALLBACK (modest_msg_view_window_on_row_deleted), + window); + g_signal_connect (GTK_TREE_MODEL(model), "row-inserted", + G_CALLBACK (modest_msg_view_window_on_row_inserted), + window); + g_signal_connect (GTK_TREE_MODEL(model), "rows-reordered", + G_CALLBACK (modest_msg_view_window_on_row_reordered), + window); + modest_msg_view_window_update_priority (window); /* Check toolbar dimming rules */ @@ -589,7 +625,6 @@ modest_msg_view_window_new_with_header_model (TnyMsg *msg, return MODEST_WINDOW(window); } - ModestWindow * modest_msg_view_window_new (TnyMsg *msg, const gchar *modest_account_name, @@ -735,6 +770,37 @@ modest_msg_view_window_new (TnyMsg *msg, return MODEST_WINDOW(obj); } +void modest_msg_view_window_on_row_changed( + GtkTreeModel *header_model, + GtkTreePath *arg1, + GtkTreeIter *arg2, + ModestMsgViewWindow *window){ + modest_ui_actions_check_toolbar_dimming_rules (MODEST_WINDOW (window)); +} + +void modest_msg_view_window_on_row_deleted( + GtkTreeModel *header_model, + GtkTreePath *arg1, + ModestMsgViewWindow *window){ + modest_ui_actions_check_toolbar_dimming_rules (MODEST_WINDOW (window)); +} + +void modest_msg_view_window_on_row_inserted( + GtkTreeModel *header_model, + GtkTreePath *arg1, + GtkTreeIter *arg2, + ModestMsgViewWindow *window){ + modest_ui_actions_check_toolbar_dimming_rules (MODEST_WINDOW (window)); +} + +void modest_msg_view_window_on_row_reordered( + GtkTreeModel *header_model, + GtkTreePath *arg1, + GtkTreeIter *arg2, + gpointer arg3, + ModestMsgViewWindow *window){ + modest_ui_actions_check_toolbar_dimming_rules (MODEST_WINDOW (window)); +} gboolean modest_msg_view_window_toolbar_on_transfer_mode (ModestMsgViewWindow *self) @@ -1026,32 +1092,33 @@ modest_msg_view_window_last_message_selected (ModestMsgViewWindow *window) GtkTreePath *path; ModestMsgViewWindowPrivate *priv; GtkTreeIter tmp_iter; - gboolean has_next = FALSE; + gboolean is_last_selected; g_return_val_if_fail (MODEST_IS_MSG_VIEW_WINDOW (window), TRUE); priv = MODEST_MSG_VIEW_WINDOW_GET_PRIVATE (window); - if (priv->header_model) { - path = gtk_tree_row_reference_get_path (priv->row_reference); - if (path == NULL) return FALSE; - while (!has_next) { - TnyHeader *header; - gtk_tree_path_next (path); - if (!gtk_tree_model_get_iter (priv->header_model, &tmp_iter, path)) - break; - gtk_tree_model_get (priv->header_model, &tmp_iter, TNY_GTK_HEADER_LIST_MODEL_INSTANCE_COLUMN, - &header, -1); - if (!(tny_header_get_flags(header) & TNY_HEADER_FLAG_DELETED)) { - has_next = TRUE; - break; - } - } - gtk_tree_path_free (path); - return !has_next; - } else { + /*if no model (so no rows at all), then virtually we are the last*/ + if (!priv->header_model) return TRUE; + + path = gtk_tree_row_reference_get_path (priv->row_reference); + if (path == NULL) + return TRUE; + + is_last_selected = TRUE; + while (is_last_selected) { + TnyHeader *header; + gtk_tree_path_next (path); + if (!gtk_tree_model_get_iter (priv->header_model, &tmp_iter, path)) + break; + gtk_tree_model_get (priv->header_model, &tmp_iter, + TNY_GTK_HEADER_LIST_MODEL_INSTANCE_COLUMN, + &header, -1); + if (!(tny_header_get_flags(header) & TNY_HEADER_FLAG_DELETED)) + is_last_selected = FALSE; } - + gtk_tree_path_free (path); + return is_last_selected; } gboolean @@ -1070,53 +1137,46 @@ modest_msg_view_window_first_message_selected (ModestMsgViewWindow *window) { GtkTreePath *path; ModestMsgViewWindowPrivate *priv; - gboolean result; + gboolean is_first_selected; GtkTreeIter tmp_iter; +/* gchar * path_string;*/ g_return_val_if_fail (MODEST_IS_MSG_VIEW_WINDOW (window), TRUE); priv = MODEST_MSG_VIEW_WINDOW_GET_PRIVATE (window); - if (priv->header_model) { - gchar * path_string; - path = gtk_tree_row_reference_get_path (priv->row_reference); - if (!path) - return TRUE; + /*if no model (so no rows at all), then virtually we are the first*/ + if (!priv->header_model) + return TRUE; - path_string = gtk_tree_path_to_string (path); - result = (strcmp (path_string, "0")==0); - if (result) { - g_free (path_string); - gtk_tree_path_free (path); - return result; - } + path = gtk_tree_row_reference_get_path (priv->row_reference); + if (!path) + return TRUE; - while (result) { - TnyHeader *header; +/* path_string = gtk_tree_path_to_string (path); + is_first_selected = strcmp (path_string, "0"); - gtk_tree_path_prev (path); - - if (!gtk_tree_model_get_iter (priv->header_model, &tmp_iter, path)) - break; - gtk_tree_model_get (priv->header_model, &tmp_iter, TNY_GTK_HEADER_LIST_MODEL_INSTANCE_COLUMN, - &header, -1); - if (!(tny_header_get_flags(header)&TNY_HEADER_FLAG_DELETED)) { - result = FALSE; - break; - } + g_free (path_string); + gtk_tree_path_free (path); - path_string = gtk_tree_path_to_string (path); - if (strcmp(path_string, "0")==0) { - g_free (path_string); - break; - } - g_free (path_string); - } - gtk_tree_path_free (path); - return result; - } else { - return TRUE; + return is_first_selected;*/ + + is_first_selected = TRUE; + while (is_first_selected) { + TnyHeader *header; + if(!gtk_tree_path_prev (path)) + break; + /* Here the 'if' is needless for logic, but let make sure + * iter is valid for gtk_tree_model_get. */ + if (!gtk_tree_model_get_iter (priv->header_model, &tmp_iter, path)) + break; + gtk_tree_model_get (priv->header_model, &tmp_iter, + TNY_GTK_HEADER_LIST_MODEL_INSTANCE_COLUMN, + &header, -1); + if (!(tny_header_get_flags(header) & TNY_HEADER_FLAG_DELETED)) + is_first_selected = FALSE; } - + gtk_tree_path_free (path); + return is_first_selected; } /** diff --git a/src/modest-ui-actions.c b/src/modest-ui-actions.c index 41aa482..baf2176 100644 --- a/src/modest-ui-actions.c +++ b/src/modest-ui-actions.c @@ -1348,14 +1348,17 @@ modest_ui_actions_on_next (GtkAction *action, if (MODEST_IS_MAIN_WINDOW (window)) { GtkWidget *header_view; - header_view = modest_main_window_get_child_widget (MODEST_MAIN_WINDOW(window), - MODEST_WIDGET_TYPE_HEADER_VIEW); + header_view = modest_main_window_get_child_widget ( + MODEST_MAIN_WINDOW(window), + MODEST_WIDGET_TYPE_HEADER_VIEW); if (!header_view) return; - modest_header_view_select_next (MODEST_HEADER_VIEW(header_view)); + modest_header_view_select_next ( + MODEST_HEADER_VIEW(header_view)); } else if (MODEST_IS_MSG_VIEW_WINDOW (window)) { - modest_msg_view_window_select_next_message (MODEST_MSG_VIEW_WINDOW (window)); + modest_msg_view_window_select_next_message ( + MODEST_MSG_VIEW_WINDOW (window)); } else { g_return_if_reached (); } diff --git a/src/modest-ui-dimming-rules.c b/src/modest-ui-dimming-rules.c index 07acbde..edf41c2 100644 --- a/src/modest-ui-dimming-rules.c +++ b/src/modest-ui-dimming-rules.c @@ -305,8 +305,7 @@ modest_ui_dimming_rules_on_new_msg (ModestWindow *win, gpointer user_data) /* Check dimmed rule */ if (!dimmed) { - if (MODEST_IS_MSG_VIEW_WINDOW (win)) - dimmed = _msg_download_in_progress (MODEST_MSG_VIEW_WINDOW(win)); + dimmed = _msg_download_in_progress (MODEST_MSG_VIEW_WINDOW(win)); if (dimmed) modest_dimming_rule_set_notification (rule, ""); } @@ -611,8 +610,7 @@ modest_ui_dimming_rules_on_reply_msg (ModestWindow *win, gpointer user_data) modest_dimming_rule_set_notification (rule, _("mail_ib_notavailable_downloading")); } if (!dimmed) { - if (MODEST_IS_MSG_VIEW_WINDOW (win)) - dimmed = _msg_download_in_progress (MODEST_MSG_VIEW_WINDOW (win)); + dimmed = _msg_download_in_progress (MODEST_MSG_VIEW_WINDOW (win)); if (dimmed) modest_dimming_rule_set_notification (rule, _("mcen_ib_unable_to_reply")); } @@ -1229,17 +1227,18 @@ modest_ui_dimming_rules_on_view_previous (ModestWindow *win, gpointer user_data) g_return_val_if_fail (MODEST_IS_MSG_VIEW_WINDOW(win), FALSE); - /* Check dimmed rule */ + /* Check dimmed rule */ if (!dimmed) { - dimmed = _transfer_mode_enabled (win); + 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) { - if (MODEST_IS_MSG_VIEW_WINDOW (win)) - dimmed = modest_msg_view_window_first_message_selected (MODEST_MSG_VIEW_WINDOW(win)); + dimmed = modest_msg_view_window_first_message_selected ( + MODEST_MSG_VIEW_WINDOW(win)); modest_dimming_rule_set_notification (rule, NULL); - } + } return dimmed; } @@ -1261,8 +1260,7 @@ modest_ui_dimming_rules_on_view_next (ModestWindow *win, gpointer user_data) modest_dimming_rule_set_notification (rule, _("mail_ib_notavailable_downloading")); } if (!dimmed) { - if (MODEST_IS_MSG_VIEW_WINDOW (win)) - dimmed = modest_msg_view_window_last_message_selected (MODEST_MSG_VIEW_WINDOW (win)); + dimmed = modest_msg_view_window_last_message_selected (MODEST_MSG_VIEW_WINDOW (win)); modest_dimming_rule_set_notification (rule, NULL); }