TnyStatus *status,
gpointer user_data);
-static void modest_mail_operation_notify_end (ModestMailOperation *self);
+static void modest_mail_operation_notify_end (ModestMailOperation *self,
+ gboolean need_lock);
static gboolean did_a_cancel = FALSE;
/* This emits progress-changed on which the mail operation queue is
* listening, so the mail operation is correctly removed from the
* queue without further explicit calls. */
- modest_mail_operation_notify_end (self);
+ modest_mail_operation_notify_end (self, FALSE);
return TRUE;
}
/* TODO: do this in the handler of the "msg-sent"
signal.Notify about operation end */
- modest_mail_operation_notify_end (self);
+ modest_mail_operation_notify_end (self, FALSE);
}
void
if (folder)
g_object_unref (G_OBJECT(folder));
- modest_mail_operation_notify_end (self);
+ modest_mail_operation_notify_end (self, FALSE);
}
typedef struct
static gboolean
idle_notify_update_account_queue (gpointer data)
{
- gdk_threads_enter ();
-
ModestMailOperation *mail_op = MODEST_MAIL_OPERATION (data);
ModestMailOperationPrivate *priv = NULL;
priv = MODEST_MAIL_OPERATION_GET_PRIVATE(mail_op);
-
- modest_mail_operation_notify_end (mail_op);
- g_object_unref (mail_op);
- gdk_threads_leave ();
+ /* Do not need to block, the notify end will do it for us */
+ modest_mail_operation_notify_end (mail_op, TRUE);
+ g_object_unref (mail_op);
return FALSE;
}
priv->status = MODEST_MAIL_OPERATION_STATUS_FAILED;
if (callback)
callback (self, 0, user_data);
- modest_mail_operation_notify_end (self);
+ modest_mail_operation_notify_end (self, FALSE);
return FALSE;
}
}
/* Notify about operation end */
- modest_mail_operation_notify_end (self);
+ modest_mail_operation_notify_end (self, FALSE);
return new_folder;
}
end:
/* Notify about operation end */
- modest_mail_operation_notify_end (self);
+ modest_mail_operation_notify_end (self, FALSE);
}
static void
g_object_unref (new_folder);
/* Notify about operation end */
- modest_mail_operation_notify_end (self);
+ modest_mail_operation_notify_end (self, TRUE);
}
void
_("mail_in_ui_folder_move_target_error"));
/* Notify the queue */
- modest_mail_operation_notify_end (self);
+ modest_mail_operation_notify_end (self, FALSE);
} else if (parent_rules & MODEST_FOLDER_RULES_FOLDER_NON_WRITEABLE) {
/* Set status failed and set an error */
priv->status = MODEST_MAIL_OPERATION_STATUS_FAILED;
_("FIXME: parent folder does not accept new folders"));
/* Notify the queue */
- modest_mail_operation_notify_end (self);
+ modest_mail_operation_notify_end (self, FALSE);
} else {
/* Pick references for async calls */
g_object_ref (folder);
_("FIXME: unable to rename"));
/* Notify about operation end */
- modest_mail_operation_notify_end (self);
+ modest_mail_operation_notify_end (self, FALSE);
} else {
/* Rename. Camel handles folder subscription/unsubscription */
TnyFolderStore *into;
_("Error trying to get a message. No folder found for header"));
/* Notify the queue */
- modest_mail_operation_notify_end (self);
+ modest_mail_operation_notify_end (self, FALSE);
}
}
g_slice_free (GetMsgAsyncHelper, helper);
/* Notify about operation end */
- modest_mail_operation_notify_end (self);
+ modest_mail_operation_notify_end (self, TRUE);
}
static void
static gboolean
notify_get_msgs_full (gpointer data)
{
- gdk_threads_enter ();
-
NotifyGetMsgsInfo *info;
info = (NotifyGetMsgsInfo *) data;
g_slice_free (NotifyGetMsgsInfo, info);
- gdk_threads_leave ();
-
return FALSE;
}
static gboolean
get_msgs_full_destroyer (gpointer data)
{
- gdk_threads_enter ();
-
GetFullMsgsInfo *info;
info = (GetFullMsgsInfo *) data;
- if (info->notify)
+ if (info->notify) {
+ gdk_threads_enter ();
info->notify (info->user_data);
+ gdk_threads_leave ();
+ }
/* free */
g_object_unref (info->headers);
g_slice_free (GetFullMsgsInfo, info);
- gdk_threads_leave ();
-
return FALSE;
}
MODEST_MAIL_OPERATION_ERROR_MESSAGE_SIZE_LIMIT,
_("emev_ni_ui_imap_msg_size_exceed_error"));
/* Remove from queue and free resources */
- modest_mail_operation_notify_end (self);
+ modest_mail_operation_notify_end (self, FALSE);
if (notify)
notify (user_data);
}
g_object_unref (G_OBJECT (folder));
/* Notify about operation end */
- modest_mail_operation_notify_end (self);
+ modest_mail_operation_notify_end (self, FALSE);
}
static void
g_object_unref (folder);
/* Notify about operation end */
- modest_mail_operation_notify_end (self);
+ modest_mail_operation_notify_end (self, TRUE);
}
void
MODEST_MAIL_OPERATION_ERROR_FOLDER_RULES,
_("FIXME: folder does not accept msgs"));
/* Notify the queue */
- modest_mail_operation_notify_end (self);
+ modest_mail_operation_notify_end (self, FALSE);
return;
}
out:
/* Call user defined callback, if it exists */
if (helper->user_callback) {
-/* gdk_threads_enter (); */
+ gdk_threads_enter ();
helper->user_callback (priv->source, folder, helper->user_data);
-/* gdk_threads_leave (); */
+ gdk_threads_leave ();
}
/* Free */
g_object_unref (folder);
/* Notify about operation end */
- modest_mail_operation_notify_end (self);
+ modest_mail_operation_notify_end (self, TRUE);
}
static void
* callback).
*/
static void
-modest_mail_operation_notify_end (ModestMailOperation *self)
+modest_mail_operation_notify_end (ModestMailOperation *self,
+ gboolean need_lock)
{
ModestMailOperationState *state;
ModestMailOperationPrivate *priv = NULL;
/* Notify the observers about the mail opertation end */
state = modest_mail_operation_clone_state (self);
+ if (need_lock)
+ gdk_threads_enter ();
g_signal_emit (G_OBJECT (self), signals[PROGRESS_CHANGED_SIGNAL], 0, state, NULL);
+ if (need_lock)
+ gdk_threads_leave ();
g_slice_free (ModestMailOperationState, state);
}