gpointer arg3,
ModestMsgViewWindow *window)
{
- ModestMsgViewWindowPrivate *priv = NULL;
+ ModestMsgViewWindowPrivate *priv = NULL;
gboolean already_changed = FALSE;
priv = MODEST_MSG_VIEW_WINDOW_GET_PRIVATE(window);
/* If the current row was reordered select the proper next
valid row. The same if the next row reference changes */
- if (priv->row_reference &&
- gtk_tree_row_reference_valid (priv->row_reference)) {
- GtkTreePath *path;
- path = gtk_tree_row_reference_get_path (priv->row_reference);
- if (gtk_tree_path_compare (path, arg1) == 0) {
- if (priv->next_row_reference) {
- gtk_tree_row_reference_free (priv->next_row_reference);
- }
- priv->next_row_reference = gtk_tree_row_reference_copy (priv->row_reference);
- select_next_valid_row (header_model, &(priv->next_row_reference), FALSE, priv->is_outbox);
- already_changed = TRUE;
- }
- gtk_tree_path_free (path);
- }
- if (!already_changed &&
- priv->next_row_reference &&
+ if (!priv->row_reference ||
+ !gtk_tree_row_reference_valid (priv->row_reference))
+ return;
+
+ if (priv->next_row_reference &&
gtk_tree_row_reference_valid (priv->next_row_reference)) {
- GtkTreePath *path;
- path = gtk_tree_row_reference_get_path (priv->next_row_reference);
- if (gtk_tree_path_compare (path, arg1) == 0) {
- if (priv->next_row_reference) {
- gtk_tree_row_reference_free (priv->next_row_reference);
- }
+ GtkTreePath *cur, *next;
+ /* Check that the order is still the correct one */
+ cur = gtk_tree_row_reference_get_path (priv->row_reference);
+ next = gtk_tree_row_reference_get_path (priv->next_row_reference);
+ gtk_tree_path_next (cur);
+ if (gtk_tree_path_compare (cur, next) != 0) {
+ gtk_tree_row_reference_free (priv->next_row_reference);
priv->next_row_reference = gtk_tree_row_reference_copy (priv->row_reference);
select_next_valid_row (header_model, &(priv->next_row_reference), FALSE, priv->is_outbox);
+ already_changed = TRUE;
}
- gtk_tree_path_free (path);
+ gtk_tree_path_free (cur);
+ gtk_tree_path_free (next);
+ } else {
+ if (priv->next_row_reference)
+ gtk_tree_row_reference_free (priv->next_row_reference);
+ /* Update next row reference */
+ priv->next_row_reference = gtk_tree_row_reference_copy (priv->row_reference);
+ select_next_valid_row (header_model, &(priv->next_row_reference), FALSE, priv->is_outbox);
+ already_changed = TRUE;
}
+
check_dimming_rules_after_change (window);
}
}
/* Register the header - it'll be unregistered in the callback */
- modest_window_mgr_register_header (modest_runtime_get_window_mgr (), info->header, NULL);
+ if (info->header)
+ modest_window_mgr_register_header (modest_runtime_get_window_mgr (), info->header, NULL);
/* New mail operation */
mail_op = modest_mail_operation_new_with_error_handling (G_OBJECT(parent_window),
frees:
/* Frees. The row_reference will be freed by the view_msg_cb callback */
g_free (info->uid);
- g_object_unref (info->header);
+ if (info->header)
+ g_object_unref (info->header);
+ if (info->folder)
+ g_object_unref (info->folder);
g_slice_free (MsgReaderInfo, info);
}
MsgReaderInfo *info;
mgr = modest_runtime_get_window_mgr ();
- already_showing = modest_window_mgr_find_registered_header (mgr, header, &msg_window);
+ already_showing = header && modest_window_mgr_find_registered_header (mgr, header, &msg_window);
if (already_showing && (msg_window != MODEST_WINDOW (window))) {
gboolean retval;
if (msg_window)
return TRUE;
}
+ if (folder)
+ g_object_ref (folder);
+
+
/* Msg download completed */
if (!header || !(tny_header_get_flags (header) & TNY_HEADER_FLAG_CACHED)) {
/* Ask the user if he wants to download the message if
if (response == GTK_RESPONSE_CANCEL)
return FALSE;
- if (header)
+ if (header) {
+ if (folder) g_object_unref (folder);
folder = tny_header_get_folder (header);
- else
- g_object_ref (folder);
+ }
info = g_slice_new (MsgReaderInfo);
info->msg_uid = g_strdup (msg_uid);
if (header)
}
}
- if (header)
+ if (header) {
+ if (folder) g_object_unref (folder);
folder = tny_header_get_folder (header);
- else
- g_object_ref (folder);
+ }
account = tny_folder_get_account (folder);
info = g_slice_new (MsgReaderInfo);
info->msg_uid = g_strdup (msg_uid);