diff options
author | Michael Zucci <zucchi@src.gnome.org> | 2001-10-17 03:13:31 +0800 |
---|---|---|
committer | Michael Zucci <zucchi@src.gnome.org> | 2001-10-17 03:13:31 +0800 |
commit | 8c85ed61ba64bd548460543dd87445b9a21dbf6a (patch) | |
tree | 76d2bc77eb83263b4d5b4122bf47127a1666214b /mail/mail-mt.h | |
parent | e1d0f3dc45692a04dbd93c7ef82c24af74e05f25 (diff) | |
download | gsoc2013-evolution-8c85ed61ba64bd548460543dd87445b9a21dbf6a.tar.gz gsoc2013-evolution-8c85ed61ba64bd548460543dd87445b9a21dbf6a.tar.zst gsoc2013-evolution-8c85ed61ba64bd548460543dd87445b9a21dbf6a.zip |
Added an async_event handler to store_info. (mail_note_store): Setup async
* mail-folder-cache.c: Added an async_event handler to store_info.
(mail_note_store): Setup async event handler here.
(store_finalised): Flush out async events here.
(folder_changed): Use async event handler to emit event.
(mail_note_folder): Chagned, do most of the work in the calling
context, only do the corba stuff in main.
(store_folder_subscribed): Use async event, and do more work locally.
(store_folder_unsubscribed): Same.
(store_folder_deleted): Call store_folder_unsubscribed if we have
to do any work.
(store_folder_created): Call store_folder_subscribed if we have to
do any work.
(store_folder_unsubscribed): Ref store while busy.
(real_folder_deleted): And unref here.
(store_folder_subscribed): Reg store while busy.
(real_folder_created): Unref here.
(mail_note_folder): Ref folder while busy.
(real_note_folder): And unref here.
(mail_note_folder): Hook onto folder_deleted event.
(folder_deleted): Just mark this folder as no longer available.
* mail-session.c (register_timeout): Use mail_call_main instead of
proxy_event.
(remove_timeout): Same here.
* folder-browser.c (folder_changed): use the new mail_async_event
stuff.
(folder_changed_main): Remove old async event handling stuff.
(FOLDER_BROWSER_LOCK/UNLOCK): Removed.
(FolderBrowserPrivate): Removed too, sigh.
* mail-mt.c (mail_async_event_new, mail_async_event_emit,
mail_async_event_destroy): New functions to handle async events.
(mail_proxy_event, mail_proxy_event_id): Removed old functions for
async events.
(do_call): Add suport for MAIL_CALL_p_pp.
(mail_msg_free): Use mail_async_event instead of proxy_event.
* message-list.c (message_changed): Promote the message_changed to
a folder_changed and use main_folder_changed to process it.
(main_message_changed): Remove.d
(message_list_init): Setup async event handler.
(message_list_destroy): Remove async handler.
(folder_changed): Use async hanler to emit event in main loop.
(message_changed): Same.
svn path=/trunk/; revision=13698
Diffstat (limited to 'mail/mail-mt.h')
-rw-r--r-- | mail/mail-mt.h | 18 |
1 files changed, 15 insertions, 3 deletions
diff --git a/mail/mail-mt.h b/mail/mail-mt.h index 057de1ddb0..e3aebab7c5 100644 --- a/mail/mail-mt.h +++ b/mail/mail-mt.h @@ -68,14 +68,23 @@ char *mail_get_password (CamelService *service, const char *prompt, */ gboolean mail_user_message (const char *type, const char *prompt, gboolean allow_cancel); +/* asynchronous event proxies */ +typedef struct _MailAsyncEvent { + GMutex *lock; + GSList *tasks; +} MailAsyncEvent; + +/* create a new async event handler */ +MailAsyncEvent *mail_async_event_new(void); /* forward a camel event (or other call) to the gui thread */ -int mail_proxy_event(CamelObjectEventHookFunc func, CamelObject *o, void *event_data, void *data); -/* in main (only), get the current event id */ -int mail_proxy_event_id(void); +int mail_async_event_emit(MailAsyncEvent *ea, CamelObjectEventHookFunc func, CamelObject *o, void *event_data, void *data); +/* wait for all outstanding async events to complete */ +void mail_async_event_destroy(MailAsyncEvent *ea); /* Call a function in the gui thread, wait for it to return, type is the marshaller to use */ typedef enum { MAIL_CALL_p_p, + MAIL_CALL_p_pp, MAIL_CALL_p_ppp, MAIL_CALL_p_pppp, MAIL_CALL_p_ppippp, @@ -98,5 +107,8 @@ extern EThread *mail_thread_queued_slow; /* for operations that can (or should) /* The main thread. */ extern pthread_t mail_gui_thread; +/* A generic proxy event for anything that can be proxied during the life of the mailer (almost nothing) */ +/* Note that almost all objects care about the lifecycle of their events, so this cannot be used */ +extern MailAsyncEvent *mail_async_event; #endif /* ! _MAIL_MT */ |