Mercurial > ~mikael > mcabber > hg
comparison mcabber/mcabber/hooks.h @ 1795:47699a09ceb3
Rework the hook system
This hook system implementation should be more efficient and a little
more flexible.
author | Mikael Berthe <mikael@lilotux.net> |
---|---|
date | Sat, 20 Mar 2010 14:38:17 +0100 |
parents | 250ad919f03f |
children | 5e2db25fdb17 |
comparison
equal
deleted
inserted
replaced
1794:58d1390f28ca | 1795:47699a09ceb3 |
---|---|
11 | 11 |
12 #include <mcabber/config.h> | 12 #include <mcabber/config.h> |
13 #ifdef MODULES_ENABLE | 13 #ifdef MODULES_ENABLE |
14 #include <glib.h> | 14 #include <glib.h> |
15 | 15 |
16 #define HOOK_MESSAGE_IN ( 0x00000001 ) | 16 // Core hooks |
17 #define HOOK_MESSAGE_OUT ( 0x00000002 ) | 17 #define HOOK_MESSAGE_IN "hook-message-in" |
18 #define HOOK_STATUS_CHANGE ( 0x00000004 ) | 18 #define HOOK_MESSAGE_OUT "hook-message-out" |
19 #define HOOK_MY_STATUS_CHANGE ( 0x00000008 ) | 19 #define HOOK_STATUS_CHANGE "hook-status-change" |
20 #define HOOK_POST_CONNECT ( 0x00000010 ) | 20 #define HOOK_MY_STATUS_CHANGE "hook-my-status-change" |
21 #define HOOK_PRE_DISCONNECT ( 0x00000020 ) | 21 #define HOOK_POST_CONNECT "hook-post-connect" |
22 #define HOOK_INTERNAL ( HOOK_POST_CONNECT | HOOK_PRE_DISCONNECT ) | 22 #define HOOK_PRE_DISCONNECT "hook-pre-disconnect" |
23 | |
24 typedef enum { | |
25 HOOK_HANDLER_RESULT_ALLOW_MORE_HOOKS = 0, | |
26 HOOK_HANDLER_RESULT_NO_MORE_HOOK, | |
27 HOOK_HANDLER_RESULT_NO_MORE_HOOK_DROP_DATA, | |
28 } hk_handler_result; | |
23 | 29 |
24 typedef struct { | 30 typedef struct { |
25 const char *name; | 31 const char *name; |
26 const char *value; | 32 const char *value; |
27 } hk_arg_t; | 33 } hk_arg_t; |
28 | 34 |
29 typedef void (*hk_handler_t) (guint32 flags, hk_arg_t *args, gpointer userdata); | 35 typedef guint (*hk_handler_t) (const gchar *hookname, hk_arg_t *args, |
36 gpointer userdata); | |
30 | 37 |
31 void hk_add_handler(hk_handler_t handler, guint32 flags, gpointer userdata); | 38 guint hk_add_handler(hk_handler_t handler, const gchar *hookname, |
32 void hk_del_handler(hk_handler_t handler, gpointer userdata); | 39 gint priority, gpointer userdata); |
40 void hk_del_handler(const gchar *hookname, guint hid); | |
41 guint hk_run_handlers(const gchar *hookname, hk_arg_t *args); | |
33 #endif | 42 #endif |
34 | 43 |
35 void hk_message_in(const char *bjid, const char *resname, | 44 void hk_message_in(const char *bjid, const char *resname, |
36 time_t timestamp, const char *msg, LmMessageSubType type, | 45 time_t timestamp, const char *msg, LmMessageSubType type, |
37 guint encrypted); | 46 guint encrypted); |