summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorTimo Sirainen <cras@irssi.org>2001-01-04 09:45:46 +0000
committercras <cras@dbcabf3a-b0e7-0310-adc4-f8d773084564>2001-01-04 09:45:46 +0000
commitfe8710ac41feb61339cce1a3e44f875c2aaa9d18 (patch)
treecdb0a237b1b591df6be5a45514bc198f269fa897 /src
parent69f3b3f1592800dc909c010969ada6ea6cb5640a (diff)
downloadirssi-fe8710ac41feb61339cce1a3e44f875c2aaa9d18.zip
Unbinding commands didn't work properly
git-svn-id: http://svn.irssi.org/repos/irssi/trunk@1058 dbcabf3a-b0e7-0310-adc4-f8d773084564
Diffstat (limited to 'src')
-rw-r--r--src/perl/common/Core.xs13
-rw-r--r--src/perl/perl-signals.c24
-rw-r--r--src/perl/perl-signals.h4
3 files changed, 29 insertions, 12 deletions
diff --git a/src/perl/common/Core.xs b/src/perl/common/Core.xs
index 7229cd4f..52b3a0b7 100644
--- a/src/perl/common/Core.xs
+++ b/src/perl/common/Core.xs
@@ -323,21 +323,12 @@ command_bind(cmd, category, func)
char *category
char *func
CODE:
- char *signal;
-
if (*category == '\0') category = "Perl scripts' commands";
- command_bind(cmd, category, NULL);
- signal = g_strconcat("command ", cmd, NULL);
- perl_signal_add(signal, func);
- g_free(signal);
+ perl_command_bind(cmd, category, func);
void
command_unbind(cmd, func)
char *cmd
char *func
CODE:
- char *signal;
-
- signal = g_strconcat("command ", cmd, NULL);
- perl_signal_remove(signal, func);
- g_free(signal);
+ perl_command_unbind(cmd, func);
diff --git a/src/perl/perl-signals.c b/src/perl/perl-signals.c
index 3734873f..ae857aea 100644
--- a/src/perl/perl-signals.c
+++ b/src/perl/perl-signals.c
@@ -5,6 +5,7 @@
#include "servers.h"
#include "perl-common.h"
+#include "perl-signals.h"
typedef struct {
int signal_id;
@@ -201,7 +202,7 @@ void perl_signal_add_to(const char *signal, const char *func, int priority)
static void perl_signal_destroy(PERL_SIGNAL_REC *rec)
{
if (strncmp(rec->signal, "command ", 8) == 0)
- command_unbind(rec->signal+8, NULL);
+ command_unbind(rec->signal+8, sig_func_default);
g_free(rec->signal);
g_free(rec->func);
@@ -260,6 +261,27 @@ void perl_signal_remove(const char *signal, const char *func)
g_free(fullfunc);
}
+void perl_command_bind(const char *cmd, const char *category, const char *func)
+{
+ char *signal;
+
+ command_bind(cmd, category, sig_func_default);
+
+ signal = g_strconcat("command ", cmd, NULL);
+ perl_signal_add(signal, func);
+ g_free(signal);
+}
+
+void perl_command_unbind(const char *cmd, const char *func)
+{
+ char *signal;
+
+ /* perl_signal_remove() calls command_unbind() */
+ signal = g_strconcat("command ", cmd, NULL);
+ perl_signal_remove(signal, func);
+ g_free(signal);
+}
+
static int signal_destroy_hash(void *key, GSList **list, const char *package)
{
GSList *tmp, *next;
diff --git a/src/perl/perl-signals.h b/src/perl/perl-signals.h
index ddebfeec..3f9e5ff3 100644
--- a/src/perl/perl-signals.h
+++ b/src/perl/perl-signals.h
@@ -11,6 +11,10 @@ void perl_signal_add_to(const char *signal, const char *func, int priority);
void perl_signal_remove(const char *signal, const char *func);
+void perl_command_bind(const char *cmd, const char *category,
+ const char *func);
+void perl_command_unbind(const char *cmd, const char *func);
+
/* destroy all signals used by package */
void perl_signals_package_destroy(const char *package);