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,