libpurple/plugins/perl/perl-handlers.c

Wed, 23 Apr 2008 03:06:49 +0000

author
Etan Reisner <deryni@pidgin.im>
date
Wed, 23 Apr 2008 03:06:49 +0000
changeset 22845
7ccb529edf3f
parent 19336
065a79d2d0e5
child 23182
e32645a28cad
permissions
-rw-r--r--

Add the recent perl callback changes to ChangeLog.API.
Add a Purple::timeout_remove function.
Change Purple::timeout_add to return a value usable in Purple::timeout_remove.

6520
5386692555c9 [gaim-migrate @ 7037]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1 #include "perl-common.h"
5386692555c9 [gaim-migrate @ 7037]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
2 #include "perl-handlers.h"
5386692555c9 [gaim-migrate @ 7037]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
3
5386692555c9 [gaim-migrate @ 7037]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
4 #include "debug.h"
6549
8e6ba2a45698 [gaim-migrate @ 7071]
Christian Hammond <chipx86@chipx86.com>
parents: 6520
diff changeset
5 #include "signals.h"
6520
5386692555c9 [gaim-migrate @ 7037]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
6
12882
44dfc6467081 [gaim-migrate @ 15234]
Etan Reisner <deryni@pidgin.im>
parents: 12874
diff changeset
7 extern PerlInterpreter *my_perl;
44dfc6467081 [gaim-migrate @ 15234]
Etan Reisner <deryni@pidgin.im>
parents: 12874
diff changeset
8 static GList *cmd_handlers = NULL;
6549
8e6ba2a45698 [gaim-migrate @ 7071]
Christian Hammond <chipx86@chipx86.com>
parents: 6520
diff changeset
9 static GList *signal_handlers = NULL;
12882
44dfc6467081 [gaim-migrate @ 15234]
Etan Reisner <deryni@pidgin.im>
parents: 12874
diff changeset
10 static GList *timeout_handlers = NULL;
6520
5386692555c9 [gaim-migrate @ 7037]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
11
12165
9f2d7e6b8707 [gaim-migrate @ 14466]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 11170
diff changeset
12 /* perl < 5.8.0 doesn't define PERL_MAGIC_ext */
9f2d7e6b8707 [gaim-migrate @ 14466]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 11170
diff changeset
13 #ifndef PERL_MAGIC_ext
9f2d7e6b8707 [gaim-migrate @ 14466]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 11170
diff changeset
14 #define PERL_MAGIC_ext '~'
9f2d7e6b8707 [gaim-migrate @ 14466]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 11170
diff changeset
15 #endif
9f2d7e6b8707 [gaim-migrate @ 14466]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 11170
diff changeset
16
12803
14d095d68300 [gaim-migrate @ 15150]
Etan Reisner <deryni@pidgin.im>
parents: 12165
diff changeset
17 void
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
18 purple_perl_plugin_action_cb(PurplePluginAction *action)
12803
14d095d68300 [gaim-migrate @ 15150]
Etan Reisner <deryni@pidgin.im>
parents: 12165
diff changeset
19 {
12988
2a53945982f5 [gaim-migrate @ 15341]
Etan Reisner <deryni@pidgin.im>
parents: 12882
diff changeset
20 SV **callback;
2a53945982f5 [gaim-migrate @ 15341]
Etan Reisner <deryni@pidgin.im>
parents: 12882
diff changeset
21 HV *hv = NULL;
2a53945982f5 [gaim-migrate @ 15341]
Etan Reisner <deryni@pidgin.im>
parents: 12882
diff changeset
22 gchar *hvname;
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
23 PurplePlugin *plugin;
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
24 PurplePerlScript *gps;
19336
065a79d2d0e5 Make perl loader more robust - use G_EVAL flag on all calls so that if the perl function dies, it doesn't cause libpurple to quit.
Daniel Atallah <datallah@pidgin.im>
parents: 18165
diff changeset
25 STRLEN na;
12803
14d095d68300 [gaim-migrate @ 15150]
Etan Reisner <deryni@pidgin.im>
parents: 12165
diff changeset
26 dSP;
12988
2a53945982f5 [gaim-migrate @ 15341]
Etan Reisner <deryni@pidgin.im>
parents: 12882
diff changeset
27
2a53945982f5 [gaim-migrate @ 15341]
Etan Reisner <deryni@pidgin.im>
parents: 12882
diff changeset
28 plugin = action->plugin;
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
29 gps = (PurplePerlScript *)plugin->info->extra_info;
12988
2a53945982f5 [gaim-migrate @ 15341]
Etan Reisner <deryni@pidgin.im>
parents: 12882
diff changeset
30 hvname = g_strdup_printf("%s::plugin_actions", gps->package);
2a53945982f5 [gaim-migrate @ 15341]
Etan Reisner <deryni@pidgin.im>
parents: 12882
diff changeset
31 hv = get_hv(hvname, FALSE);
2a53945982f5 [gaim-migrate @ 15341]
Etan Reisner <deryni@pidgin.im>
parents: 12882
diff changeset
32 g_free(hvname);
2a53945982f5 [gaim-migrate @ 15341]
Etan Reisner <deryni@pidgin.im>
parents: 12882
diff changeset
33
2a53945982f5 [gaim-migrate @ 15341]
Etan Reisner <deryni@pidgin.im>
parents: 12882
diff changeset
34 if (hv == NULL)
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
35 croak("No plugin_actions hash found in \"%s\" plugin.", purple_plugin_get_name(plugin));
12988
2a53945982f5 [gaim-migrate @ 15341]
Etan Reisner <deryni@pidgin.im>
parents: 12882
diff changeset
36
12803
14d095d68300 [gaim-migrate @ 15150]
Etan Reisner <deryni@pidgin.im>
parents: 12165
diff changeset
37 ENTER;
14d095d68300 [gaim-migrate @ 15150]
Etan Reisner <deryni@pidgin.im>
parents: 12165
diff changeset
38 SAVETMPS;
12988
2a53945982f5 [gaim-migrate @ 15341]
Etan Reisner <deryni@pidgin.im>
parents: 12882
diff changeset
39
2a53945982f5 [gaim-migrate @ 15341]
Etan Reisner <deryni@pidgin.im>
parents: 12882
diff changeset
40 callback = hv_fetch(hv, action->label, strlen(action->label), 0);
11170
d8941580d87f [gaim-migrate @ 13271]
John H. Kelm <johnkelm@gmail.com>
parents: 11123
diff changeset
41
12988
2a53945982f5 [gaim-migrate @ 15341]
Etan Reisner <deryni@pidgin.im>
parents: 12882
diff changeset
42 if (callback == NULL || *callback == NULL)
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
43 croak("No plugin_action function named \"%s\" in \"%s\" plugin.", action->label, purple_plugin_get_name(plugin));
11170
d8941580d87f [gaim-migrate @ 13271]
John H. Kelm <johnkelm@gmail.com>
parents: 11123
diff changeset
44
12988
2a53945982f5 [gaim-migrate @ 15341]
Etan Reisner <deryni@pidgin.im>
parents: 12882
diff changeset
45 PUSHMARK(sp);
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
46 XPUSHs(purple_perl_bless_object(gps->plugin, "Purple::Plugin"));
12803
14d095d68300 [gaim-migrate @ 15150]
Etan Reisner <deryni@pidgin.im>
parents: 12165
diff changeset
47 PUTBACK;
11170
d8941580d87f [gaim-migrate @ 13271]
John H. Kelm <johnkelm@gmail.com>
parents: 11123
diff changeset
48
19336
065a79d2d0e5 Make perl loader more robust - use G_EVAL flag on all calls so that if the perl function dies, it doesn't cause libpurple to quit.
Daniel Atallah <datallah@pidgin.im>
parents: 18165
diff changeset
49 call_sv(*callback, G_EVAL | G_VOID | G_DISCARD);
065a79d2d0e5 Make perl loader more robust - use G_EVAL flag on all calls so that if the perl function dies, it doesn't cause libpurple to quit.
Daniel Atallah <datallah@pidgin.im>
parents: 18165
diff changeset
50
12803
14d095d68300 [gaim-migrate @ 15150]
Etan Reisner <deryni@pidgin.im>
parents: 12165
diff changeset
51 SPAGAIN;
11170
d8941580d87f [gaim-migrate @ 13271]
John H. Kelm <johnkelm@gmail.com>
parents: 11123
diff changeset
52
19336
065a79d2d0e5 Make perl loader more robust - use G_EVAL flag on all calls so that if the perl function dies, it doesn't cause libpurple to quit.
Daniel Atallah <datallah@pidgin.im>
parents: 18165
diff changeset
53 if (SvTRUE(ERRSV)) {
065a79d2d0e5 Make perl loader more robust - use G_EVAL flag on all calls so that if the perl function dies, it doesn't cause libpurple to quit.
Daniel Atallah <datallah@pidgin.im>
parents: 18165
diff changeset
54 purple_debug_error("perl",
065a79d2d0e5 Make perl loader more robust - use G_EVAL flag on all calls so that if the perl function dies, it doesn't cause libpurple to quit.
Daniel Atallah <datallah@pidgin.im>
parents: 18165
diff changeset
55 "Perl plugin action function exited abnormally: %s\n",
065a79d2d0e5 Make perl loader more robust - use G_EVAL flag on all calls so that if the perl function dies, it doesn't cause libpurple to quit.
Daniel Atallah <datallah@pidgin.im>
parents: 18165
diff changeset
56 SvPV(ERRSV, na));
065a79d2d0e5 Make perl loader more robust - use G_EVAL flag on all calls so that if the perl function dies, it doesn't cause libpurple to quit.
Daniel Atallah <datallah@pidgin.im>
parents: 18165
diff changeset
57 }
065a79d2d0e5 Make perl loader more robust - use G_EVAL flag on all calls so that if the perl function dies, it doesn't cause libpurple to quit.
Daniel Atallah <datallah@pidgin.im>
parents: 18165
diff changeset
58
12803
14d095d68300 [gaim-migrate @ 15150]
Etan Reisner <deryni@pidgin.im>
parents: 12165
diff changeset
59 PUTBACK;
14d095d68300 [gaim-migrate @ 15150]
Etan Reisner <deryni@pidgin.im>
parents: 12165
diff changeset
60 FREETMPS;
14d095d68300 [gaim-migrate @ 15150]
Etan Reisner <deryni@pidgin.im>
parents: 12165
diff changeset
61 LEAVE;
11170
d8941580d87f [gaim-migrate @ 13271]
John H. Kelm <johnkelm@gmail.com>
parents: 11123
diff changeset
62 }
d8941580d87f [gaim-migrate @ 13271]
John H. Kelm <johnkelm@gmail.com>
parents: 11123
diff changeset
63
12803
14d095d68300 [gaim-migrate @ 15150]
Etan Reisner <deryni@pidgin.im>
parents: 12165
diff changeset
64 GList *
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
65 purple_perl_plugin_actions(PurplePlugin *plugin, gpointer context)
12803
14d095d68300 [gaim-migrate @ 15150]
Etan Reisner <deryni@pidgin.im>
parents: 12165
diff changeset
66 {
12988
2a53945982f5 [gaim-migrate @ 15341]
Etan Reisner <deryni@pidgin.im>
parents: 12882
diff changeset
67 GList *l = NULL;
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
68 PurplePerlScript *gps;
12988
2a53945982f5 [gaim-migrate @ 15341]
Etan Reisner <deryni@pidgin.im>
parents: 12882
diff changeset
69 int i = 0, count = 0;
19336
065a79d2d0e5 Make perl loader more robust - use G_EVAL flag on all calls so that if the perl function dies, it doesn't cause libpurple to quit.
Daniel Atallah <datallah@pidgin.im>
parents: 18165
diff changeset
70 STRLEN na;
12988
2a53945982f5 [gaim-migrate @ 15341]
Etan Reisner <deryni@pidgin.im>
parents: 12882
diff changeset
71 dSP;
2a53945982f5 [gaim-migrate @ 15341]
Etan Reisner <deryni@pidgin.im>
parents: 12882
diff changeset
72
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
73 gps = (PurplePerlScript *)plugin->info->extra_info;
12988
2a53945982f5 [gaim-migrate @ 15341]
Etan Reisner <deryni@pidgin.im>
parents: 12882
diff changeset
74
2a53945982f5 [gaim-migrate @ 15341]
Etan Reisner <deryni@pidgin.im>
parents: 12882
diff changeset
75 ENTER;
2a53945982f5 [gaim-migrate @ 15341]
Etan Reisner <deryni@pidgin.im>
parents: 12882
diff changeset
76 SAVETMPS;
2a53945982f5 [gaim-migrate @ 15341]
Etan Reisner <deryni@pidgin.im>
parents: 12882
diff changeset
77
2a53945982f5 [gaim-migrate @ 15341]
Etan Reisner <deryni@pidgin.im>
parents: 12882
diff changeset
78 PUSHMARK(SP);
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
79 XPUSHs(sv_2mortal(purple_perl_bless_object(plugin, "Purple::Plugin")));
12988
2a53945982f5 [gaim-migrate @ 15341]
Etan Reisner <deryni@pidgin.im>
parents: 12882
diff changeset
80 /* XXX This *will* cease working correctly if context gets changed to
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
81 * ever be able to hold anything other than a PurpleConnection */
12988
2a53945982f5 [gaim-migrate @ 15341]
Etan Reisner <deryni@pidgin.im>
parents: 12882
diff changeset
82 if (context != NULL)
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
83 XPUSHs(sv_2mortal(purple_perl_bless_object(context,
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
84 "Purple::Connection")));
12988
2a53945982f5 [gaim-migrate @ 15341]
Etan Reisner <deryni@pidgin.im>
parents: 12882
diff changeset
85 else
2a53945982f5 [gaim-migrate @ 15341]
Etan Reisner <deryni@pidgin.im>
parents: 12882
diff changeset
86 XPUSHs(&PL_sv_undef);
2a53945982f5 [gaim-migrate @ 15341]
Etan Reisner <deryni@pidgin.im>
parents: 12882
diff changeset
87 PUTBACK;
2a53945982f5 [gaim-migrate @ 15341]
Etan Reisner <deryni@pidgin.im>
parents: 12882
diff changeset
88
19336
065a79d2d0e5 Make perl loader more robust - use G_EVAL flag on all calls so that if the perl function dies, it doesn't cause libpurple to quit.
Daniel Atallah <datallah@pidgin.im>
parents: 18165
diff changeset
89 count = call_pv(gps->plugin_action_sub, G_EVAL | G_ARRAY);
11170
d8941580d87f [gaim-migrate @ 13271]
John H. Kelm <johnkelm@gmail.com>
parents: 11123
diff changeset
90
12988
2a53945982f5 [gaim-migrate @ 15341]
Etan Reisner <deryni@pidgin.im>
parents: 12882
diff changeset
91 SPAGAIN;
2a53945982f5 [gaim-migrate @ 15341]
Etan Reisner <deryni@pidgin.im>
parents: 12882
diff changeset
92
19336
065a79d2d0e5 Make perl loader more robust - use G_EVAL flag on all calls so that if the perl function dies, it doesn't cause libpurple to quit.
Daniel Atallah <datallah@pidgin.im>
parents: 18165
diff changeset
93 if (SvTRUE(ERRSV)) {
065a79d2d0e5 Make perl loader more robust - use G_EVAL flag on all calls so that if the perl function dies, it doesn't cause libpurple to quit.
Daniel Atallah <datallah@pidgin.im>
parents: 18165
diff changeset
94 purple_debug_error("perl",
065a79d2d0e5 Make perl loader more robust - use G_EVAL flag on all calls so that if the perl function dies, it doesn't cause libpurple to quit.
Daniel Atallah <datallah@pidgin.im>
parents: 18165
diff changeset
95 "Perl plugin actions lookup exited abnormally: %s\n",
065a79d2d0e5 Make perl loader more robust - use G_EVAL flag on all calls so that if the perl function dies, it doesn't cause libpurple to quit.
Daniel Atallah <datallah@pidgin.im>
parents: 18165
diff changeset
96 SvPV(ERRSV, na));
065a79d2d0e5 Make perl loader more robust - use G_EVAL flag on all calls so that if the perl function dies, it doesn't cause libpurple to quit.
Daniel Atallah <datallah@pidgin.im>
parents: 18165
diff changeset
97 }
065a79d2d0e5 Make perl loader more robust - use G_EVAL flag on all calls so that if the perl function dies, it doesn't cause libpurple to quit.
Daniel Atallah <datallah@pidgin.im>
parents: 18165
diff changeset
98
12988
2a53945982f5 [gaim-migrate @ 15341]
Etan Reisner <deryni@pidgin.im>
parents: 12882
diff changeset
99 if (count == 0)
2a53945982f5 [gaim-migrate @ 15341]
Etan Reisner <deryni@pidgin.im>
parents: 12882
diff changeset
100 croak("The plugin_actions sub didn't return anything.\n");
2a53945982f5 [gaim-migrate @ 15341]
Etan Reisner <deryni@pidgin.im>
parents: 12882
diff changeset
101
2a53945982f5 [gaim-migrate @ 15341]
Etan Reisner <deryni@pidgin.im>
parents: 12882
diff changeset
102 for (i = 0; i < count; i++) {
2a53945982f5 [gaim-migrate @ 15341]
Etan Reisner <deryni@pidgin.im>
parents: 12882
diff changeset
103 SV *sv;
2a53945982f5 [gaim-migrate @ 15341]
Etan Reisner <deryni@pidgin.im>
parents: 12882
diff changeset
104 gchar *label;
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
105 PurplePluginAction *act = NULL;
11170
d8941580d87f [gaim-migrate @ 13271]
John H. Kelm <johnkelm@gmail.com>
parents: 11123
diff changeset
106
12988
2a53945982f5 [gaim-migrate @ 15341]
Etan Reisner <deryni@pidgin.im>
parents: 12882
diff changeset
107 sv = POPs;
2a53945982f5 [gaim-migrate @ 15341]
Etan Reisner <deryni@pidgin.im>
parents: 12882
diff changeset
108 label = SvPV_nolen(sv);
2a53945982f5 [gaim-migrate @ 15341]
Etan Reisner <deryni@pidgin.im>
parents: 12882
diff changeset
109 /* XXX I think this leaks, but doing it without the strdup
2a53945982f5 [gaim-migrate @ 15341]
Etan Reisner <deryni@pidgin.im>
parents: 12882
diff changeset
110 * just showed garbage */
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
111 act = purple_plugin_action_new(g_strdup(label), purple_perl_plugin_action_cb);
13354
eeec75e1c290 [gaim-migrate @ 15725]
Scott Wolchok
parents: 13191
diff changeset
112 l = g_list_prepend(l, act);
12988
2a53945982f5 [gaim-migrate @ 15341]
Etan Reisner <deryni@pidgin.im>
parents: 12882
diff changeset
113 }
2a53945982f5 [gaim-migrate @ 15341]
Etan Reisner <deryni@pidgin.im>
parents: 12882
diff changeset
114
2a53945982f5 [gaim-migrate @ 15341]
Etan Reisner <deryni@pidgin.im>
parents: 12882
diff changeset
115 PUTBACK;
2a53945982f5 [gaim-migrate @ 15341]
Etan Reisner <deryni@pidgin.im>
parents: 12882
diff changeset
116 FREETMPS;
2a53945982f5 [gaim-migrate @ 15341]
Etan Reisner <deryni@pidgin.im>
parents: 12882
diff changeset
117 LEAVE;
2a53945982f5 [gaim-migrate @ 15341]
Etan Reisner <deryni@pidgin.im>
parents: 12882
diff changeset
118
2a53945982f5 [gaim-migrate @ 15341]
Etan Reisner <deryni@pidgin.im>
parents: 12882
diff changeset
119 return l;
11170
d8941580d87f [gaim-migrate @ 13271]
John H. Kelm <johnkelm@gmail.com>
parents: 11123
diff changeset
120 }
d8941580d87f [gaim-migrate @ 13271]
John H. Kelm <johnkelm@gmail.com>
parents: 11123
diff changeset
121
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
122 #ifdef PURPLE_GTKPERL
12803
14d095d68300 [gaim-migrate @ 15150]
Etan Reisner <deryni@pidgin.im>
parents: 12165
diff changeset
123 GtkWidget *
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
124 purple_perl_gtk_get_plugin_frame(PurplePlugin *plugin)
12803
14d095d68300 [gaim-migrate @ 15150]
Etan Reisner <deryni@pidgin.im>
parents: 12165
diff changeset
125 {
11170
d8941580d87f [gaim-migrate @ 13271]
John H. Kelm <johnkelm@gmail.com>
parents: 11123
diff changeset
126 SV * sv;
12874
9874953fdb62 [gaim-migrate @ 15226]
Etan Reisner <deryni@pidgin.im>
parents: 12872
diff changeset
127 int count;
11170
d8941580d87f [gaim-migrate @ 13271]
John H. Kelm <johnkelm@gmail.com>
parents: 11123
diff changeset
128 MAGIC *mg;
12874
9874953fdb62 [gaim-migrate @ 15226]
Etan Reisner <deryni@pidgin.im>
parents: 12872
diff changeset
129 GtkWidget *ret;
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
130 PurplePerlScript *gps;
19336
065a79d2d0e5 Make perl loader more robust - use G_EVAL flag on all calls so that if the perl function dies, it doesn't cause libpurple to quit.
Daniel Atallah <datallah@pidgin.im>
parents: 18165
diff changeset
131 STRLEN na;
11170
d8941580d87f [gaim-migrate @ 13271]
John H. Kelm <johnkelm@gmail.com>
parents: 11123
diff changeset
132 dSP;
12874
9874953fdb62 [gaim-migrate @ 15226]
Etan Reisner <deryni@pidgin.im>
parents: 12872
diff changeset
133
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
134 gps = (PurplePerlScript *)plugin->info->extra_info;
11170
d8941580d87f [gaim-migrate @ 13271]
John H. Kelm <johnkelm@gmail.com>
parents: 11123
diff changeset
135
d8941580d87f [gaim-migrate @ 13271]
John H. Kelm <johnkelm@gmail.com>
parents: 11123
diff changeset
136 ENTER;
d8941580d87f [gaim-migrate @ 13271]
John H. Kelm <johnkelm@gmail.com>
parents: 11123
diff changeset
137 SAVETMPS;
d8941580d87f [gaim-migrate @ 13271]
John H. Kelm <johnkelm@gmail.com>
parents: 11123
diff changeset
138
19336
065a79d2d0e5 Make perl loader more robust - use G_EVAL flag on all calls so that if the perl function dies, it doesn't cause libpurple to quit.
Daniel Atallah <datallah@pidgin.im>
parents: 18165
diff changeset
139 count = call_pv(gps->gtk_prefs_sub, G_EVAL | G_SCALAR | G_NOARGS);
11170
d8941580d87f [gaim-migrate @ 13271]
John H. Kelm <johnkelm@gmail.com>
parents: 11123
diff changeset
140 if (count != 1)
d8941580d87f [gaim-migrate @ 13271]
John H. Kelm <johnkelm@gmail.com>
parents: 11123
diff changeset
141 croak("call_pv: Did not return the correct number of values.\n");
12803
14d095d68300 [gaim-migrate @ 15150]
Etan Reisner <deryni@pidgin.im>
parents: 12165
diff changeset
142
11170
d8941580d87f [gaim-migrate @ 13271]
John H. Kelm <johnkelm@gmail.com>
parents: 11123
diff changeset
143 /* the frame was created in a perl sub and is returned */
d8941580d87f [gaim-migrate @ 13271]
John H. Kelm <johnkelm@gmail.com>
parents: 11123
diff changeset
144 SPAGAIN;
d8941580d87f [gaim-migrate @ 13271]
John H. Kelm <johnkelm@gmail.com>
parents: 11123
diff changeset
145
19336
065a79d2d0e5 Make perl loader more robust - use G_EVAL flag on all calls so that if the perl function dies, it doesn't cause libpurple to quit.
Daniel Atallah <datallah@pidgin.im>
parents: 18165
diff changeset
146 if (SvTRUE(ERRSV)) {
065a79d2d0e5 Make perl loader more robust - use G_EVAL flag on all calls so that if the perl function dies, it doesn't cause libpurple to quit.
Daniel Atallah <datallah@pidgin.im>
parents: 18165
diff changeset
147 purple_debug_error("perl",
065a79d2d0e5 Make perl loader more robust - use G_EVAL flag on all calls so that if the perl function dies, it doesn't cause libpurple to quit.
Daniel Atallah <datallah@pidgin.im>
parents: 18165
diff changeset
148 "Perl gtk plugin frame init exited abnormally: %s\n",
065a79d2d0e5 Make perl loader more robust - use G_EVAL flag on all calls so that if the perl function dies, it doesn't cause libpurple to quit.
Daniel Atallah <datallah@pidgin.im>
parents: 18165
diff changeset
149 SvPV(ERRSV, na));
065a79d2d0e5 Make perl loader more robust - use G_EVAL flag on all calls so that if the perl function dies, it doesn't cause libpurple to quit.
Daniel Atallah <datallah@pidgin.im>
parents: 18165
diff changeset
150 }
065a79d2d0e5 Make perl loader more robust - use G_EVAL flag on all calls so that if the perl function dies, it doesn't cause libpurple to quit.
Daniel Atallah <datallah@pidgin.im>
parents: 18165
diff changeset
151
11170
d8941580d87f [gaim-migrate @ 13271]
John H. Kelm <johnkelm@gmail.com>
parents: 11123
diff changeset
152 /* We have a Gtk2::Frame on top of the stack */
12803
14d095d68300 [gaim-migrate @ 15150]
Etan Reisner <deryni@pidgin.im>
parents: 12165
diff changeset
153 sv = POPs;
11170
d8941580d87f [gaim-migrate @ 13271]
John H. Kelm <johnkelm@gmail.com>
parents: 11123
diff changeset
154
12874
9874953fdb62 [gaim-migrate @ 15226]
Etan Reisner <deryni@pidgin.im>
parents: 12872
diff changeset
155 /* The magic field hides the pointer to the actual GtkWidget */
11170
d8941580d87f [gaim-migrate @ 13271]
John H. Kelm <johnkelm@gmail.com>
parents: 11123
diff changeset
156 mg = mg_find(SvRV(sv), PERL_MAGIC_ext);
d8941580d87f [gaim-migrate @ 13271]
John H. Kelm <johnkelm@gmail.com>
parents: 11123
diff changeset
157 ret = (GtkWidget *)mg->mg_ptr;
d8941580d87f [gaim-migrate @ 13271]
John H. Kelm <johnkelm@gmail.com>
parents: 11123
diff changeset
158
d8941580d87f [gaim-migrate @ 13271]
John H. Kelm <johnkelm@gmail.com>
parents: 11123
diff changeset
159 PUTBACK;
d8941580d87f [gaim-migrate @ 13271]
John H. Kelm <johnkelm@gmail.com>
parents: 11123
diff changeset
160 FREETMPS;
12803
14d095d68300 [gaim-migrate @ 15150]
Etan Reisner <deryni@pidgin.im>
parents: 12165
diff changeset
161 LEAVE;
14d095d68300 [gaim-migrate @ 15150]
Etan Reisner <deryni@pidgin.im>
parents: 12165
diff changeset
162
11170
d8941580d87f [gaim-migrate @ 13271]
John H. Kelm <johnkelm@gmail.com>
parents: 11123
diff changeset
163 return ret;
d8941580d87f [gaim-migrate @ 13271]
John H. Kelm <johnkelm@gmail.com>
parents: 11123
diff changeset
164 }
14426
8d4f164c4979 [gaim-migrate @ 17070]
Daniel Atallah <datallah@pidgin.im>
parents: 14254
diff changeset
165 #endif
11170
d8941580d87f [gaim-migrate @ 13271]
John H. Kelm <johnkelm@gmail.com>
parents: 11123
diff changeset
166
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
167 PurplePluginPrefFrame *
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
168 purple_perl_get_plugin_frame(PurplePlugin *plugin)
12803
14d095d68300 [gaim-migrate @ 15150]
Etan Reisner <deryni@pidgin.im>
parents: 12165
diff changeset
169 {
14d095d68300 [gaim-migrate @ 15150]
Etan Reisner <deryni@pidgin.im>
parents: 12165
diff changeset
170 /* Sets up the Perl Stack for our call back into the script to run the
14d095d68300 [gaim-migrate @ 15150]
Etan Reisner <deryni@pidgin.im>
parents: 12165
diff changeset
171 * plugin_pref... sub */
12872
b3d38f1b9bd7 [gaim-migrate @ 15224]
Etan Reisner <deryni@pidgin.im>
parents: 12871
diff changeset
172 int count;
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
173 PurplePerlScript *gps;
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
174 PurplePluginPrefFrame *ret_frame;
19336
065a79d2d0e5 Make perl loader more robust - use G_EVAL flag on all calls so that if the perl function dies, it doesn't cause libpurple to quit.
Daniel Atallah <datallah@pidgin.im>
parents: 18165
diff changeset
175 STRLEN na;
11123
098f5c57f2bb [gaim-migrate @ 13179]
John H. Kelm <johnkelm@gmail.com>
parents: 7386
diff changeset
176 dSP;
098f5c57f2bb [gaim-migrate @ 13179]
John H. Kelm <johnkelm@gmail.com>
parents: 7386
diff changeset
177
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
178 gps = (PurplePerlScript *)plugin->info->extra_info;
12872
b3d38f1b9bd7 [gaim-migrate @ 15224]
Etan Reisner <deryni@pidgin.im>
parents: 12871
diff changeset
179
11123
098f5c57f2bb [gaim-migrate @ 13179]
John H. Kelm <johnkelm@gmail.com>
parents: 7386
diff changeset
180 ENTER;
098f5c57f2bb [gaim-migrate @ 13179]
John H. Kelm <johnkelm@gmail.com>
parents: 7386
diff changeset
181 SAVETMPS;
12803
14d095d68300 [gaim-migrate @ 15150]
Etan Reisner <deryni@pidgin.im>
parents: 12165
diff changeset
182 /* Some perl magic to run perl_plugin_pref_frame_SV perl sub and
14d095d68300 [gaim-migrate @ 15150]
Etan Reisner <deryni@pidgin.im>
parents: 12165
diff changeset
183 * return the frame */
11123
098f5c57f2bb [gaim-migrate @ 13179]
John H. Kelm <johnkelm@gmail.com>
parents: 7386
diff changeset
184 PUSHMARK(SP);
098f5c57f2bb [gaim-migrate @ 13179]
John H. Kelm <johnkelm@gmail.com>
parents: 7386
diff changeset
185 PUTBACK;
098f5c57f2bb [gaim-migrate @ 13179]
John H. Kelm <johnkelm@gmail.com>
parents: 7386
diff changeset
186
19336
065a79d2d0e5 Make perl loader more robust - use G_EVAL flag on all calls so that if the perl function dies, it doesn't cause libpurple to quit.
Daniel Atallah <datallah@pidgin.im>
parents: 18165
diff changeset
187 count = call_pv(gps->prefs_sub, G_EVAL | G_SCALAR | G_NOARGS);
11123
098f5c57f2bb [gaim-migrate @ 13179]
John H. Kelm <johnkelm@gmail.com>
parents: 7386
diff changeset
188
098f5c57f2bb [gaim-migrate @ 13179]
John H. Kelm <johnkelm@gmail.com>
parents: 7386
diff changeset
189 SPAGAIN;
098f5c57f2bb [gaim-migrate @ 13179]
John H. Kelm <johnkelm@gmail.com>
parents: 7386
diff changeset
190
19336
065a79d2d0e5 Make perl loader more robust - use G_EVAL flag on all calls so that if the perl function dies, it doesn't cause libpurple to quit.
Daniel Atallah <datallah@pidgin.im>
parents: 18165
diff changeset
191 if (SvTRUE(ERRSV)) {
065a79d2d0e5 Make perl loader more robust - use G_EVAL flag on all calls so that if the perl function dies, it doesn't cause libpurple to quit.
Daniel Atallah <datallah@pidgin.im>
parents: 18165
diff changeset
192 purple_debug_error("perl",
065a79d2d0e5 Make perl loader more robust - use G_EVAL flag on all calls so that if the perl function dies, it doesn't cause libpurple to quit.
Daniel Atallah <datallah@pidgin.im>
parents: 18165
diff changeset
193 "Perl plugin prefs frame init exited abnormally: %s\n",
065a79d2d0e5 Make perl loader more robust - use G_EVAL flag on all calls so that if the perl function dies, it doesn't cause libpurple to quit.
Daniel Atallah <datallah@pidgin.im>
parents: 18165
diff changeset
194 SvPV(ERRSV, na));
065a79d2d0e5 Make perl loader more robust - use G_EVAL flag on all calls so that if the perl function dies, it doesn't cause libpurple to quit.
Daniel Atallah <datallah@pidgin.im>
parents: 18165
diff changeset
195 }
065a79d2d0e5 Make perl loader more robust - use G_EVAL flag on all calls so that if the perl function dies, it doesn't cause libpurple to quit.
Daniel Atallah <datallah@pidgin.im>
parents: 18165
diff changeset
196
11123
098f5c57f2bb [gaim-migrate @ 13179]
John H. Kelm <johnkelm@gmail.com>
parents: 7386
diff changeset
197 if (count != 1)
098f5c57f2bb [gaim-migrate @ 13179]
John H. Kelm <johnkelm@gmail.com>
parents: 7386
diff changeset
198 croak("call_pv: Did not return the correct number of values.\n");
098f5c57f2bb [gaim-migrate @ 13179]
John H. Kelm <johnkelm@gmail.com>
parents: 7386
diff changeset
199 /* the frame was created in a perl sub and is returned */
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
200 ret_frame = (PurplePluginPrefFrame *)purple_perl_ref_object(POPs);
11123
098f5c57f2bb [gaim-migrate @ 13179]
John H. Kelm <johnkelm@gmail.com>
parents: 7386
diff changeset
201
098f5c57f2bb [gaim-migrate @ 13179]
John H. Kelm <johnkelm@gmail.com>
parents: 7386
diff changeset
202 /* Tidy up the Perl stack */
098f5c57f2bb [gaim-migrate @ 13179]
John H. Kelm <johnkelm@gmail.com>
parents: 7386
diff changeset
203 PUTBACK;
098f5c57f2bb [gaim-migrate @ 13179]
John H. Kelm <johnkelm@gmail.com>
parents: 7386
diff changeset
204 FREETMPS;
098f5c57f2bb [gaim-migrate @ 13179]
John H. Kelm <johnkelm@gmail.com>
parents: 7386
diff changeset
205 LEAVE;
12871
3584d93ae63c [gaim-migrate @ 15223]
Etan Reisner <deryni@pidgin.im>
parents: 12804
diff changeset
206
11123
098f5c57f2bb [gaim-migrate @ 13179]
John H. Kelm <johnkelm@gmail.com>
parents: 7386
diff changeset
207 return ret_frame;
098f5c57f2bb [gaim-migrate @ 13179]
John H. Kelm <johnkelm@gmail.com>
parents: 7386
diff changeset
208 }
6520
5386692555c9 [gaim-migrate @ 7037]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
209
22845
7ccb529edf3f Add the recent perl callback changes to ChangeLog.API.
Etan Reisner <deryni@pidgin.im>
parents: 19336
diff changeset
210 static gboolean
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
211 destroy_timeout_handler(PurplePerlTimeoutHandler *handler)
6520
5386692555c9 [gaim-migrate @ 7037]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
212 {
22845
7ccb529edf3f Add the recent perl callback changes to ChangeLog.API.
Etan Reisner <deryni@pidgin.im>
parents: 19336
diff changeset
213 gboolean ret = FALSE;
7ccb529edf3f Add the recent perl callback changes to ChangeLog.API.
Etan Reisner <deryni@pidgin.im>
parents: 19336
diff changeset
214
6520
5386692555c9 [gaim-migrate @ 7037]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
215 timeout_handlers = g_list_remove(timeout_handlers, handler);
5386692555c9 [gaim-migrate @ 7037]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
216
16140
362e0ca15d3a Fix Bug #125 (Perl plugins using timeouts not having timeouts unregistered when plugin unloaded)
Daniel Atallah <datallah@pidgin.im>
parents: 15884
diff changeset
217 if (handler->iotag > 0)
22845
7ccb529edf3f Add the recent perl callback changes to ChangeLog.API.
Etan Reisner <deryni@pidgin.im>
parents: 19336
diff changeset
218 ret = purple_timeout_remove(handler->iotag);
16140
362e0ca15d3a Fix Bug #125 (Perl plugins using timeouts not having timeouts unregistered when plugin unloaded)
Daniel Atallah <datallah@pidgin.im>
parents: 15884
diff changeset
219
6568
5c8c70b63dc3 [gaim-migrate @ 7090]
Christian Hammond <chipx86@chipx86.com>
parents: 6567
diff changeset
220 if (handler->callback != NULL)
5c8c70b63dc3 [gaim-migrate @ 7090]
Christian Hammond <chipx86@chipx86.com>
parents: 6567
diff changeset
221 SvREFCNT_dec(handler->callback);
5c8c70b63dc3 [gaim-migrate @ 7090]
Christian Hammond <chipx86@chipx86.com>
parents: 6567
diff changeset
222
5c8c70b63dc3 [gaim-migrate @ 7090]
Christian Hammond <chipx86@chipx86.com>
parents: 6567
diff changeset
223 if (handler->data != NULL)
5c8c70b63dc3 [gaim-migrate @ 7090]
Christian Hammond <chipx86@chipx86.com>
parents: 6567
diff changeset
224 SvREFCNT_dec(handler->data);
5c8c70b63dc3 [gaim-migrate @ 7090]
Christian Hammond <chipx86@chipx86.com>
parents: 6567
diff changeset
225
6520
5386692555c9 [gaim-migrate @ 7037]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
226 g_free(handler);
22845
7ccb529edf3f Add the recent perl callback changes to ChangeLog.API.
Etan Reisner <deryni@pidgin.im>
parents: 19336
diff changeset
227
7ccb529edf3f Add the recent perl callback changes to ChangeLog.API.
Etan Reisner <deryni@pidgin.im>
parents: 19336
diff changeset
228 return ret;
6520
5386692555c9 [gaim-migrate @ 7037]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
229 }
5386692555c9 [gaim-migrate @ 7037]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
230
6549
8e6ba2a45698 [gaim-migrate @ 7071]
Christian Hammond <chipx86@chipx86.com>
parents: 6520
diff changeset
231 static void
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
232 destroy_signal_handler(PurplePerlSignalHandler *handler)
6549
8e6ba2a45698 [gaim-migrate @ 7071]
Christian Hammond <chipx86@chipx86.com>
parents: 6520
diff changeset
233 {
8e6ba2a45698 [gaim-migrate @ 7071]
Christian Hammond <chipx86@chipx86.com>
parents: 6520
diff changeset
234 signal_handlers = g_list_remove(signal_handlers, handler);
8e6ba2a45698 [gaim-migrate @ 7071]
Christian Hammond <chipx86@chipx86.com>
parents: 6520
diff changeset
235
6567
761a1feb5561 [gaim-migrate @ 7089]
Christian Hammond <chipx86@chipx86.com>
parents: 6566
diff changeset
236 if (handler->callback != NULL)
761a1feb5561 [gaim-migrate @ 7089]
Christian Hammond <chipx86@chipx86.com>
parents: 6566
diff changeset
237 SvREFCNT_dec(handler->callback);
761a1feb5561 [gaim-migrate @ 7089]
Christian Hammond <chipx86@chipx86.com>
parents: 6566
diff changeset
238
761a1feb5561 [gaim-migrate @ 7089]
Christian Hammond <chipx86@chipx86.com>
parents: 6566
diff changeset
239 if (handler->data != NULL)
761a1feb5561 [gaim-migrate @ 7089]
Christian Hammond <chipx86@chipx86.com>
parents: 6566
diff changeset
240 SvREFCNT_dec(handler->data);
761a1feb5561 [gaim-migrate @ 7089]
Christian Hammond <chipx86@chipx86.com>
parents: 6566
diff changeset
241
6549
8e6ba2a45698 [gaim-migrate @ 7071]
Christian Hammond <chipx86@chipx86.com>
parents: 6520
diff changeset
242 g_free(handler->signal);
8e6ba2a45698 [gaim-migrate @ 7071]
Christian Hammond <chipx86@chipx86.com>
parents: 6520
diff changeset
243 g_free(handler);
8e6ba2a45698 [gaim-migrate @ 7071]
Christian Hammond <chipx86@chipx86.com>
parents: 6520
diff changeset
244 }
8e6ba2a45698 [gaim-migrate @ 7071]
Christian Hammond <chipx86@chipx86.com>
parents: 6520
diff changeset
245
16140
362e0ca15d3a Fix Bug #125 (Perl plugins using timeouts not having timeouts unregistered when plugin unloaded)
Daniel Atallah <datallah@pidgin.im>
parents: 15884
diff changeset
246 static gboolean
6520
5386692555c9 [gaim-migrate @ 7037]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
247 perl_timeout_cb(gpointer data)
5386692555c9 [gaim-migrate @ 7037]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
248 {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
249 PurplePerlTimeoutHandler *handler = (PurplePerlTimeoutHandler *)data;
18165
fb6f9d0130aa Make timeout-callbacks behave like they would in C plugins (ie. the callback
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 17570
diff changeset
250 gboolean ret = FALSE;
19336
065a79d2d0e5 Make perl loader more robust - use G_EVAL flag on all calls so that if the perl function dies, it doesn't cause libpurple to quit.
Daniel Atallah <datallah@pidgin.im>
parents: 18165
diff changeset
251 STRLEN na;
6520
5386692555c9 [gaim-migrate @ 7037]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
252
5386692555c9 [gaim-migrate @ 7037]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
253 dSP;
5386692555c9 [gaim-migrate @ 7037]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
254 ENTER;
5386692555c9 [gaim-migrate @ 7037]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
255 SAVETMPS;
5386692555c9 [gaim-migrate @ 7037]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
256 PUSHMARK(sp);
6568
5c8c70b63dc3 [gaim-migrate @ 7090]
Christian Hammond <chipx86@chipx86.com>
parents: 6567
diff changeset
257 XPUSHs((SV *)handler->data);
6520
5386692555c9 [gaim-migrate @ 7037]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
258 PUTBACK;
6568
5c8c70b63dc3 [gaim-migrate @ 7090]
Christian Hammond <chipx86@chipx86.com>
parents: 6567
diff changeset
259 call_sv(handler->callback, G_EVAL | G_SCALAR);
6520
5386692555c9 [gaim-migrate @ 7037]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
260 SPAGAIN;
5386692555c9 [gaim-migrate @ 7037]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
261
19336
065a79d2d0e5 Make perl loader more robust - use G_EVAL flag on all calls so that if the perl function dies, it doesn't cause libpurple to quit.
Daniel Atallah <datallah@pidgin.im>
parents: 18165
diff changeset
262 if (SvTRUE(ERRSV)) {
065a79d2d0e5 Make perl loader more robust - use G_EVAL flag on all calls so that if the perl function dies, it doesn't cause libpurple to quit.
Daniel Atallah <datallah@pidgin.im>
parents: 18165
diff changeset
263 purple_debug_error("perl",
065a79d2d0e5 Make perl loader more robust - use G_EVAL flag on all calls so that if the perl function dies, it doesn't cause libpurple to quit.
Daniel Atallah <datallah@pidgin.im>
parents: 18165
diff changeset
264 "Perl timeout function exited abnormally: %s\n",
065a79d2d0e5 Make perl loader more robust - use G_EVAL flag on all calls so that if the perl function dies, it doesn't cause libpurple to quit.
Daniel Atallah <datallah@pidgin.im>
parents: 18165
diff changeset
265 SvPV(ERRSV, na));
065a79d2d0e5 Make perl loader more robust - use G_EVAL flag on all calls so that if the perl function dies, it doesn't cause libpurple to quit.
Daniel Atallah <datallah@pidgin.im>
parents: 18165
diff changeset
266 }
065a79d2d0e5 Make perl loader more robust - use G_EVAL flag on all calls so that if the perl function dies, it doesn't cause libpurple to quit.
Daniel Atallah <datallah@pidgin.im>
parents: 18165
diff changeset
267
18165
fb6f9d0130aa Make timeout-callbacks behave like they would in C plugins (ie. the callback
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 17570
diff changeset
268 ret = POPi;
fb6f9d0130aa Make timeout-callbacks behave like they would in C plugins (ie. the callback
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 17570
diff changeset
269
6520
5386692555c9 [gaim-migrate @ 7037]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
270 PUTBACK;
5386692555c9 [gaim-migrate @ 7037]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
271 FREETMPS;
5386692555c9 [gaim-migrate @ 7037]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
272 LEAVE;
5386692555c9 [gaim-migrate @ 7037]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
273
18165
fb6f9d0130aa Make timeout-callbacks behave like they would in C plugins (ie. the callback
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 17570
diff changeset
274 if (ret == FALSE)
fb6f9d0130aa Make timeout-callbacks behave like they would in C plugins (ie. the callback
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 17570
diff changeset
275 destroy_timeout_handler(handler);
16140
362e0ca15d3a Fix Bug #125 (Perl plugins using timeouts not having timeouts unregistered when plugin unloaded)
Daniel Atallah <datallah@pidgin.im>
parents: 15884
diff changeset
276
18165
fb6f9d0130aa Make timeout-callbacks behave like they would in C plugins (ie. the callback
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 17570
diff changeset
277 return ret;
6520
5386692555c9 [gaim-migrate @ 7037]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
278 }
5386692555c9 [gaim-migrate @ 7037]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
279
6921
3d49b89fc920 [gaim-migrate @ 7468]
Christian Hammond <chipx86@chipx86.com>
parents: 6920
diff changeset
280 typedef void *DATATYPE;
3d49b89fc920 [gaim-migrate @ 7468]
Christian Hammond <chipx86@chipx86.com>
parents: 6920
diff changeset
281
6549
8e6ba2a45698 [gaim-migrate @ 7071]
Christian Hammond <chipx86@chipx86.com>
parents: 6520
diff changeset
282 static void *
8e6ba2a45698 [gaim-migrate @ 7071]
Christian Hammond <chipx86@chipx86.com>
parents: 6520
diff changeset
283 perl_signal_cb(va_list args, void *data)
8e6ba2a45698 [gaim-migrate @ 7071]
Christian Hammond <chipx86@chipx86.com>
parents: 6520
diff changeset
284 {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
285 PurplePerlSignalHandler *handler = (PurplePerlSignalHandler *)data;
6549
8e6ba2a45698 [gaim-migrate @ 7071]
Christian Hammond <chipx86@chipx86.com>
parents: 6520
diff changeset
286 void *ret_val = NULL;
6566
61eb35202526 [gaim-migrate @ 7088]
Christian Hammond <chipx86@chipx86.com>
parents: 6554
diff changeset
287 int i;
6549
8e6ba2a45698 [gaim-migrate @ 7071]
Christian Hammond <chipx86@chipx86.com>
parents: 6520
diff changeset
288 int count;
6566
61eb35202526 [gaim-migrate @ 7088]
Christian Hammond <chipx86@chipx86.com>
parents: 6554
diff changeset
289 int value_count;
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
290 PurpleValue *ret_value, **values;
6919
2fd7ce2393f7 [gaim-migrate @ 7466]
Christian Hammond <chipx86@chipx86.com>
parents: 6568
diff changeset
291 SV **sv_args;
6921
3d49b89fc920 [gaim-migrate @ 7468]
Christian Hammond <chipx86@chipx86.com>
parents: 6920
diff changeset
292 DATATYPE **copy_args;
3d49b89fc920 [gaim-migrate @ 7468]
Christian Hammond <chipx86@chipx86.com>
parents: 6920
diff changeset
293 STRLEN na;
6549
8e6ba2a45698 [gaim-migrate @ 7071]
Christian Hammond <chipx86@chipx86.com>
parents: 6520
diff changeset
294
8e6ba2a45698 [gaim-migrate @ 7071]
Christian Hammond <chipx86@chipx86.com>
parents: 6520
diff changeset
295 dSP;
8e6ba2a45698 [gaim-migrate @ 7071]
Christian Hammond <chipx86@chipx86.com>
parents: 6520
diff changeset
296 ENTER;
8e6ba2a45698 [gaim-migrate @ 7071]
Christian Hammond <chipx86@chipx86.com>
parents: 6520
diff changeset
297 SAVETMPS;
8e6ba2a45698 [gaim-migrate @ 7071]
Christian Hammond <chipx86@chipx86.com>
parents: 6520
diff changeset
298 PUSHMARK(sp);
8e6ba2a45698 [gaim-migrate @ 7071]
Christian Hammond <chipx86@chipx86.com>
parents: 6520
diff changeset
299
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
300 purple_signal_get_values(handler->instance, handler->signal,
12804
fcab3f810f83 [gaim-migrate @ 15151]
Etan Reisner <deryni@pidgin.im>
parents: 12803
diff changeset
301 &ret_value, &value_count, &values);
6566
61eb35202526 [gaim-migrate @ 7088]
Christian Hammond <chipx86@chipx86.com>
parents: 6554
diff changeset
302
6921
3d49b89fc920 [gaim-migrate @ 7468]
Christian Hammond <chipx86@chipx86.com>
parents: 6920
diff changeset
303 sv_args = g_new(SV *, value_count);
3d49b89fc920 [gaim-migrate @ 7468]
Christian Hammond <chipx86@chipx86.com>
parents: 6920
diff changeset
304 copy_args = g_new(void **, value_count);
6919
2fd7ce2393f7 [gaim-migrate @ 7466]
Christian Hammond <chipx86@chipx86.com>
parents: 6568
diff changeset
305
12803
14d095d68300 [gaim-migrate @ 15150]
Etan Reisner <deryni@pidgin.im>
parents: 12165
diff changeset
306 for (i = 0; i < value_count; i++) {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
307 sv_args[i] = purple_perl_sv_from_vargs(values[i],
22845
7ccb529edf3f Add the recent perl callback changes to ChangeLog.API.
Etan Reisner <deryni@pidgin.im>
parents: 19336
diff changeset
308 (va_list*)&args,
7ccb529edf3f Add the recent perl callback changes to ChangeLog.API.
Etan Reisner <deryni@pidgin.im>
parents: 19336
diff changeset
309 &copy_args[i]);
6549
8e6ba2a45698 [gaim-migrate @ 7071]
Christian Hammond <chipx86@chipx86.com>
parents: 6520
diff changeset
310
6920
4f4931b005cb [gaim-migrate @ 7467]
Christian Hammond <chipx86@chipx86.com>
parents: 6919
diff changeset
311 XPUSHs(sv_args[i]);
6566
61eb35202526 [gaim-migrate @ 7088]
Christian Hammond <chipx86@chipx86.com>
parents: 6554
diff changeset
312 }
61eb35202526 [gaim-migrate @ 7088]
Christian Hammond <chipx86@chipx86.com>
parents: 6554
diff changeset
313
6549
8e6ba2a45698 [gaim-migrate @ 7071]
Christian Hammond <chipx86@chipx86.com>
parents: 6520
diff changeset
314 XPUSHs((SV *)handler->data);
8e6ba2a45698 [gaim-migrate @ 7071]
Christian Hammond <chipx86@chipx86.com>
parents: 6520
diff changeset
315
8e6ba2a45698 [gaim-migrate @ 7071]
Christian Hammond <chipx86@chipx86.com>
parents: 6520
diff changeset
316 PUTBACK;
6567
761a1feb5561 [gaim-migrate @ 7089]
Christian Hammond <chipx86@chipx86.com>
parents: 6566
diff changeset
317
12803
14d095d68300 [gaim-migrate @ 15150]
Etan Reisner <deryni@pidgin.im>
parents: 12165
diff changeset
318 if (ret_value != NULL) {
6921
3d49b89fc920 [gaim-migrate @ 7468]
Christian Hammond <chipx86@chipx86.com>
parents: 6920
diff changeset
319 count = call_sv(handler->callback, G_EVAL | G_SCALAR);
6567
761a1feb5561 [gaim-migrate @ 7089]
Christian Hammond <chipx86@chipx86.com>
parents: 6566
diff changeset
320
761a1feb5561 [gaim-migrate @ 7089]
Christian Hammond <chipx86@chipx86.com>
parents: 6566
diff changeset
321 SPAGAIN;
6549
8e6ba2a45698 [gaim-migrate @ 7071]
Christian Hammond <chipx86@chipx86.com>
parents: 6520
diff changeset
322
6567
761a1feb5561 [gaim-migrate @ 7089]
Christian Hammond <chipx86@chipx86.com>
parents: 6566
diff changeset
323 if (count != 1)
761a1feb5561 [gaim-migrate @ 7089]
Christian Hammond <chipx86@chipx86.com>
parents: 6566
diff changeset
324 croak("Uh oh! call_sv returned %i != 1", i);
761a1feb5561 [gaim-migrate @ 7089]
Christian Hammond <chipx86@chipx86.com>
parents: 6566
diff changeset
325 else
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
326 ret_val = purple_perl_data_from_sv(ret_value, POPs);
12803
14d095d68300 [gaim-migrate @ 15150]
Etan Reisner <deryni@pidgin.im>
parents: 12165
diff changeset
327 } else {
19336
065a79d2d0e5 Make perl loader more robust - use G_EVAL flag on all calls so that if the perl function dies, it doesn't cause libpurple to quit.
Daniel Atallah <datallah@pidgin.im>
parents: 18165
diff changeset
328 call_sv(handler->callback, G_EVAL | G_SCALAR);
6549
8e6ba2a45698 [gaim-migrate @ 7071]
Christian Hammond <chipx86@chipx86.com>
parents: 6520
diff changeset
329
6921
3d49b89fc920 [gaim-migrate @ 7468]
Christian Hammond <chipx86@chipx86.com>
parents: 6920
diff changeset
330 SPAGAIN;
3d49b89fc920 [gaim-migrate @ 7468]
Christian Hammond <chipx86@chipx86.com>
parents: 6920
diff changeset
331 }
3d49b89fc920 [gaim-migrate @ 7468]
Christian Hammond <chipx86@chipx86.com>
parents: 6920
diff changeset
332
12803
14d095d68300 [gaim-migrate @ 15150]
Etan Reisner <deryni@pidgin.im>
parents: 12165
diff changeset
333 if (SvTRUE(ERRSV)) {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
334 purple_debug_error("perl",
12803
14d095d68300 [gaim-migrate @ 15150]
Etan Reisner <deryni@pidgin.im>
parents: 12165
diff changeset
335 "Perl function exited abnormally: %s\n",
14d095d68300 [gaim-migrate @ 15150]
Etan Reisner <deryni@pidgin.im>
parents: 12165
diff changeset
336 SvPV(ERRSV, na));
6921
3d49b89fc920 [gaim-migrate @ 7468]
Christian Hammond <chipx86@chipx86.com>
parents: 6920
diff changeset
337 }
3d49b89fc920 [gaim-migrate @ 7468]
Christian Hammond <chipx86@chipx86.com>
parents: 6920
diff changeset
338
6919
2fd7ce2393f7 [gaim-migrate @ 7466]
Christian Hammond <chipx86@chipx86.com>
parents: 6568
diff changeset
339 /* See if any parameters changed. */
12803
14d095d68300 [gaim-migrate @ 15150]
Etan Reisner <deryni@pidgin.im>
parents: 12165
diff changeset
340 for (i = 0; i < value_count; i++) {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
341 if (purple_value_is_outgoing(values[i])) {
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
342 switch (purple_value_get_type(values[i])) {
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
343 case PURPLE_TYPE_BOOLEAN:
6921
3d49b89fc920 [gaim-migrate @ 7468]
Christian Hammond <chipx86@chipx86.com>
parents: 6920
diff changeset
344 *((gboolean *)copy_args[i]) = SvIV(sv_args[i]);
3d49b89fc920 [gaim-migrate @ 7468]
Christian Hammond <chipx86@chipx86.com>
parents: 6920
diff changeset
345 break;
3d49b89fc920 [gaim-migrate @ 7468]
Christian Hammond <chipx86@chipx86.com>
parents: 6920
diff changeset
346
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
347 case PURPLE_TYPE_INT:
6921
3d49b89fc920 [gaim-migrate @ 7468]
Christian Hammond <chipx86@chipx86.com>
parents: 6920
diff changeset
348 *((int *)copy_args[i]) = SvIV(sv_args[i]);
3d49b89fc920 [gaim-migrate @ 7468]
Christian Hammond <chipx86@chipx86.com>
parents: 6920
diff changeset
349 break;
3d49b89fc920 [gaim-migrate @ 7468]
Christian Hammond <chipx86@chipx86.com>
parents: 6920
diff changeset
350
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
351 case PURPLE_TYPE_UINT:
6921
3d49b89fc920 [gaim-migrate @ 7468]
Christian Hammond <chipx86@chipx86.com>
parents: 6920
diff changeset
352 *((unsigned int *)copy_args[i]) = SvUV(sv_args[i]);
3d49b89fc920 [gaim-migrate @ 7468]
Christian Hammond <chipx86@chipx86.com>
parents: 6920
diff changeset
353 break;
3d49b89fc920 [gaim-migrate @ 7468]
Christian Hammond <chipx86@chipx86.com>
parents: 6920
diff changeset
354
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
355 case PURPLE_TYPE_LONG:
6921
3d49b89fc920 [gaim-migrate @ 7468]
Christian Hammond <chipx86@chipx86.com>
parents: 6920
diff changeset
356 *((long *)copy_args[i]) = SvIV(sv_args[i]);
3d49b89fc920 [gaim-migrate @ 7468]
Christian Hammond <chipx86@chipx86.com>
parents: 6920
diff changeset
357 break;
3d49b89fc920 [gaim-migrate @ 7468]
Christian Hammond <chipx86@chipx86.com>
parents: 6920
diff changeset
358
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
359 case PURPLE_TYPE_ULONG:
6921
3d49b89fc920 [gaim-migrate @ 7468]
Christian Hammond <chipx86@chipx86.com>
parents: 6920
diff changeset
360 *((unsigned long *)copy_args[i]) = SvUV(sv_args[i]);
3d49b89fc920 [gaim-migrate @ 7468]
Christian Hammond <chipx86@chipx86.com>
parents: 6920
diff changeset
361 break;
3d49b89fc920 [gaim-migrate @ 7468]
Christian Hammond <chipx86@chipx86.com>
parents: 6920
diff changeset
362
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
363 case PURPLE_TYPE_INT64:
6921
3d49b89fc920 [gaim-migrate @ 7468]
Christian Hammond <chipx86@chipx86.com>
parents: 6920
diff changeset
364 *((gint64 *)copy_args[i]) = SvIV(sv_args[i]);
3d49b89fc920 [gaim-migrate @ 7468]
Christian Hammond <chipx86@chipx86.com>
parents: 6920
diff changeset
365 break;
3d49b89fc920 [gaim-migrate @ 7468]
Christian Hammond <chipx86@chipx86.com>
parents: 6920
diff changeset
366
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
367 case PURPLE_TYPE_UINT64:
6921
3d49b89fc920 [gaim-migrate @ 7468]
Christian Hammond <chipx86@chipx86.com>
parents: 6920
diff changeset
368 *((guint64 *)copy_args[i]) = SvUV(sv_args[i]);
3d49b89fc920 [gaim-migrate @ 7468]
Christian Hammond <chipx86@chipx86.com>
parents: 6920
diff changeset
369 break;
3d49b89fc920 [gaim-migrate @ 7468]
Christian Hammond <chipx86@chipx86.com>
parents: 6920
diff changeset
370
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
371 case PURPLE_TYPE_STRING:
12803
14d095d68300 [gaim-migrate @ 15150]
Etan Reisner <deryni@pidgin.im>
parents: 12165
diff changeset
372 if (strcmp(*((char **)copy_args[i]), SvPVX(sv_args[i]))) {
6925
ace22b159921 [gaim-migrate @ 7472]
Christian Hammond <chipx86@chipx86.com>
parents: 6924
diff changeset
373 g_free(*((char **)copy_args[i]));
ace22b159921 [gaim-migrate @ 7472]
Christian Hammond <chipx86@chipx86.com>
parents: 6924
diff changeset
374 *((char **)copy_args[i]) =
ace22b159921 [gaim-migrate @ 7472]
Christian Hammond <chipx86@chipx86.com>
parents: 6924
diff changeset
375 g_strdup(SvPV(sv_args[i], na));
ace22b159921 [gaim-migrate @ 7472]
Christian Hammond <chipx86@chipx86.com>
parents: 6924
diff changeset
376 }
6921
3d49b89fc920 [gaim-migrate @ 7468]
Christian Hammond <chipx86@chipx86.com>
parents: 6920
diff changeset
377 break;
3d49b89fc920 [gaim-migrate @ 7468]
Christian Hammond <chipx86@chipx86.com>
parents: 6920
diff changeset
378
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
379 case PURPLE_TYPE_POINTER:
6921
3d49b89fc920 [gaim-migrate @ 7468]
Christian Hammond <chipx86@chipx86.com>
parents: 6920
diff changeset
380 *((void **)copy_args[i]) = (void *)SvIV(sv_args[i]);
3d49b89fc920 [gaim-migrate @ 7468]
Christian Hammond <chipx86@chipx86.com>
parents: 6920
diff changeset
381 break;
3d49b89fc920 [gaim-migrate @ 7468]
Christian Hammond <chipx86@chipx86.com>
parents: 6920
diff changeset
382
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
383 case PURPLE_TYPE_BOXED:
6921
3d49b89fc920 [gaim-migrate @ 7468]
Christian Hammond <chipx86@chipx86.com>
parents: 6920
diff changeset
384 *((void **)copy_args[i]) = (void *)SvIV(sv_args[i]);
3d49b89fc920 [gaim-migrate @ 7468]
Christian Hammond <chipx86@chipx86.com>
parents: 6920
diff changeset
385 break;
3d49b89fc920 [gaim-migrate @ 7468]
Christian Hammond <chipx86@chipx86.com>
parents: 6920
diff changeset
386
3d49b89fc920 [gaim-migrate @ 7468]
Christian Hammond <chipx86@chipx86.com>
parents: 6920
diff changeset
387 default:
3d49b89fc920 [gaim-migrate @ 7468]
Christian Hammond <chipx86@chipx86.com>
parents: 6920
diff changeset
388 break;
3d49b89fc920 [gaim-migrate @ 7468]
Christian Hammond <chipx86@chipx86.com>
parents: 6920
diff changeset
389 }
3d49b89fc920 [gaim-migrate @ 7468]
Christian Hammond <chipx86@chipx86.com>
parents: 6920
diff changeset
390
3d49b89fc920 [gaim-migrate @ 7468]
Christian Hammond <chipx86@chipx86.com>
parents: 6920
diff changeset
391 #if 0
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
392 *((void **)copy_args[i]) = purple_perl_data_from_sv(values[i],
6920
4f4931b005cb [gaim-migrate @ 7467]
Christian Hammond <chipx86@chipx86.com>
parents: 6919
diff changeset
393 sv_args[i]);
6921
3d49b89fc920 [gaim-migrate @ 7468]
Christian Hammond <chipx86@chipx86.com>
parents: 6920
diff changeset
394 #endif
6919
2fd7ce2393f7 [gaim-migrate @ 7466]
Christian Hammond <chipx86@chipx86.com>
parents: 6568
diff changeset
395 }
2fd7ce2393f7 [gaim-migrate @ 7466]
Christian Hammond <chipx86@chipx86.com>
parents: 6568
diff changeset
396 }
2fd7ce2393f7 [gaim-migrate @ 7466]
Christian Hammond <chipx86@chipx86.com>
parents: 6568
diff changeset
397
6921
3d49b89fc920 [gaim-migrate @ 7468]
Christian Hammond <chipx86@chipx86.com>
parents: 6920
diff changeset
398 PUTBACK;
6549
8e6ba2a45698 [gaim-migrate @ 7071]
Christian Hammond <chipx86@chipx86.com>
parents: 6520
diff changeset
399 FREETMPS;
8e6ba2a45698 [gaim-migrate @ 7071]
Christian Hammond <chipx86@chipx86.com>
parents: 6520
diff changeset
400 LEAVE;
8e6ba2a45698 [gaim-migrate @ 7071]
Christian Hammond <chipx86@chipx86.com>
parents: 6520
diff changeset
401
6919
2fd7ce2393f7 [gaim-migrate @ 7466]
Christian Hammond <chipx86@chipx86.com>
parents: 6568
diff changeset
402 g_free(sv_args);
6920
4f4931b005cb [gaim-migrate @ 7467]
Christian Hammond <chipx86@chipx86.com>
parents: 6919
diff changeset
403 g_free(copy_args);
6919
2fd7ce2393f7 [gaim-migrate @ 7466]
Christian Hammond <chipx86@chipx86.com>
parents: 6568
diff changeset
404
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
405 purple_debug_misc("perl", "ret_val = %p\n", ret_val);
6919
2fd7ce2393f7 [gaim-migrate @ 7466]
Christian Hammond <chipx86@chipx86.com>
parents: 6568
diff changeset
406
6549
8e6ba2a45698 [gaim-migrate @ 7071]
Christian Hammond <chipx86@chipx86.com>
parents: 6520
diff changeset
407 return ret_val;
8e6ba2a45698 [gaim-migrate @ 7071]
Christian Hammond <chipx86@chipx86.com>
parents: 6520
diff changeset
408 }
8e6ba2a45698 [gaim-migrate @ 7071]
Christian Hammond <chipx86@chipx86.com>
parents: 6520
diff changeset
409
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
410 static PurplePerlSignalHandler *
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
411 find_signal_handler(PurplePlugin *plugin, void *instance, const char *signal)
6549
8e6ba2a45698 [gaim-migrate @ 7071]
Christian Hammond <chipx86@chipx86.com>
parents: 6520
diff changeset
412 {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
413 PurplePerlSignalHandler *handler;
6549
8e6ba2a45698 [gaim-migrate @ 7071]
Christian Hammond <chipx86@chipx86.com>
parents: 6520
diff changeset
414 GList *l;
8e6ba2a45698 [gaim-migrate @ 7071]
Christian Hammond <chipx86@chipx86.com>
parents: 6520
diff changeset
415
12803
14d095d68300 [gaim-migrate @ 15150]
Etan Reisner <deryni@pidgin.im>
parents: 12165
diff changeset
416 for (l = signal_handlers; l != NULL; l = l->next) {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
417 handler = (PurplePerlSignalHandler *)l->data;
6549
8e6ba2a45698 [gaim-migrate @ 7071]
Christian Hammond <chipx86@chipx86.com>
parents: 6520
diff changeset
418
8e6ba2a45698 [gaim-migrate @ 7071]
Christian Hammond <chipx86@chipx86.com>
parents: 6520
diff changeset
419 if (handler->plugin == plugin &&
8e6ba2a45698 [gaim-migrate @ 7071]
Christian Hammond <chipx86@chipx86.com>
parents: 6520
diff changeset
420 handler->instance == instance &&
12803
14d095d68300 [gaim-migrate @ 15150]
Etan Reisner <deryni@pidgin.im>
parents: 12165
diff changeset
421 !strcmp(handler->signal, signal)) {
6549
8e6ba2a45698 [gaim-migrate @ 7071]
Christian Hammond <chipx86@chipx86.com>
parents: 6520
diff changeset
422 return handler;
8e6ba2a45698 [gaim-migrate @ 7071]
Christian Hammond <chipx86@chipx86.com>
parents: 6520
diff changeset
423 }
8e6ba2a45698 [gaim-migrate @ 7071]
Christian Hammond <chipx86@chipx86.com>
parents: 6520
diff changeset
424 }
8e6ba2a45698 [gaim-migrate @ 7071]
Christian Hammond <chipx86@chipx86.com>
parents: 6520
diff changeset
425
8e6ba2a45698 [gaim-migrate @ 7071]
Christian Hammond <chipx86@chipx86.com>
parents: 6520
diff changeset
426 return NULL;
8e6ba2a45698 [gaim-migrate @ 7071]
Christian Hammond <chipx86@chipx86.com>
parents: 6520
diff changeset
427 }
8e6ba2a45698 [gaim-migrate @ 7071]
Christian Hammond <chipx86@chipx86.com>
parents: 6520
diff changeset
428
22845
7ccb529edf3f Add the recent perl callback changes to ChangeLog.API.
Etan Reisner <deryni@pidgin.im>
parents: 19336
diff changeset
429 guint
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
430 purple_perl_timeout_add(PurplePlugin *plugin, int seconds, SV *callback, SV *data)
6520
5386692555c9 [gaim-migrate @ 7037]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
431 {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
432 PurplePerlTimeoutHandler *handler;
6520
5386692555c9 [gaim-migrate @ 7037]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
433
12803
14d095d68300 [gaim-migrate @ 15150]
Etan Reisner <deryni@pidgin.im>
parents: 12165
diff changeset
434 if (plugin == NULL) {
6549
8e6ba2a45698 [gaim-migrate @ 7071]
Christian Hammond <chipx86@chipx86.com>
parents: 6520
diff changeset
435 croak("Invalid handle in adding perl timeout handler.\n");
22845
7ccb529edf3f Add the recent perl callback changes to ChangeLog.API.
Etan Reisner <deryni@pidgin.im>
parents: 19336
diff changeset
436 return 0;
6520
5386692555c9 [gaim-migrate @ 7037]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
437 }
5386692555c9 [gaim-migrate @ 7037]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
438
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
439 handler = g_new0(PurplePerlTimeoutHandler, 1);
6520
5386692555c9 [gaim-migrate @ 7037]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
440
6568
5c8c70b63dc3 [gaim-migrate @ 7090]
Christian Hammond <chipx86@chipx86.com>
parents: 6567
diff changeset
441 handler->plugin = plugin;
5c8c70b63dc3 [gaim-migrate @ 7090]
Christian Hammond <chipx86@chipx86.com>
parents: 6567
diff changeset
442 handler->callback = (callback != NULL && callback != &PL_sv_undef
13017
d3bcadbf3094 [gaim-migrate @ 15370]
Etan Reisner <deryni@pidgin.im>
parents: 12988
diff changeset
443 ? newSVsv(callback) : NULL);
6568
5c8c70b63dc3 [gaim-migrate @ 7090]
Christian Hammond <chipx86@chipx86.com>
parents: 6567
diff changeset
444 handler->data = (data != NULL && data != &PL_sv_undef
13017
d3bcadbf3094 [gaim-migrate @ 15370]
Etan Reisner <deryni@pidgin.im>
parents: 12988
diff changeset
445 ? newSVsv(data) : NULL);
6520
5386692555c9 [gaim-migrate @ 7037]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
446
5386692555c9 [gaim-migrate @ 7037]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
447 timeout_handlers = g_list_append(timeout_handlers, handler);
6568
5c8c70b63dc3 [gaim-migrate @ 7090]
Christian Hammond <chipx86@chipx86.com>
parents: 6567
diff changeset
448
17570
4cca2fc0ec83 libpurple should not use glib eventloop stuff directly, since we have our
Richard Laager <rlaager@pidgin.im>
parents: 16140
diff changeset
449 handler->iotag = purple_timeout_add(seconds * 1000, perl_timeout_cb, handler);
22845
7ccb529edf3f Add the recent perl callback changes to ChangeLog.API.
Etan Reisner <deryni@pidgin.im>
parents: 19336
diff changeset
450
7ccb529edf3f Add the recent perl callback changes to ChangeLog.API.
Etan Reisner <deryni@pidgin.im>
parents: 19336
diff changeset
451 return handler->iotag;
7ccb529edf3f Add the recent perl callback changes to ChangeLog.API.
Etan Reisner <deryni@pidgin.im>
parents: 19336
diff changeset
452 }
7ccb529edf3f Add the recent perl callback changes to ChangeLog.API.
Etan Reisner <deryni@pidgin.im>
parents: 19336
diff changeset
453
7ccb529edf3f Add the recent perl callback changes to ChangeLog.API.
Etan Reisner <deryni@pidgin.im>
parents: 19336
diff changeset
454 gboolean
7ccb529edf3f Add the recent perl callback changes to ChangeLog.API.
Etan Reisner <deryni@pidgin.im>
parents: 19336
diff changeset
455 purple_perl_timeout_remove(guint handle)
7ccb529edf3f Add the recent perl callback changes to ChangeLog.API.
Etan Reisner <deryni@pidgin.im>
parents: 19336
diff changeset
456 {
7ccb529edf3f Add the recent perl callback changes to ChangeLog.API.
Etan Reisner <deryni@pidgin.im>
parents: 19336
diff changeset
457 GList *l, *l_next;
7ccb529edf3f Add the recent perl callback changes to ChangeLog.API.
Etan Reisner <deryni@pidgin.im>
parents: 19336
diff changeset
458
7ccb529edf3f Add the recent perl callback changes to ChangeLog.API.
Etan Reisner <deryni@pidgin.im>
parents: 19336
diff changeset
459 for (l = timeout_handlers; l != NULL; l = l_next) {
7ccb529edf3f Add the recent perl callback changes to ChangeLog.API.
Etan Reisner <deryni@pidgin.im>
parents: 19336
diff changeset
460 PurplePerlTimeoutHandler *handler;
7ccb529edf3f Add the recent perl callback changes to ChangeLog.API.
Etan Reisner <deryni@pidgin.im>
parents: 19336
diff changeset
461
7ccb529edf3f Add the recent perl callback changes to ChangeLog.API.
Etan Reisner <deryni@pidgin.im>
parents: 19336
diff changeset
462 l_next = l->next;
7ccb529edf3f Add the recent perl callback changes to ChangeLog.API.
Etan Reisner <deryni@pidgin.im>
parents: 19336
diff changeset
463
7ccb529edf3f Add the recent perl callback changes to ChangeLog.API.
Etan Reisner <deryni@pidgin.im>
parents: 19336
diff changeset
464 handler = (PurplePerlTimeoutHandler *)l->data;
7ccb529edf3f Add the recent perl callback changes to ChangeLog.API.
Etan Reisner <deryni@pidgin.im>
parents: 19336
diff changeset
465
7ccb529edf3f Add the recent perl callback changes to ChangeLog.API.
Etan Reisner <deryni@pidgin.im>
parents: 19336
diff changeset
466 if (handler->iotag == handle)
7ccb529edf3f Add the recent perl callback changes to ChangeLog.API.
Etan Reisner <deryni@pidgin.im>
parents: 19336
diff changeset
467 return destroy_timeout_handler(handler);
7ccb529edf3f Add the recent perl callback changes to ChangeLog.API.
Etan Reisner <deryni@pidgin.im>
parents: 19336
diff changeset
468 }
7ccb529edf3f Add the recent perl callback changes to ChangeLog.API.
Etan Reisner <deryni@pidgin.im>
parents: 19336
diff changeset
469
7ccb529edf3f Add the recent perl callback changes to ChangeLog.API.
Etan Reisner <deryni@pidgin.im>
parents: 19336
diff changeset
470 purple_debug_info("perl", "No timeout handler found with handle %u.\n",
7ccb529edf3f Add the recent perl callback changes to ChangeLog.API.
Etan Reisner <deryni@pidgin.im>
parents: 19336
diff changeset
471 handle);
7ccb529edf3f Add the recent perl callback changes to ChangeLog.API.
Etan Reisner <deryni@pidgin.im>
parents: 19336
diff changeset
472 return FALSE;
6520
5386692555c9 [gaim-migrate @ 7037]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
473 }
5386692555c9 [gaim-migrate @ 7037]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
474
5386692555c9 [gaim-migrate @ 7037]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
475 void
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
476 purple_perl_timeout_clear_for_plugin(PurplePlugin *plugin)
6520
5386692555c9 [gaim-migrate @ 7037]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
477 {
5386692555c9 [gaim-migrate @ 7037]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
478 GList *l, *l_next;
5386692555c9 [gaim-migrate @ 7037]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
479
12803
14d095d68300 [gaim-migrate @ 15150]
Etan Reisner <deryni@pidgin.im>
parents: 12165
diff changeset
480 for (l = timeout_handlers; l != NULL; l = l_next) {
22845
7ccb529edf3f Add the recent perl callback changes to ChangeLog.API.
Etan Reisner <deryni@pidgin.im>
parents: 19336
diff changeset
481 PurplePerlTimeoutHandler *handler;
7ccb529edf3f Add the recent perl callback changes to ChangeLog.API.
Etan Reisner <deryni@pidgin.im>
parents: 19336
diff changeset
482
6520
5386692555c9 [gaim-migrate @ 7037]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
483 l_next = l->next;
5386692555c9 [gaim-migrate @ 7037]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
484
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
485 handler = (PurplePerlTimeoutHandler *)l->data;
6520
5386692555c9 [gaim-migrate @ 7037]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
486
5386692555c9 [gaim-migrate @ 7037]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
487 if (handler->plugin == plugin)
5386692555c9 [gaim-migrate @ 7037]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
488 destroy_timeout_handler(handler);
5386692555c9 [gaim-migrate @ 7037]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
489 }
5386692555c9 [gaim-migrate @ 7037]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
490 }
5386692555c9 [gaim-migrate @ 7037]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
491
5386692555c9 [gaim-migrate @ 7037]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
492 void
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
493 purple_perl_timeout_clear(void)
6520
5386692555c9 [gaim-migrate @ 7037]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
494 {
6549
8e6ba2a45698 [gaim-migrate @ 7071]
Christian Hammond <chipx86@chipx86.com>
parents: 6520
diff changeset
495 while (timeout_handlers != NULL)
6520
5386692555c9 [gaim-migrate @ 7037]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
496 destroy_timeout_handler(timeout_handlers->data);
5386692555c9 [gaim-migrate @ 7037]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
497 }
5386692555c9 [gaim-migrate @ 7037]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
498
6549
8e6ba2a45698 [gaim-migrate @ 7071]
Christian Hammond <chipx86@chipx86.com>
parents: 6520
diff changeset
499 void
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
500 purple_perl_signal_connect(PurplePlugin *plugin, void *instance,
13191
6c98c6130701 [gaim-migrate @ 15553]
Etan Reisner <deryni@pidgin.im>
parents: 13017
diff changeset
501 const char *signal, SV *callback, SV *data,
6c98c6130701 [gaim-migrate @ 15553]
Etan Reisner <deryni@pidgin.im>
parents: 13017
diff changeset
502 int priority)
6549
8e6ba2a45698 [gaim-migrate @ 7071]
Christian Hammond <chipx86@chipx86.com>
parents: 6520
diff changeset
503 {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
504 PurplePerlSignalHandler *handler;
6549
8e6ba2a45698 [gaim-migrate @ 7071]
Christian Hammond <chipx86@chipx86.com>
parents: 6520
diff changeset
505
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
506 handler = g_new0(PurplePerlSignalHandler, 1);
6549
8e6ba2a45698 [gaim-migrate @ 7071]
Christian Hammond <chipx86@chipx86.com>
parents: 6520
diff changeset
507 handler->plugin = plugin;
8e6ba2a45698 [gaim-migrate @ 7071]
Christian Hammond <chipx86@chipx86.com>
parents: 6520
diff changeset
508 handler->instance = instance;
8e6ba2a45698 [gaim-migrate @ 7071]
Christian Hammond <chipx86@chipx86.com>
parents: 6520
diff changeset
509 handler->signal = g_strdup(signal);
12803
14d095d68300 [gaim-migrate @ 15150]
Etan Reisner <deryni@pidgin.im>
parents: 12165
diff changeset
510 handler->callback = (callback != NULL &&
14d095d68300 [gaim-migrate @ 15150]
Etan Reisner <deryni@pidgin.im>
parents: 12165
diff changeset
511 callback != &PL_sv_undef ? newSVsv(callback)
14d095d68300 [gaim-migrate @ 15150]
Etan Reisner <deryni@pidgin.im>
parents: 12165
diff changeset
512 : NULL);
14d095d68300 [gaim-migrate @ 15150]
Etan Reisner <deryni@pidgin.im>
parents: 12165
diff changeset
513 handler->data = (data != NULL &&
14d095d68300 [gaim-migrate @ 15150]
Etan Reisner <deryni@pidgin.im>
parents: 12165
diff changeset
514 data != &PL_sv_undef ? newSVsv(data) : NULL);
6549
8e6ba2a45698 [gaim-migrate @ 7071]
Christian Hammond <chipx86@chipx86.com>
parents: 6520
diff changeset
515
8e6ba2a45698 [gaim-migrate @ 7071]
Christian Hammond <chipx86@chipx86.com>
parents: 6520
diff changeset
516 signal_handlers = g_list_append(signal_handlers, handler);
8e6ba2a45698 [gaim-migrate @ 7071]
Christian Hammond <chipx86@chipx86.com>
parents: 6520
diff changeset
517
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
518 purple_signal_connect_priority_vargs(instance, signal, plugin,
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
519 PURPLE_CALLBACK(perl_signal_cb),
13191
6c98c6130701 [gaim-migrate @ 15553]
Etan Reisner <deryni@pidgin.im>
parents: 13017
diff changeset
520 handler, priority);
6549
8e6ba2a45698 [gaim-migrate @ 7071]
Christian Hammond <chipx86@chipx86.com>
parents: 6520
diff changeset
521 }
8e6ba2a45698 [gaim-migrate @ 7071]
Christian Hammond <chipx86@chipx86.com>
parents: 6520
diff changeset
522
8e6ba2a45698 [gaim-migrate @ 7071]
Christian Hammond <chipx86@chipx86.com>
parents: 6520
diff changeset
523 void
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
524 purple_perl_signal_disconnect(PurplePlugin *plugin, void *instance,
12803
14d095d68300 [gaim-migrate @ 15150]
Etan Reisner <deryni@pidgin.im>
parents: 12165
diff changeset
525 const char *signal)
6549
8e6ba2a45698 [gaim-migrate @ 7071]
Christian Hammond <chipx86@chipx86.com>
parents: 6520
diff changeset
526 {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
527 PurplePerlSignalHandler *handler;
6549
8e6ba2a45698 [gaim-migrate @ 7071]
Christian Hammond <chipx86@chipx86.com>
parents: 6520
diff changeset
528
6567
761a1feb5561 [gaim-migrate @ 7089]
Christian Hammond <chipx86@chipx86.com>
parents: 6566
diff changeset
529 handler = find_signal_handler(plugin, instance, signal);
6549
8e6ba2a45698 [gaim-migrate @ 7071]
Christian Hammond <chipx86@chipx86.com>
parents: 6520
diff changeset
530
12803
14d095d68300 [gaim-migrate @ 15150]
Etan Reisner <deryni@pidgin.im>
parents: 12165
diff changeset
531 if (handler == NULL) {
6549
8e6ba2a45698 [gaim-migrate @ 7071]
Christian Hammond <chipx86@chipx86.com>
parents: 6520
diff changeset
532 croak("Invalid signal handler information in "
12803
14d095d68300 [gaim-migrate @ 15150]
Etan Reisner <deryni@pidgin.im>
parents: 12165
diff changeset
533 "disconnecting a perl signal handler.\n");
6549
8e6ba2a45698 [gaim-migrate @ 7071]
Christian Hammond <chipx86@chipx86.com>
parents: 6520
diff changeset
534 return;
8e6ba2a45698 [gaim-migrate @ 7071]
Christian Hammond <chipx86@chipx86.com>
parents: 6520
diff changeset
535 }
8e6ba2a45698 [gaim-migrate @ 7071]
Christian Hammond <chipx86@chipx86.com>
parents: 6520
diff changeset
536
8e6ba2a45698 [gaim-migrate @ 7071]
Christian Hammond <chipx86@chipx86.com>
parents: 6520
diff changeset
537 destroy_signal_handler(handler);
8e6ba2a45698 [gaim-migrate @ 7071]
Christian Hammond <chipx86@chipx86.com>
parents: 6520
diff changeset
538 }
8e6ba2a45698 [gaim-migrate @ 7071]
Christian Hammond <chipx86@chipx86.com>
parents: 6520
diff changeset
539
8e6ba2a45698 [gaim-migrate @ 7071]
Christian Hammond <chipx86@chipx86.com>
parents: 6520
diff changeset
540 void
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
541 purple_perl_signal_clear_for_plugin(PurplePlugin *plugin)
6549
8e6ba2a45698 [gaim-migrate @ 7071]
Christian Hammond <chipx86@chipx86.com>
parents: 6520
diff changeset
542 {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
543 PurplePerlSignalHandler *handler;
6549
8e6ba2a45698 [gaim-migrate @ 7071]
Christian Hammond <chipx86@chipx86.com>
parents: 6520
diff changeset
544 GList *l, *l_next;
8e6ba2a45698 [gaim-migrate @ 7071]
Christian Hammond <chipx86@chipx86.com>
parents: 6520
diff changeset
545
12803
14d095d68300 [gaim-migrate @ 15150]
Etan Reisner <deryni@pidgin.im>
parents: 12165
diff changeset
546 for (l = signal_handlers; l != NULL; l = l_next) {
6549
8e6ba2a45698 [gaim-migrate @ 7071]
Christian Hammond <chipx86@chipx86.com>
parents: 6520
diff changeset
547 l_next = l->next;
8e6ba2a45698 [gaim-migrate @ 7071]
Christian Hammond <chipx86@chipx86.com>
parents: 6520
diff changeset
548
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
549 handler = (PurplePerlSignalHandler *)l->data;
6549
8e6ba2a45698 [gaim-migrate @ 7071]
Christian Hammond <chipx86@chipx86.com>
parents: 6520
diff changeset
550
8e6ba2a45698 [gaim-migrate @ 7071]
Christian Hammond <chipx86@chipx86.com>
parents: 6520
diff changeset
551 if (handler->plugin == plugin)
8e6ba2a45698 [gaim-migrate @ 7071]
Christian Hammond <chipx86@chipx86.com>
parents: 6520
diff changeset
552 destroy_signal_handler(handler);
8e6ba2a45698 [gaim-migrate @ 7071]
Christian Hammond <chipx86@chipx86.com>
parents: 6520
diff changeset
553 }
8e6ba2a45698 [gaim-migrate @ 7071]
Christian Hammond <chipx86@chipx86.com>
parents: 6520
diff changeset
554 }
8e6ba2a45698 [gaim-migrate @ 7071]
Christian Hammond <chipx86@chipx86.com>
parents: 6520
diff changeset
555
8e6ba2a45698 [gaim-migrate @ 7071]
Christian Hammond <chipx86@chipx86.com>
parents: 6520
diff changeset
556 void
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
557 purple_perl_signal_clear(void)
6549
8e6ba2a45698 [gaim-migrate @ 7071]
Christian Hammond <chipx86@chipx86.com>
parents: 6520
diff changeset
558 {
8e6ba2a45698 [gaim-migrate @ 7071]
Christian Hammond <chipx86@chipx86.com>
parents: 6520
diff changeset
559 while (signal_handlers != NULL)
8e6ba2a45698 [gaim-migrate @ 7071]
Christian Hammond <chipx86@chipx86.com>
parents: 6520
diff changeset
560 destroy_signal_handler(signal_handlers->data);
8e6ba2a45698 [gaim-migrate @ 7071]
Christian Hammond <chipx86@chipx86.com>
parents: 6520
diff changeset
561 }
12882
44dfc6467081 [gaim-migrate @ 15234]
Etan Reisner <deryni@pidgin.im>
parents: 12874
diff changeset
562
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
563 static PurpleCmdRet
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
564 perl_cmd_cb(PurpleConversation *conv, const gchar *command,
12882
44dfc6467081 [gaim-migrate @ 15234]
Etan Reisner <deryni@pidgin.im>
parents: 12874
diff changeset
565 gchar **args, gchar **error, void *data)
44dfc6467081 [gaim-migrate @ 15234]
Etan Reisner <deryni@pidgin.im>
parents: 12874
diff changeset
566 {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
567 int i = 0, count, ret_value = PURPLE_CMD_RET_OK;
19336
065a79d2d0e5 Make perl loader more robust - use G_EVAL flag on all calls so that if the perl function dies, it doesn't cause libpurple to quit.
Daniel Atallah <datallah@pidgin.im>
parents: 18165
diff changeset
568 STRLEN na;
12882
44dfc6467081 [gaim-migrate @ 15234]
Etan Reisner <deryni@pidgin.im>
parents: 12874
diff changeset
569 SV *cmdSV, *tmpSV, *convSV;
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
570 PurplePerlCmdHandler *handler = (PurplePerlCmdHandler *)data;
12882
44dfc6467081 [gaim-migrate @ 15234]
Etan Reisner <deryni@pidgin.im>
parents: 12874
diff changeset
571
44dfc6467081 [gaim-migrate @ 15234]
Etan Reisner <deryni@pidgin.im>
parents: 12874
diff changeset
572 dSP;
44dfc6467081 [gaim-migrate @ 15234]
Etan Reisner <deryni@pidgin.im>
parents: 12874
diff changeset
573 ENTER;
44dfc6467081 [gaim-migrate @ 15234]
Etan Reisner <deryni@pidgin.im>
parents: 12874
diff changeset
574 SAVETMPS;
44dfc6467081 [gaim-migrate @ 15234]
Etan Reisner <deryni@pidgin.im>
parents: 12874
diff changeset
575 PUSHMARK(SP);
44dfc6467081 [gaim-migrate @ 15234]
Etan Reisner <deryni@pidgin.im>
parents: 12874
diff changeset
576
44dfc6467081 [gaim-migrate @ 15234]
Etan Reisner <deryni@pidgin.im>
parents: 12874
diff changeset
577 /* Push the conversation onto the perl stack */
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
578 convSV = sv_2mortal(purple_perl_bless_object(conv, "Purple::Conversation"));
12882
44dfc6467081 [gaim-migrate @ 15234]
Etan Reisner <deryni@pidgin.im>
parents: 12874
diff changeset
579 XPUSHs(convSV);
44dfc6467081 [gaim-migrate @ 15234]
Etan Reisner <deryni@pidgin.im>
parents: 12874
diff changeset
580
44dfc6467081 [gaim-migrate @ 15234]
Etan Reisner <deryni@pidgin.im>
parents: 12874
diff changeset
581 /* Push the command string onto the perl stack */
44dfc6467081 [gaim-migrate @ 15234]
Etan Reisner <deryni@pidgin.im>
parents: 12874
diff changeset
582 cmdSV = newSVpv(command, 0);
44dfc6467081 [gaim-migrate @ 15234]
Etan Reisner <deryni@pidgin.im>
parents: 12874
diff changeset
583 cmdSV = sv_2mortal(cmdSV);
44dfc6467081 [gaim-migrate @ 15234]
Etan Reisner <deryni@pidgin.im>
parents: 12874
diff changeset
584 XPUSHs(cmdSV);
44dfc6467081 [gaim-migrate @ 15234]
Etan Reisner <deryni@pidgin.im>
parents: 12874
diff changeset
585
44dfc6467081 [gaim-migrate @ 15234]
Etan Reisner <deryni@pidgin.im>
parents: 12874
diff changeset
586 /* Push the data onto the perl stack */
44dfc6467081 [gaim-migrate @ 15234]
Etan Reisner <deryni@pidgin.im>
parents: 12874
diff changeset
587 XPUSHs((SV *)handler->data);
44dfc6467081 [gaim-migrate @ 15234]
Etan Reisner <deryni@pidgin.im>
parents: 12874
diff changeset
588
44dfc6467081 [gaim-migrate @ 15234]
Etan Reisner <deryni@pidgin.im>
parents: 12874
diff changeset
589 /* Push any arguments we may have */
44dfc6467081 [gaim-migrate @ 15234]
Etan Reisner <deryni@pidgin.im>
parents: 12874
diff changeset
590 for (i = 0; args[i] != NULL; i++) {
44dfc6467081 [gaim-migrate @ 15234]
Etan Reisner <deryni@pidgin.im>
parents: 12874
diff changeset
591 /* XXX The mortality of these created SV's should prevent
44dfc6467081 [gaim-migrate @ 15234]
Etan Reisner <deryni@pidgin.im>
parents: 12874
diff changeset
592 * memory issues, if I read/understood everything correctly...
44dfc6467081 [gaim-migrate @ 15234]
Etan Reisner <deryni@pidgin.im>
parents: 12874
diff changeset
593 */
44dfc6467081 [gaim-migrate @ 15234]
Etan Reisner <deryni@pidgin.im>
parents: 12874
diff changeset
594 tmpSV = newSVpv(args[i], 0);
44dfc6467081 [gaim-migrate @ 15234]
Etan Reisner <deryni@pidgin.im>
parents: 12874
diff changeset
595 tmpSV = sv_2mortal(tmpSV);
44dfc6467081 [gaim-migrate @ 15234]
Etan Reisner <deryni@pidgin.im>
parents: 12874
diff changeset
596 XPUSHs(tmpSV);
44dfc6467081 [gaim-migrate @ 15234]
Etan Reisner <deryni@pidgin.im>
parents: 12874
diff changeset
597 }
44dfc6467081 [gaim-migrate @ 15234]
Etan Reisner <deryni@pidgin.im>
parents: 12874
diff changeset
598
44dfc6467081 [gaim-migrate @ 15234]
Etan Reisner <deryni@pidgin.im>
parents: 12874
diff changeset
599 PUTBACK;
19336
065a79d2d0e5 Make perl loader more robust - use G_EVAL flag on all calls so that if the perl function dies, it doesn't cause libpurple to quit.
Daniel Atallah <datallah@pidgin.im>
parents: 18165
diff changeset
600 count = call_sv(handler->callback, G_EVAL | G_SCALAR);
12882
44dfc6467081 [gaim-migrate @ 15234]
Etan Reisner <deryni@pidgin.im>
parents: 12874
diff changeset
601
44dfc6467081 [gaim-migrate @ 15234]
Etan Reisner <deryni@pidgin.im>
parents: 12874
diff changeset
602 if (count != 1)
44dfc6467081 [gaim-migrate @ 15234]
Etan Reisner <deryni@pidgin.im>
parents: 12874
diff changeset
603 croak("call_sv: Did not return the correct number of values.\n");
44dfc6467081 [gaim-migrate @ 15234]
Etan Reisner <deryni@pidgin.im>
parents: 12874
diff changeset
604
19336
065a79d2d0e5 Make perl loader more robust - use G_EVAL flag on all calls so that if the perl function dies, it doesn't cause libpurple to quit.
Daniel Atallah <datallah@pidgin.im>
parents: 18165
diff changeset
605 if (SvTRUE(ERRSV)) {
065a79d2d0e5 Make perl loader more robust - use G_EVAL flag on all calls so that if the perl function dies, it doesn't cause libpurple to quit.
Daniel Atallah <datallah@pidgin.im>
parents: 18165
diff changeset
606 purple_debug_error("perl",
065a79d2d0e5 Make perl loader more robust - use G_EVAL flag on all calls so that if the perl function dies, it doesn't cause libpurple to quit.
Daniel Atallah <datallah@pidgin.im>
parents: 18165
diff changeset
607 "Perl plugin command function exited abnormally: %s\n",
065a79d2d0e5 Make perl loader more robust - use G_EVAL flag on all calls so that if the perl function dies, it doesn't cause libpurple to quit.
Daniel Atallah <datallah@pidgin.im>
parents: 18165
diff changeset
608 SvPV(ERRSV, na));
065a79d2d0e5 Make perl loader more robust - use G_EVAL flag on all calls so that if the perl function dies, it doesn't cause libpurple to quit.
Daniel Atallah <datallah@pidgin.im>
parents: 18165
diff changeset
609 }
065a79d2d0e5 Make perl loader more robust - use G_EVAL flag on all calls so that if the perl function dies, it doesn't cause libpurple to quit.
Daniel Atallah <datallah@pidgin.im>
parents: 18165
diff changeset
610
12882
44dfc6467081 [gaim-migrate @ 15234]
Etan Reisner <deryni@pidgin.im>
parents: 12874
diff changeset
611 SPAGAIN;
44dfc6467081 [gaim-migrate @ 15234]
Etan Reisner <deryni@pidgin.im>
parents: 12874
diff changeset
612
44dfc6467081 [gaim-migrate @ 15234]
Etan Reisner <deryni@pidgin.im>
parents: 12874
diff changeset
613 ret_value = POPi;
44dfc6467081 [gaim-migrate @ 15234]
Etan Reisner <deryni@pidgin.im>
parents: 12874
diff changeset
614
44dfc6467081 [gaim-migrate @ 15234]
Etan Reisner <deryni@pidgin.im>
parents: 12874
diff changeset
615 PUTBACK;
44dfc6467081 [gaim-migrate @ 15234]
Etan Reisner <deryni@pidgin.im>
parents: 12874
diff changeset
616 FREETMPS;
44dfc6467081 [gaim-migrate @ 15234]
Etan Reisner <deryni@pidgin.im>
parents: 12874
diff changeset
617 LEAVE;
44dfc6467081 [gaim-migrate @ 15234]
Etan Reisner <deryni@pidgin.im>
parents: 12874
diff changeset
618
44dfc6467081 [gaim-migrate @ 15234]
Etan Reisner <deryni@pidgin.im>
parents: 12874
diff changeset
619 return ret_value;
44dfc6467081 [gaim-migrate @ 15234]
Etan Reisner <deryni@pidgin.im>
parents: 12874
diff changeset
620 }
44dfc6467081 [gaim-migrate @ 15234]
Etan Reisner <deryni@pidgin.im>
parents: 12874
diff changeset
621
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
622 PurpleCmdId
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
623 purple_perl_cmd_register(PurplePlugin *plugin, const gchar *command,
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
624 const gchar *args, PurpleCmdPriority priority,
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
625 PurpleCmdFlag flag, const gchar *prpl_id, SV *callback,
12882
44dfc6467081 [gaim-migrate @ 15234]
Etan Reisner <deryni@pidgin.im>
parents: 12874
diff changeset
626 const gchar *helpstr, SV *data)
44dfc6467081 [gaim-migrate @ 15234]
Etan Reisner <deryni@pidgin.im>
parents: 12874
diff changeset
627 {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
628 PurplePerlCmdHandler *handler;
12882
44dfc6467081 [gaim-migrate @ 15234]
Etan Reisner <deryni@pidgin.im>
parents: 12874
diff changeset
629
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
630 handler = g_new0(PurplePerlCmdHandler, 1);
12882
44dfc6467081 [gaim-migrate @ 15234]
Etan Reisner <deryni@pidgin.im>
parents: 12874
diff changeset
631 handler->plugin = plugin;
44dfc6467081 [gaim-migrate @ 15234]
Etan Reisner <deryni@pidgin.im>
parents: 12874
diff changeset
632 handler->cmd = g_strdup(command);
44dfc6467081 [gaim-migrate @ 15234]
Etan Reisner <deryni@pidgin.im>
parents: 12874
diff changeset
633 handler->prpl_id = g_strdup(prpl_id);
44dfc6467081 [gaim-migrate @ 15234]
Etan Reisner <deryni@pidgin.im>
parents: 12874
diff changeset
634
44dfc6467081 [gaim-migrate @ 15234]
Etan Reisner <deryni@pidgin.im>
parents: 12874
diff changeset
635 if (callback != NULL && callback != &PL_sv_undef)
44dfc6467081 [gaim-migrate @ 15234]
Etan Reisner <deryni@pidgin.im>
parents: 12874
diff changeset
636 handler->callback = newSVsv(callback);
44dfc6467081 [gaim-migrate @ 15234]
Etan Reisner <deryni@pidgin.im>
parents: 12874
diff changeset
637 else
44dfc6467081 [gaim-migrate @ 15234]
Etan Reisner <deryni@pidgin.im>
parents: 12874
diff changeset
638 handler->callback = NULL;
44dfc6467081 [gaim-migrate @ 15234]
Etan Reisner <deryni@pidgin.im>
parents: 12874
diff changeset
639
44dfc6467081 [gaim-migrate @ 15234]
Etan Reisner <deryni@pidgin.im>
parents: 12874
diff changeset
640 if (data != NULL && data != &PL_sv_undef)
44dfc6467081 [gaim-migrate @ 15234]
Etan Reisner <deryni@pidgin.im>
parents: 12874
diff changeset
641 handler->data = newSVsv(data);
44dfc6467081 [gaim-migrate @ 15234]
Etan Reisner <deryni@pidgin.im>
parents: 12874
diff changeset
642 else
44dfc6467081 [gaim-migrate @ 15234]
Etan Reisner <deryni@pidgin.im>
parents: 12874
diff changeset
643 handler->data = NULL;
44dfc6467081 [gaim-migrate @ 15234]
Etan Reisner <deryni@pidgin.im>
parents: 12874
diff changeset
644
44dfc6467081 [gaim-migrate @ 15234]
Etan Reisner <deryni@pidgin.im>
parents: 12874
diff changeset
645 cmd_handlers = g_list_append(cmd_handlers, handler);
44dfc6467081 [gaim-migrate @ 15234]
Etan Reisner <deryni@pidgin.im>
parents: 12874
diff changeset
646
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
647 handler->id = purple_cmd_register(command, args, priority, flag, prpl_id,
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
648 PURPLE_CMD_FUNC(perl_cmd_cb), helpstr,
12882
44dfc6467081 [gaim-migrate @ 15234]
Etan Reisner <deryni@pidgin.im>
parents: 12874
diff changeset
649 handler);
44dfc6467081 [gaim-migrate @ 15234]
Etan Reisner <deryni@pidgin.im>
parents: 12874
diff changeset
650
44dfc6467081 [gaim-migrate @ 15234]
Etan Reisner <deryni@pidgin.im>
parents: 12874
diff changeset
651 return handler->id;
44dfc6467081 [gaim-migrate @ 15234]
Etan Reisner <deryni@pidgin.im>
parents: 12874
diff changeset
652 }
44dfc6467081 [gaim-migrate @ 15234]
Etan Reisner <deryni@pidgin.im>
parents: 12874
diff changeset
653
44dfc6467081 [gaim-migrate @ 15234]
Etan Reisner <deryni@pidgin.im>
parents: 12874
diff changeset
654 static void
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
655 destroy_cmd_handler(PurplePerlCmdHandler *handler)
12882
44dfc6467081 [gaim-migrate @ 15234]
Etan Reisner <deryni@pidgin.im>
parents: 12874
diff changeset
656 {
44dfc6467081 [gaim-migrate @ 15234]
Etan Reisner <deryni@pidgin.im>
parents: 12874
diff changeset
657 cmd_handlers = g_list_remove(cmd_handlers, handler);
44dfc6467081 [gaim-migrate @ 15234]
Etan Reisner <deryni@pidgin.im>
parents: 12874
diff changeset
658
44dfc6467081 [gaim-migrate @ 15234]
Etan Reisner <deryni@pidgin.im>
parents: 12874
diff changeset
659 if (handler->callback != NULL)
44dfc6467081 [gaim-migrate @ 15234]
Etan Reisner <deryni@pidgin.im>
parents: 12874
diff changeset
660 SvREFCNT_dec(handler->callback);
44dfc6467081 [gaim-migrate @ 15234]
Etan Reisner <deryni@pidgin.im>
parents: 12874
diff changeset
661
44dfc6467081 [gaim-migrate @ 15234]
Etan Reisner <deryni@pidgin.im>
parents: 12874
diff changeset
662 if (handler->data != NULL)
44dfc6467081 [gaim-migrate @ 15234]
Etan Reisner <deryni@pidgin.im>
parents: 12874
diff changeset
663 SvREFCNT_dec(handler->data);
44dfc6467081 [gaim-migrate @ 15234]
Etan Reisner <deryni@pidgin.im>
parents: 12874
diff changeset
664
44dfc6467081 [gaim-migrate @ 15234]
Etan Reisner <deryni@pidgin.im>
parents: 12874
diff changeset
665 g_free(handler->cmd);
44dfc6467081 [gaim-migrate @ 15234]
Etan Reisner <deryni@pidgin.im>
parents: 12874
diff changeset
666 g_free(handler->prpl_id);
44dfc6467081 [gaim-migrate @ 15234]
Etan Reisner <deryni@pidgin.im>
parents: 12874
diff changeset
667 g_free(handler);
44dfc6467081 [gaim-migrate @ 15234]
Etan Reisner <deryni@pidgin.im>
parents: 12874
diff changeset
668 }
44dfc6467081 [gaim-migrate @ 15234]
Etan Reisner <deryni@pidgin.im>
parents: 12874
diff changeset
669
44dfc6467081 [gaim-migrate @ 15234]
Etan Reisner <deryni@pidgin.im>
parents: 12874
diff changeset
670 void
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
671 purple_perl_cmd_clear_for_plugin(PurplePlugin *plugin)
12882
44dfc6467081 [gaim-migrate @ 15234]
Etan Reisner <deryni@pidgin.im>
parents: 12874
diff changeset
672 {
44dfc6467081 [gaim-migrate @ 15234]
Etan Reisner <deryni@pidgin.im>
parents: 12874
diff changeset
673 GList *l, *l_next;
44dfc6467081 [gaim-migrate @ 15234]
Etan Reisner <deryni@pidgin.im>
parents: 12874
diff changeset
674
44dfc6467081 [gaim-migrate @ 15234]
Etan Reisner <deryni@pidgin.im>
parents: 12874
diff changeset
675 for (l = cmd_handlers; l != NULL; l = l_next) {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
676 PurplePerlCmdHandler *handler = (PurplePerlCmdHandler *)l->data;
12882
44dfc6467081 [gaim-migrate @ 15234]
Etan Reisner <deryni@pidgin.im>
parents: 12874
diff changeset
677
44dfc6467081 [gaim-migrate @ 15234]
Etan Reisner <deryni@pidgin.im>
parents: 12874
diff changeset
678 l_next = l->next;
44dfc6467081 [gaim-migrate @ 15234]
Etan Reisner <deryni@pidgin.im>
parents: 12874
diff changeset
679
44dfc6467081 [gaim-migrate @ 15234]
Etan Reisner <deryni@pidgin.im>
parents: 12874
diff changeset
680 if (handler->plugin == plugin)
44dfc6467081 [gaim-migrate @ 15234]
Etan Reisner <deryni@pidgin.im>
parents: 12874
diff changeset
681 destroy_cmd_handler(handler);
44dfc6467081 [gaim-migrate @ 15234]
Etan Reisner <deryni@pidgin.im>
parents: 12874
diff changeset
682 }
44dfc6467081 [gaim-migrate @ 15234]
Etan Reisner <deryni@pidgin.im>
parents: 12874
diff changeset
683 }
44dfc6467081 [gaim-migrate @ 15234]
Etan Reisner <deryni@pidgin.im>
parents: 12874
diff changeset
684
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
685 static PurplePerlCmdHandler *
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
686 find_cmd_handler(PurpleCmdId id)
12882
44dfc6467081 [gaim-migrate @ 15234]
Etan Reisner <deryni@pidgin.im>
parents: 12874
diff changeset
687 {
44dfc6467081 [gaim-migrate @ 15234]
Etan Reisner <deryni@pidgin.im>
parents: 12874
diff changeset
688 GList *l;
44dfc6467081 [gaim-migrate @ 15234]
Etan Reisner <deryni@pidgin.im>
parents: 12874
diff changeset
689
44dfc6467081 [gaim-migrate @ 15234]
Etan Reisner <deryni@pidgin.im>
parents: 12874
diff changeset
690 for (l = cmd_handlers; l != NULL; l = l->next) {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
691 PurplePerlCmdHandler *handler = (PurplePerlCmdHandler *)l->data;
12882
44dfc6467081 [gaim-migrate @ 15234]
Etan Reisner <deryni@pidgin.im>
parents: 12874
diff changeset
692
44dfc6467081 [gaim-migrate @ 15234]
Etan Reisner <deryni@pidgin.im>
parents: 12874
diff changeset
693 if (handler->id == id)
44dfc6467081 [gaim-migrate @ 15234]
Etan Reisner <deryni@pidgin.im>
parents: 12874
diff changeset
694 return handler;
44dfc6467081 [gaim-migrate @ 15234]
Etan Reisner <deryni@pidgin.im>
parents: 12874
diff changeset
695 }
44dfc6467081 [gaim-migrate @ 15234]
Etan Reisner <deryni@pidgin.im>
parents: 12874
diff changeset
696
44dfc6467081 [gaim-migrate @ 15234]
Etan Reisner <deryni@pidgin.im>
parents: 12874
diff changeset
697 return NULL;
44dfc6467081 [gaim-migrate @ 15234]
Etan Reisner <deryni@pidgin.im>
parents: 12874
diff changeset
698 }
44dfc6467081 [gaim-migrate @ 15234]
Etan Reisner <deryni@pidgin.im>
parents: 12874
diff changeset
699
44dfc6467081 [gaim-migrate @ 15234]
Etan Reisner <deryni@pidgin.im>
parents: 12874
diff changeset
700 void
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
701 purple_perl_cmd_unregister(PurpleCmdId id)
12882
44dfc6467081 [gaim-migrate @ 15234]
Etan Reisner <deryni@pidgin.im>
parents: 12874
diff changeset
702 {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
703 PurplePerlCmdHandler *handler;
12882
44dfc6467081 [gaim-migrate @ 15234]
Etan Reisner <deryni@pidgin.im>
parents: 12874
diff changeset
704
44dfc6467081 [gaim-migrate @ 15234]
Etan Reisner <deryni@pidgin.im>
parents: 12874
diff changeset
705 handler = find_cmd_handler(id);
44dfc6467081 [gaim-migrate @ 15234]
Etan Reisner <deryni@pidgin.im>
parents: 12874
diff changeset
706
44dfc6467081 [gaim-migrate @ 15234]
Etan Reisner <deryni@pidgin.im>
parents: 12874
diff changeset
707 if (handler == NULL) {
44dfc6467081 [gaim-migrate @ 15234]
Etan Reisner <deryni@pidgin.im>
parents: 12874
diff changeset
708 croak("Invalid command id in removing a perl command handler.\n");
44dfc6467081 [gaim-migrate @ 15234]
Etan Reisner <deryni@pidgin.im>
parents: 12874
diff changeset
709 return;
44dfc6467081 [gaim-migrate @ 15234]
Etan Reisner <deryni@pidgin.im>
parents: 12874
diff changeset
710 }
44dfc6467081 [gaim-migrate @ 15234]
Etan Reisner <deryni@pidgin.im>
parents: 12874
diff changeset
711
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
712 purple_cmd_unregister(id);
12882
44dfc6467081 [gaim-migrate @ 15234]
Etan Reisner <deryni@pidgin.im>
parents: 12874
diff changeset
713 destroy_cmd_handler(handler);
44dfc6467081 [gaim-migrate @ 15234]
Etan Reisner <deryni@pidgin.im>
parents: 12874
diff changeset
714 }

mercurial