&(helper->sum_total_bytes), helper->total_bytes, TRUE);
}
+static void
+transfer_msgs_sync_folder_cb (TnyFolder *self,
+ gboolean cancelled,
+ GError *err,
+ gpointer user_data)
+{
+ XFerMsgsAsyncHelper *helper;
+ /* We don't care here about the results of the
+ synchronization */
+ helper = (XFerMsgsAsyncHelper *) user_data;
+
+ /* Notify about operation end */
+ modest_mail_operation_notify_end (helper->mail_op);
+
+ /* If user defined callback function was defined, call it */
+ if (helper->user_callback)
+ helper->user_callback (helper->mail_op, helper->user_data);
+
+ /* Free */
+ if (helper->more_msgs)
+ g_object_unref (helper->more_msgs);
+ if (helper->headers)
+ g_object_unref (helper->headers);
+ if (helper->dest_folder)
+ g_object_unref (helper->dest_folder);
+ if (helper->mail_op)
+ g_object_unref (helper->mail_op);
+ g_slice_free (XFerMsgsAsyncHelper, helper);
+}
static void
transfer_msgs_cb (TnyFolder *folder, gboolean cancelled, GError *err, gpointer user_data)
}
if (finished) {
-
- /* Update folder counts */
- tny_folder_poke_status (folder);
- tny_folder_poke_status (helper->dest_folder);
-
- /* Notify about operation end */
- modest_mail_operation_notify_end (self);
-
- /* If user defined callback function was defined, call it */
- if (helper->user_callback) {
- /* This is not a GDK lock because we are a Tinymail callback and
- * Tinymail already acquires the Gdk lock */
-
- /* no gdk_threads_enter (), CHECKED */
- helper->user_callback (self, helper->user_data);
- /* no gdk_threads_leave (), CHECKED */
- }
-
- /* Free */
- if (helper->more_msgs)
- g_object_unref (helper->more_msgs);
- if (helper->headers)
- g_object_unref (helper->headers);
- if (helper->dest_folder)
- g_object_unref (helper->dest_folder);
- if (helper->mail_op)
- g_object_unref (helper->mail_op);
- g_slice_free (XFerMsgsAsyncHelper, helper);
+ /* Synchronize the source folder contents. This should
+ be done by tinymail but the camel_folder_sync it's
+ actually disabled in transfer_msgs_thread_clean
+ because it's supposed to cause hangs */
+ tny_folder_sync_async (folder, helper->delete,
+ transfer_msgs_sync_folder_cb,
+ NULL, helper);
} else {
/* Transfer more messages */
tny_folder_transfer_msgs_async (folder,
/* Current folder was unselected */
if (priv->cur_folder_store) {
- g_signal_emit (G_OBJECT(tree_view), signals[FOLDER_SELECTION_CHANGED_SIGNAL], 0,
- priv->cur_folder_store, FALSE);
-
+ /* We must do this firstly because a libtinymail-camel
+ implementation detail. If we issue the signal
+ before doing the sync_async, then that signal could
+ cause (and it actually does it) a free of the
+ summary of the folder (because the main window will
+ clear the headers view */
if (TNY_IS_FOLDER(priv->cur_folder_store))
tny_folder_sync_async (TNY_FOLDER(priv->cur_folder_store),
FALSE, NULL, NULL, NULL);
- /* FALSE --> don't expunge the messages */
+ g_signal_emit (G_OBJECT(tree_view), signals[FOLDER_SELECTION_CHANGED_SIGNAL], 0,
+ priv->cur_folder_store, FALSE);
g_object_unref (priv->cur_folder_store);
priv->cur_folder_store = NULL;
}
if (priv->folder) {
- if (priv->status_timeout)
+ if (priv->status_timeout) {
g_source_remove (priv->status_timeout);
+ priv->status_timeout = 0;
+ }
g_mutex_lock (priv->observers_lock);
tny_folder_remove_observer (priv->folder, TNY_FOLDER_OBSERVER (self));
notify_filter_change_destroy (gpointer data)
{
NotifyFilterInfo *info = (NotifyFilterInfo *) data;
+ ModestHeaderViewPrivate *priv;
+
+ priv = MODEST_HEADER_VIEW_GET_PRIVATE (info->self);
+ priv->status_timeout = 0;
g_object_unref (info->self);
g_object_unref (info->folder);