Mercurial > ~mikael > mcabber > hg
diff mcabber/src/hooks.c @ 1623:b008ac166b91
Flags for hook handlers
author | Myhailo Danylenko <isbear@ukrpost.net> |
---|---|
date | Thu, 15 Oct 2009 12:08:53 +0300 |
parents | f9bf561e54d0 |
children | cd67b29e04e3 |
line wrap: on
line diff
--- a/mcabber/src/hooks.c Thu Oct 15 12:57:36 2009 +0300 +++ b/mcabber/src/hooks.c Thu Oct 15 12:08:53 2009 +0300 @@ -41,15 +41,17 @@ typedef struct { hk_handler_t handler; + guint32 flags; gpointer userdata; } hook_list_data_t; static GSList *hk_handler_queue = NULL; -void hk_add_handler (hk_handler_t handler, gpointer userdata) +void hk_add_handler (hk_handler_t handler, guint32 flags, gpointer userdata) { hook_list_data_t *h = g_new (hook_list_data_t, 1); h->handler = handler; + h->flags = flags; h->userdata = userdata; hk_handler_queue = g_slist_append (hk_handler_queue, h); } @@ -64,7 +66,7 @@ void hk_del_handler (hk_handler_t handler, gpointer userdata) { - hook_list_data_t h = { handler, userdata }; + hook_list_data_t h = { handler, 0, userdata }; GSList *el = g_slist_find_custom (hk_handler_queue, &h, (GCompareFunc) hk_queue_search_cb); if (el) { g_free (el->data); @@ -275,7 +277,8 @@ #endif while (h) { hook_list_data_t *data = h->data; - (data->handler) (args, data->userdata); + if (data->flags & HOOK_MESSAGE_IN) + (data->handler) (HOOK_MESSAGE_IN, args, data->userdata); h = g_slist_next (h); } } @@ -373,7 +376,8 @@ }; while (h) { hook_list_data_t *data = h->data; - (data->handler) (args, data->userdata); + if (data->flags & HOOK_MESSAGE_OUT) + (data->handler) (HOOK_MESSAGE_OUT, args, data->userdata); h = g_slist_next (h); } } @@ -470,7 +474,8 @@ ns[0] = imstatus2char[status]; while (h) { hook_list_data_t *data = h->data; - (data->handler) (args, data->userdata); + if (data->flags & HOOK_STATUS_CHANGE) + (data->handler) (HOOK_STATUS_CHANGE, args, data->userdata); h = g_slist_next (h); } } @@ -502,7 +507,8 @@ ns[0] = imstatus2char[new_status]; while (h) { hook_list_data_t *data = h->data; - (data->handler) (args, data->userdata); + if (data->flags & HOOK_MY_STATUS_CHANGE) + (data->handler) (HOOK_MY_STATUS_CHANGE, args, data->userdata); h = g_slist_next (h); } } @@ -542,7 +548,8 @@ }; while (h) { hook_list_data_t *data = h->data; - (data->handler) (args, data->userdata); + if (data->flags & HOOK_INTERNAL) + (data->handler) (HOOK_INTERNAL, args, data->userdata); h = g_slist_next (h); } }