Mercurial > ~mikael > mcabber > hg
comparison mcabber/mcabber/hooks.c @ 1784:250ad919f03f
Small code cleanup in hooks.[ch]
author | Mikael Berthe <mikael@lilotux.net> |
---|---|
date | Sun, 14 Mar 2010 14:07:25 +0100 |
parents | af3de54ef986 |
children | 5c043358ded0 |
comparison
equal
deleted
inserted
replaced
1783:af3de54ef986 | 1784:250ad919f03f |
---|---|
45 gpointer userdata; | 45 gpointer userdata; |
46 } hook_list_data_t; | 46 } hook_list_data_t; |
47 | 47 |
48 static GSList *hk_handler_queue = NULL; | 48 static GSList *hk_handler_queue = NULL; |
49 | 49 |
50 void hk_add_handler (hk_handler_t handler, guint32 flags, gpointer userdata) | 50 void hk_add_handler(hk_handler_t handler, guint32 flags, gpointer userdata) |
51 { | 51 { |
52 hook_list_data_t *h = g_new (hook_list_data_t, 1); | 52 hook_list_data_t *h = g_new(hook_list_data_t, 1); |
53 h->handler = handler; | 53 h->handler = handler; |
54 h->flags = flags; | 54 h->flags = flags; |
55 h->userdata = userdata; | 55 h->userdata = userdata; |
56 hk_handler_queue = g_slist_append (hk_handler_queue, h); | 56 hk_handler_queue = g_slist_append(hk_handler_queue, h); |
57 } | 57 } |
58 | 58 |
59 static gint hk_queue_search_cb (hook_list_data_t *a, hook_list_data_t *b) | 59 static gint hk_queue_search_cb(hook_list_data_t *a, hook_list_data_t *b) |
60 { | 60 { |
61 if (a->handler == b->handler && a->userdata == b->userdata) | 61 if (a->handler == b->handler && a->userdata == b->userdata) |
62 return 0; | 62 return 0; |
63 else | 63 else |
64 return 1; | 64 return 1; |
65 } | 65 } |
66 | 66 |
67 void hk_del_handler (hk_handler_t handler, gpointer userdata) | 67 void hk_del_handler(hk_handler_t handler, gpointer userdata) |
68 { | 68 { |
69 hook_list_data_t h = { handler, 0, userdata }; | 69 hook_list_data_t h = { handler, 0, userdata }; |
70 GSList *el = g_slist_find_custom (hk_handler_queue, &h, (GCompareFunc) hk_queue_search_cb); | 70 GSList *el = g_slist_find_custom(hk_handler_queue, &h, |
71 (GCompareFunc) hk_queue_search_cb); | |
71 if (el) { | 72 if (el) { |
72 g_free (el->data); | 73 g_free (el->data); |
73 hk_handler_queue = g_slist_delete_link (hk_handler_queue, el); | 74 hk_handler_queue = g_slist_delete_link(hk_handler_queue, el); |
74 } | 75 } |
75 } | 76 } |
76 #endif | 77 #endif |
77 | 78 |
78 static char *extcmd; | 79 static char *extcmd; |
234 | 235 |
235 #ifdef MODULES_ENABLE | 236 #ifdef MODULES_ENABLE |
236 { | 237 { |
237 GSList *h = hk_handler_queue; | 238 GSList *h = hk_handler_queue; |
238 if (h) { | 239 if (h) { |
239 #if 0 | |
240 hk_arg_t *args = g_new (hk_arg_t, 5); | |
241 args[0].name = "hook"; | |
242 args[0].value = "hook-message-in"; | |
243 args[1].name = "jid"; | |
244 args[1].value = bjid; | |
245 args[2].name = "message"; | |
246 args[2].value = wmsg; | |
247 args[3].name = "groupchat"; | |
248 args[3].value = is_groupchat ? "true" : "false"; | |
249 args[4].name = NULL; | |
250 args[4].value = NULL; | |
251 #else | |
252 // We can use a const array for keys/static values, so modules | 240 // We can use a const array for keys/static values, so modules |
253 // can do fast known to them args check by just comparing pointers... | 241 // can do fast known to them args check by just comparing pointers... |
254 hk_arg_t args[] = { | 242 hk_arg_t args[] = { |
255 { "hook", "hook-message-in" }, | 243 { "hook", "hook-message-in" }, |
256 { "jid", bjid }, | 244 { "jid", bjid }, |
257 { "message", wmsg }, | 245 { "message", wmsg }, |
258 { "groupchat", is_groupchat ? "true" : "false" }, | 246 { "groupchat", is_groupchat ? "true" : "false" }, |
259 { NULL, NULL }, | 247 { NULL, NULL }, |
260 }; | 248 }; |
261 #endif | |
262 while (h) { | 249 while (h) { |
263 hook_list_data_t *data = h->data; | 250 hook_list_data_t *data = h->data; |
264 if (data->flags & HOOK_MESSAGE_IN) | 251 if (data->flags & HOOK_MESSAGE_IN) |
265 (data->handler) (HOOK_MESSAGE_IN, args, data->userdata); | 252 (data->handler) (HOOK_MESSAGE_IN, args, data->userdata); |
266 h = g_slist_next (h); | 253 h = g_slist_next (h); |