* Review 'move to' callback from viewer window with pop
authorJavier Fernandez Garcia-Boente <jfernandez@igalia.com>
Thu, 28 Jun 2007 23:06:52 +0000 (23:06 +0000)
committerJavier Fernandez Garcia-Boente <jfernandez@igalia.com>
Thu, 28 Jun 2007 23:06:52 +0000 (23:06 +0000)
accounts.
* Fixes: NB#61929

pmo-trunk-r2484

src/maemo/modest-msg-view-window.c
src/modest-mail-operation.c
src/modest-ui-actions.c

index b84a728..495deca 100644 (file)
@@ -651,6 +651,7 @@ modest_msg_view_window_get_header (ModestMsgViewWindow *self)
        ModestMsgViewWindowPrivate *priv= NULL; 
        TnyMsg *msg = NULL;
        TnyHeader *header = NULL;
+       GtkTreePath *path = NULL;
        GtkTreeIter iter;
 
        g_return_val_if_fail (MODEST_IS_MSG_VIEW_WINDOW (self), NULL);
@@ -665,9 +666,11 @@ modest_msg_view_window_get_header (ModestMsgViewWindow *self)
        }
 
        /* Get current message iter */
+       path = gtk_tree_row_reference_get_path (priv->row_reference);
+       g_return_val_if_fail (path != NULL, NULL);
        gtk_tree_model_get_iter (priv->header_model, 
                                 &iter, 
-                                gtk_tree_row_reference_get_path (priv->row_reference));
+                                path);
 
        /* Get current message header */
        gtk_tree_model_get (priv->header_model, &iter, 
@@ -929,8 +932,7 @@ modest_msg_view_window_last_message_selected (ModestMsgViewWindow *window)
 
        if (priv->header_model) {
                path = gtk_tree_row_reference_get_path (priv->row_reference);
-               if (!path)
-                       return TRUE;
+               if (path == NULL) return FALSE;
                while (!has_next) {
                        TnyHeader *header;
                        gtk_tree_path_next (path);
@@ -1021,15 +1023,19 @@ modest_msg_view_window_select_next_message (ModestMsgViewWindow *window)
        TnyHeaderFlags flags;
        ModestMailOperation *mail_op = NULL;
        ModestMsgViewWindowPrivate *priv;
+       GtkTreePath *path= NULL;
        GtkTreeIter tmp_iter;
 
        g_return_val_if_fail (MODEST_IS_MSG_VIEW_WINDOW (window), FALSE);
        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;
+
                gtk_tree_model_get_iter (priv->header_model,
                                         &tmp_iter,
-                                        gtk_tree_row_reference_get_path (priv->row_reference));
+                                        path);
                while (gtk_tree_model_iter_next (priv->header_model, &tmp_iter)) {
                        TnyHeader *header;
                        GtkTreePath *path;
@@ -1265,7 +1271,10 @@ modest_msg_view_window_update_priority (ModestMsgViewWindow *window)
        if (priv->header_model) {
                TnyHeader *header;
                GtkTreeIter iter;
+               GtkTreePath *path = NULL;
 
+               path = gtk_tree_row_reference_get_path (priv->row_reference);
+               g_return_if_fail (path != NULL);
                gtk_tree_model_get_iter (priv->header_model, 
                                         &iter, 
                                         gtk_tree_row_reference_get_path (priv->row_reference));
index 02d635b..a566f0f 100644 (file)
@@ -2016,6 +2016,9 @@ transfer_msgs_cb (TnyFolder *folder, gboolean cancelled, GError **err, gpointer
                priv->status = MODEST_MAIL_OPERATION_STATUS_SUCCESS;
        }
 
+       /* Notify about operation end */
+       modest_mail_operation_notify_end (self, TRUE);
+
        /* If user defined callback function was defined, call it */
        if (helper->user_callback) {
                gdk_threads_enter ();
@@ -2030,8 +2033,6 @@ transfer_msgs_cb (TnyFolder *folder, gboolean cancelled, GError **err, gpointer
        g_slice_free   (XFerMsgAsyncHelper, helper);
        g_object_unref (folder);
 
-       /* Notify about operation end */
-       modest_mail_operation_notify_end (self, TRUE);
 }
 
 void
index 19030e7..5d08f7f 100644 (file)
@@ -2853,14 +2853,21 @@ static void
 transfer_msgs_from_viewer_cb (const GObject *object, gpointer user_data)
 {
        ModestMsgViewWindow *self = NULL;
+       gboolean last, first;
 
        g_return_if_fail (MODEST_IS_MSG_VIEW_WINDOW (object));
        self = MODEST_MSG_VIEW_WINDOW (object);
-
-       /* 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;
+       
+       last = modest_msg_view_window_last_message_selected (self);
+       first = modest_msg_view_window_first_message_selected (self);   
+       if (last & first) {
+               /* No more messages to view, so close this window */
+               gboolean ret_value;
+               g_signal_emit_by_name (G_OBJECT (self), "delete-event", NULL, &ret_value);
+       } else if (last)
+               modest_msg_view_window_select_previous_message (self);
+       else 
+               modest_msg_view_window_select_next_message (self);
 }
 
 void