# HG changeset patch # User Mikael Berthe # Date 1301243325 -7200 # Node ID ad77110343d6ce15c2ff51ad21572790f0a22ee2 # Parent 0870005f7efc2cbf3b77550d3dd51f6510c905d4 Use a command ID with cmd_add/cmd_del (Myhailo Danylenko) Patch merged from isbear's mcabber-experimental repository. diff -r 0870005f7efc -r ad77110343d6 mcabber/mcabber/api.h --- a/mcabber/mcabber/api.h Sun Mar 27 13:35:08 2011 +0200 +++ b/mcabber/mcabber/api.h Sun Mar 27 18:28:45 2011 +0200 @@ -3,8 +3,8 @@ #include // For MCABBER_BRANCH -#define MCABBER_API_VERSION 18 -#define MCABBER_API_MIN 18 +#define MCABBER_API_VERSION 19 +#define MCABBER_API_MIN 19 extern const gchar *mcabber_branch; extern const guint mcabber_api_version; diff -r 0870005f7efc -r ad77110343d6 mcabber/mcabber/commands.c --- a/mcabber/mcabber/commands.c Sun Mar 27 13:35:08 2011 +0200 +++ b/mcabber/mcabber/commands.c Sun Mar 27 18:28:45 2011 +0200 @@ -103,27 +103,26 @@ #ifdef MODULES_ENABLE #include "modules.h" -gpointer cmd_del(const char *name) +gpointer cmd_del(gpointer id) { GSList *sl_cmd; - for (sl_cmd = Commands; sl_cmd; sl_cmd = sl_cmd->next) { - cmd *command = (cmd *) sl_cmd->data; - if (!strcmp (command->name, name)) { + for (sl_cmd = Commands; sl_cmd; sl_cmd = sl_cmd->next) + if (sl_cmd -> data == id) { + cmd *command = (cmd *) sl_cmd->data; gpointer userdata = command->userdata; Commands = g_slist_delete_link(Commands, sl_cmd); compl_del_category_word(COMPL_CMD, command->name); g_free(command); return userdata; } - } return NULL; } #endif // cmd_add() // Adds a command to the commands list and to the CMD completion list -void cmd_add(const char *name, const char *help, guint flags_row1, - guint flags_row2, void (*f)(char*), gpointer userdata) +gpointer cmd_add(const char *name, const char *help, guint flags_row1, + guint flags_row2, void (*f)(char*), gpointer userdata) { cmd *n_cmd = g_new0(cmd, 1); strncpy(n_cmd->name, name, 32-1); @@ -135,6 +134,7 @@ Commands = g_slist_prepend(Commands, n_cmd); // Add to completion CMD category compl_add_category_word(COMPL_CMD, name); + return n_cmd; } // cmd_init() diff -r 0870005f7efc -r ad77110343d6 mcabber/mcabber/commands.h --- a/mcabber/mcabber/commands.h Sun Mar 27 13:35:08 2011 +0200 +++ b/mcabber/mcabber/commands.h Sun Mar 27 18:28:45 2011 +0200 @@ -20,8 +20,9 @@ int process_command(const char *line, guint iscmd); char *expandalias(const char *line); #ifdef MODULES_ENABLE -gpointer cmd_del(const char *name); -void cmd_add(const char *name, const char *help, guint flags1, guint flags2, void (*f)(char*), gpointer userdata); +gpointer cmd_del(gpointer id); +gpointer cmd_add(const char *name, const char *help, guint flags1, guint flags2, + void (*f)(char*), gpointer userdata); #endif void cmd_room_whois(gpointer bud, const char *nick, guint interactive); diff -r 0870005f7efc -r ad77110343d6 mcabber/modules/beep/beep.c --- a/mcabber/modules/beep/beep.c Sun Mar 27 13:35:08 2011 +0200 +++ b/mcabber/modules/beep/beep.c Sun Mar 27 18:28:45 2011 +0200 @@ -46,8 +46,9 @@ .next = NULL, }; -static guint beep_cid = 0; /* Command completion category id */ -static guint beep_hid = 0; /* Hook handler id */ +static guint beep_cid = 0; /* Command completion category id */ +static gpointer beep_cmid = 0; /* Command id */ +static guint beep_hid = 0; /* Hook handler id */ /* Event handler */ static guint beep_hh(const gchar *hookname, hk_arg_t *args, gpointer userdata) @@ -94,7 +95,7 @@ compl_add_category_word(beep_cid, "disable"); } /* Add command */ - cmd_add("beep", "", beep_cid, 0, do_beep, NULL); + beep_cmid = cmd_add("beep", "", beep_cid, 0, do_beep, NULL); /* Add handler * We are only interested in incoming message events */ @@ -108,7 +109,7 @@ /* Unregister event handler */ hk_del_handler(HOOK_POST_MESSAGE_IN, beep_hid); /* Unregister command */ - cmd_del("beep"); + cmd_del(beep_cmid); /* Give back completion handle */ if (beep_cid) compl_del_category(beep_cid);