modest-ui-actions.c: some alignment in the code
authorPeter Csaszar <pcsaszar@blumsoft.eu>
Thu, 9 Aug 2007 14:11:15 +0000 (14:11 +0000)
committerPeter Csaszar <pcsaszar@blumsoft.eu>
Thu, 9 Aug 2007 14:11:15 +0000 (14:11 +0000)
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

src/maemo/modest-msg-view-window.c
src/modest-ui-actions.c
src/modest-ui-dimming-rules.c

index b0a3839..b57d266 100644 (file)
@@ -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;
 }
 
 /**
index 41aa482..baf2176 100644 (file)
@@ -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 ();
        }
index 07acbde..edf41c2 100644 (file)
@@ -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);
        }