* Fixed some wrong dimming rules names
authorSergio Villar Senin <svillar@igalia.com>
Fri, 15 Jun 2007 12:13:11 +0000 (12:13 +0000)
committerSergio Villar Senin <svillar@igalia.com>
Fri, 15 Jun 2007 12:13:11 +0000 (12:13 +0000)
* Fixes NB#60205 Modest no longer crashes when transfering the last msg of a folder from the view window
* Removed an invalid assertion
* Fixed some memory leaks

pmo-trunk-r2253

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

index 3f2cba2..7b6e16f 100644 (file)
@@ -59,14 +59,14 @@ static const ModestDimmingEntry modest_msg_view_menu_dimming_entries [] = {
 static const ModestDimmingEntry modest_msg_view_toolbar_dimming_entries [] = {
 
        /* Toolbar */
-       { "/Toolbar/ToolbarMessageNew", NULL },
-       { "/Toolbar/ToolbarMessageReply", G_CALLBACK(modest_ui_dimming_rules_on_reply_msg) },
-       { "/Toolbar/ToolbarDeleteMessage",  G_CALLBACK(modest_ui_dimming_rules_on_delete_msg) },
-       { "/Toolbar/ToolbarMoveTo", G_CALLBACK(modest_ui_dimming_rules_on_move_to) },
-       { "/Toolbar/ToolbarFindInMessage", NULL },
-       { "/Toolbar/ToolbarMessageBack", G_CALLBACK(modest_ui_dimming_rules_on_view_previous) },
-       { "/Toolbar/ToolbarMessageNext", G_CALLBACK(modest_ui_dimming_rules_on_view_next) },
-       { "/Toolbar/ToolbarCancel", NULL },
+       { "/ToolBar/ToolbarMessageNew", NULL },
+       { "/ToolBar/ToolbarMessageReply", G_CALLBACK(modest_ui_dimming_rules_on_reply_msg) },
+       { "/ToolBar/ToolbarDeleteMessage",  G_CALLBACK(modest_ui_dimming_rules_on_delete_msg) },
+       { "/ToolBar/ToolbarMoveTo", G_CALLBACK(modest_ui_dimming_rules_on_move_to) },
+       { "/ToolBar/ToolbarFindInMessage", NULL },
+       { "/ToolBar/ToolbarMessageBack", G_CALLBACK(modest_ui_dimming_rules_on_view_previous) },
+       { "/ToolBar/ToolbarMessageNext", G_CALLBACK(modest_ui_dimming_rules_on_view_next) },
+       { "/ToolBar/ToolbarCancel", NULL },
 };
 
 G_END_DECLS
index 5494a49..e66ba79 100644 (file)
@@ -488,6 +488,9 @@ modest_msg_view_window_new_with_header_model (TnyMsg *msg,
 
        modest_msg_view_window_update_priority (window);
 
+       /* Check toolbar dimming rules */
+       modest_ui_actions_check_toolbar_dimming_rules (MODEST_WINDOW (window));
+
        return MODEST_WINDOW(window);
 }
 
@@ -1004,6 +1007,9 @@ modest_msg_view_window_select_next_message (ModestMsgViewWindow *window)
                        modest_mail_operation_get_msg (mail_op, header, view_msg_cb, NULL);
                        g_object_unref (mail_op);
 
+                       /* Update toolbar dimming rules */
+                       modest_ui_actions_check_toolbar_dimming_rules (MODEST_WINDOW (window));
+
                        return TRUE;
                }
        }
@@ -1023,20 +1029,25 @@ modest_msg_view_window_select_first_message (ModestMsgViewWindow *self)
        g_return_val_if_fail (MODEST_IS_MSG_VIEW_WINDOW (self), FALSE);
        priv = MODEST_MSG_VIEW_WINDOW_GET_PRIVATE (self);
 
-       path = gtk_tree_path_new_from_string ("0");
+       /* Check that the model is not empty */
+       if (!gtk_tree_model_get_iter_first (priv->header_model, &iter))
+               return FALSE;
 
-       /* Update the row reference */
-       /* Get first message */
-       gtk_tree_model_get_iter (priv->header_model, &iter, path);
-       gtk_tree_model_get (priv->header_model, &iter, TNY_GTK_HEADER_LIST_MODEL_INSTANCE_COLUMN,
+       /* Get the header */
+       gtk_tree_model_get (priv->header_model, 
+                           &iter, 
+                           TNY_GTK_HEADER_LIST_MODEL_INSTANCE_COLUMN,
                            &header, -1);
        
        g_return_val_if_fail (TNY_IS_HEADER (header), FALSE);
-       if (tny_header_get_flags (header) & TNY_HEADER_FLAG_DELETED)
+       if (tny_header_get_flags (header) & TNY_HEADER_FLAG_DELETED) {
+               g_object_unref (header);
                return modest_msg_view_window_select_next_message (self);
+       }
        
        /* Update the row reference */
        gtk_tree_row_reference_free (priv->row_reference);
+       path = gtk_tree_path_new_first ();
        priv->row_reference = gtk_tree_row_reference_new (priv->header_model, path);
        gtk_tree_path_free (path);
 
@@ -1050,9 +1061,12 @@ modest_msg_view_window_select_first_message (ModestMsgViewWindow *self)
        modest_mail_operation_queue_add (modest_runtime_get_mail_operation_queue (), mail_op);
        modest_mail_operation_get_msg (mail_op, header, view_msg_cb, NULL);
        g_object_unref (mail_op);
+
+       /* Update toolbar dimming rules */
+       modest_ui_actions_check_toolbar_dimming_rules (MODEST_WINDOW (self));
        
        /* Free */
-/*     g_object_unref (header); */
+       g_object_unref (header);
 
        return TRUE;
 }
@@ -1062,43 +1076,52 @@ modest_msg_view_window_select_previous_message (ModestMsgViewWindow *window)
 {
        TnyHeaderFlags flags;
        ModestMsgViewWindowPrivate *priv = NULL;
+       GtkTreePath *path;
        ModestMailOperation *mail_op = NULL;
 
        g_return_val_if_fail (MODEST_IS_MSG_VIEW_WINDOW (window), FALSE);
        priv = MODEST_MSG_VIEW_WINDOW_GET_PRIVATE (window);
 
-       if (priv->header_model) {
-               GtkTreePath *path;
+       /* Return inmediatly if there is no header model */
+       if (!priv->header_model)
+               return FALSE;
 
-               path = gtk_tree_row_reference_get_path (priv->row_reference);
-               while (gtk_tree_path_prev (path)) {
-                       TnyHeader *header;
-                       GtkTreeIter iter;
+       path = gtk_tree_row_reference_get_path (priv->row_reference);
+       while (gtk_tree_path_prev (path)) {
+               TnyHeader *header;
+               GtkTreeIter iter;
 
-                       gtk_tree_model_get_iter (priv->header_model, &iter, path);
-                       gtk_tree_model_get (priv->header_model, &iter, TNY_GTK_HEADER_LIST_MODEL_INSTANCE_COLUMN,
-                                           &header, -1);
-                       if (!header)
-                               break;
-                       if (tny_header_get_flags (header) & TNY_HEADER_FLAG_DELETED)
-                               continue;
+               gtk_tree_model_get_iter (priv->header_model, &iter, path);
+               gtk_tree_model_get (priv->header_model, &iter, 
+                                   TNY_GTK_HEADER_LIST_MODEL_INSTANCE_COLUMN,
+                                   &header, -1);
+               if (!header)
+                       break;
+               if (tny_header_get_flags (header) & TNY_HEADER_FLAG_DELETED) {
+                       g_object_unref (header);
+                       continue;
+               }
 
-                       /* Update the row reference */
-                       gtk_tree_row_reference_free (priv->row_reference);
-                       priv->row_reference = gtk_tree_row_reference_new (priv->header_model, path);
+               /* Update the row reference */
+               gtk_tree_row_reference_free (priv->row_reference);
+               priv->row_reference = gtk_tree_row_reference_new (priv->header_model, path);
                        
-                       /* Mark as read */
-                       flags = tny_header_get_flags (header);
-                       if (!(flags & TNY_HEADER_FLAG_SEEN))
-                               tny_header_set_flags (header, flags | TNY_HEADER_FLAG_SEEN);
+               /* Mark as read */
+               flags = tny_header_get_flags (header);
+               if (!(flags & TNY_HEADER_FLAG_SEEN))
+                       tny_header_set_flags (header, flags | TNY_HEADER_FLAG_SEEN);
 
-                       /* 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);
-                       modest_mail_operation_get_msg (mail_op, header, view_msg_cb, NULL);             
+               /* 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);
+               modest_mail_operation_get_msg (mail_op, header, view_msg_cb, NULL);             
 
-                       return TRUE;
-               }
+               /* Update toolbar dimming rules */
+               modest_ui_actions_check_toolbar_dimming_rules (MODEST_WINDOW (window));
+
+               g_object_unref (header);
+
+               return TRUE;
        }
 
        return FALSE;
index be1f87e..b640bde 100644 (file)
@@ -2683,16 +2683,17 @@ msgs_move_to_confirmation (GtkWindow *win,
 
 
 static void
-tranasfer_msgs_from_viewer_cb (const GObject *object, gpointer user_data)
+transfer_msgs_from_viewer_cb (const GObject *object, gpointer user_data)
 {
        ModestMsgViewWindow *self = NULL;
-       gboolean found = FALSE;
 
        g_return_if_fail (MODEST_IS_MSG_VIEW_WINDOW (object));
        self = MODEST_MSG_VIEW_WINDOW (object);
 
-       found = modest_msg_view_window_select_first_message (self);
-       g_return_if_fail (found);
+       /* If there are not more messages don't do anything. The
+          viewer will show the same message */
+       if (!modest_msg_view_window_select_first_message (self))
+           return;
 }
 
 void
@@ -2865,7 +2866,7 @@ modest_ui_actions_on_msg_view_window_move_to (GtkAction *action,
                                                         headers,
                                                         TNY_FOLDER (folder_store),
                                                         TRUE,
-                                                        tranasfer_msgs_from_viewer_cb,
+                                                        transfer_msgs_from_viewer_cb,
                                                         NULL);
                        g_object_unref (G_OBJECT (mail_op));
                }
index 0e559ff..f65cd0e 100644 (file)
@@ -287,8 +287,7 @@ modest_ui_dimming_rules_on_delete_msg (ModestWindow *win, gpointer user_data)
 {
        ModestDimmingRule *rule = NULL;
        gboolean dimmed = FALSE;
-       
-       g_return_val_if_fail (MODEST_IS_MAIN_WINDOW (win), FALSE);
+
        g_return_val_if_fail (MODEST_IS_DIMMING_RULE (user_data), FALSE);
        rule = MODEST_DIMMING_RULE (user_data);