Mercurial > ~mikael > mcabber > hg
diff 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 |
line wrap: on
line diff
--- a/mcabber/mcabber/hooks.h Mon Mar 15 17:58:32 2010 +0200 +++ b/mcabber/mcabber/hooks.h Sat Mar 20 14:38:17 2010 +0100 @@ -13,23 +13,32 @@ #ifdef MODULES_ENABLE #include <glib.h> -#define HOOK_MESSAGE_IN ( 0x00000001 ) -#define HOOK_MESSAGE_OUT ( 0x00000002 ) -#define HOOK_STATUS_CHANGE ( 0x00000004 ) -#define HOOK_MY_STATUS_CHANGE ( 0x00000008 ) -#define HOOK_POST_CONNECT ( 0x00000010 ) -#define HOOK_PRE_DISCONNECT ( 0x00000020 ) -#define HOOK_INTERNAL ( HOOK_POST_CONNECT | HOOK_PRE_DISCONNECT ) +// Core hooks +#define HOOK_MESSAGE_IN "hook-message-in" +#define HOOK_MESSAGE_OUT "hook-message-out" +#define HOOK_STATUS_CHANGE "hook-status-change" +#define HOOK_MY_STATUS_CHANGE "hook-my-status-change" +#define HOOK_POST_CONNECT "hook-post-connect" +#define HOOK_PRE_DISCONNECT "hook-pre-disconnect" + +typedef enum { + HOOK_HANDLER_RESULT_ALLOW_MORE_HOOKS = 0, + HOOK_HANDLER_RESULT_NO_MORE_HOOK, + HOOK_HANDLER_RESULT_NO_MORE_HOOK_DROP_DATA, +} hk_handler_result; typedef struct { const char *name; const char *value; } hk_arg_t; -typedef void (*hk_handler_t) (guint32 flags, hk_arg_t *args, gpointer userdata); +typedef guint (*hk_handler_t) (const gchar *hookname, hk_arg_t *args, + gpointer userdata); -void hk_add_handler(hk_handler_t handler, guint32 flags, gpointer userdata); -void hk_del_handler(hk_handler_t handler, gpointer userdata); +guint hk_add_handler(hk_handler_t handler, const gchar *hookname, + gint priority, gpointer userdata); +void hk_del_handler(const gchar *hookname, guint hid); +guint hk_run_handlers(const gchar *hookname, hk_arg_t *args); #endif void hk_message_in(const char *bjid, const char *resname,