mirror of
https://github.com/weechat/weechat.git
synced 2026-07-03 16:23:14 +02:00
Added event handler to plugin API
This commit is contained in:
@@ -320,6 +320,35 @@ weechat_perl_keyboard_handler (t_weechat_plugin *plugin,
|
||||
return PLUGIN_RC_KO;
|
||||
}
|
||||
|
||||
/*
|
||||
* weechat_perl_event_handler: general event handler for Perl
|
||||
*/
|
||||
|
||||
int
|
||||
weechat_perl_event_handler (t_weechat_plugin *plugin,
|
||||
int argc, char **argv,
|
||||
char *handler_args, void *handler_pointer)
|
||||
{
|
||||
int *r, ret;
|
||||
|
||||
if (argc >= 1)
|
||||
{
|
||||
r = (int *) weechat_perl_exec (plugin, (t_plugin_script *)handler_pointer,
|
||||
SCRIPT_EXEC_INT,
|
||||
handler_args, argv[0], NULL, NULL);
|
||||
if (r == NULL)
|
||||
ret = PLUGIN_RC_KO;
|
||||
else
|
||||
{
|
||||
ret = *r;
|
||||
free (r);
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
else
|
||||
return PLUGIN_RC_KO;
|
||||
}
|
||||
|
||||
/*
|
||||
* weechat_perl_modifier: general modifier for Perl
|
||||
*/
|
||||
@@ -835,6 +864,45 @@ static XS (XS_weechat_add_keyboard_handler)
|
||||
XSRETURN_NO;
|
||||
}
|
||||
|
||||
/*
|
||||
* weechat::add_event_handler: add an event handler
|
||||
*/
|
||||
|
||||
static XS (XS_weechat_add_event_handler)
|
||||
{
|
||||
char *event, *function;
|
||||
dXSARGS;
|
||||
|
||||
/* make gcc happy */
|
||||
(void) cv;
|
||||
|
||||
if (!perl_current_script)
|
||||
{
|
||||
perl_plugin->print_server (perl_plugin,
|
||||
"Perl error: unable to add event handler, "
|
||||
"script not initialized");
|
||||
XSRETURN_NO;
|
||||
}
|
||||
|
||||
if (items < 2)
|
||||
{
|
||||
perl_plugin->print_server (perl_plugin,
|
||||
"Perl error: wrong parameters for "
|
||||
"\"add_event_handler\" function");
|
||||
XSRETURN_NO;
|
||||
}
|
||||
|
||||
event = SvPV (ST (0), PL_na);
|
||||
function = SvPV (ST (1), PL_na);
|
||||
|
||||
if (perl_plugin->event_handler_add (perl_plugin, event,
|
||||
weechat_perl_event_handler, function,
|
||||
(void *)perl_current_script))
|
||||
XSRETURN_YES;
|
||||
|
||||
XSRETURN_NO;
|
||||
}
|
||||
|
||||
/*
|
||||
* weechat::remove_handler: remove a message/command handler
|
||||
*/
|
||||
@@ -944,6 +1012,42 @@ static XS (XS_weechat_remove_keyboard_handler)
|
||||
XSRETURN_YES;
|
||||
}
|
||||
|
||||
/*
|
||||
* weechat::remove_event_handler: remove an event handler
|
||||
*/
|
||||
|
||||
static XS (XS_weechat_remove_event_handler)
|
||||
{
|
||||
char *function;
|
||||
dXSARGS;
|
||||
|
||||
/* make gcc happy */
|
||||
(void) cv;
|
||||
|
||||
if (!perl_current_script)
|
||||
{
|
||||
perl_plugin->print_server (perl_plugin,
|
||||
"Perl error: unable to remove event handler, "
|
||||
"script not initialized");
|
||||
XSRETURN_NO;
|
||||
}
|
||||
|
||||
if (items < 1)
|
||||
{
|
||||
perl_plugin->print_server (perl_plugin,
|
||||
"Perl error: wrong parameters for "
|
||||
"\"remove_event_handler\" function");
|
||||
XSRETURN_NO;
|
||||
}
|
||||
|
||||
function = SvPV (ST (0), PL_na);
|
||||
|
||||
weechat_script_remove_event_handler (perl_plugin, perl_current_script,
|
||||
function);
|
||||
|
||||
XSRETURN_YES;
|
||||
}
|
||||
|
||||
/*
|
||||
* weechat::add_modifier: add a modifier
|
||||
*/
|
||||
@@ -1798,9 +1902,11 @@ weechat_perl_xs_init (pTHX)
|
||||
newXS ("weechat::add_command_handler", XS_weechat_add_command_handler, "weechat");
|
||||
newXS ("weechat::add_timer_handler", XS_weechat_add_timer_handler, "weechat");
|
||||
newXS ("weechat::add_keyboard_handler", XS_weechat_add_keyboard_handler, "weechat");
|
||||
newXS ("weechat::add_event_handler", XS_weechat_add_event_handler, "weechat");
|
||||
newXS ("weechat::remove_handler", XS_weechat_remove_handler, "weechat");
|
||||
newXS ("weechat::remove_timer_handler", XS_weechat_remove_timer_handler, "weechat");
|
||||
newXS ("weechat::remove_keyboard_handler", XS_weechat_remove_keyboard_handler, "weechat");
|
||||
newXS ("weechat::remove_event_handler", XS_weechat_remove_event_handler, "weechat");
|
||||
newXS ("weechat::add_modifier", XS_weechat_add_modifier, "weechat");
|
||||
newXS ("weechat::remove_modifier", XS_weechat_remove_modifier, "weechat");
|
||||
newXS ("weechat::get_info", XS_weechat_get_info, "weechat");
|
||||
|
||||
Reference in New Issue
Block a user