| 93 #include "perl-common.h" |
93 #include "perl-common.h" |
| 94 #include "perl-handlers.h" |
94 #include "perl-handlers.h" |
| 95 |
95 |
| 96 #define PERL_PLUGIN_ID "core-perl" |
96 #define PERL_PLUGIN_ID "core-perl" |
| 97 |
97 |
| 98 typedef struct |
|
| 99 { |
|
| 100 GaimPlugin *plugin; |
|
| 101 char *package; |
|
| 102 char *load_sub; |
|
| 103 char *unload_sub; |
|
| 104 } GaimPerlScript; |
|
| 105 |
|
| 106 PerlInterpreter *my_perl = NULL; |
98 PerlInterpreter *my_perl = NULL; |
| |
99 |
| |
100 static GaimPluginUiInfo ui_info = |
| |
101 { |
| |
102 gaim_perl_get_plugin_frame, |
| |
103 0, /* page_num (Reserved) */ |
| |
104 NULL /* frame (Reserved) */ |
| |
105 }; |
| |
106 |
| |
107 static GaimGtkPluginUiInfo gtk_ui_info = |
| |
108 { |
| |
109 gaim_perl_gtk_get_plugin_frame, |
| |
110 0 /* page_num (Reserved) */ |
| |
111 }; |
| 107 |
112 |
| 108 static void |
113 static void |
| 109 #ifdef OLD_PERL |
114 #ifdef OLD_PERL |
| 110 xs_init() |
115 xs_init() |
| 111 #else |
116 #else |
| 342 /* representing the plugin preferences */ |
347 /* representing the plugin preferences */ |
| 343 /* page. */ |
348 /* page. */ |
| 344 /********************************************************/ |
349 /********************************************************/ |
| 345 if ((key = hv_fetch(plugin_info, "prefs_info", |
350 if ((key = hv_fetch(plugin_info, "prefs_info", |
| 346 strlen("prefs_info"), 0))) { |
351 strlen("prefs_info"), 0))) { |
| 347 char *tmp = g_strdup_printf("%s::%s", gps->package, SvPV(*key, len)); |
|
| 348 /* key now is the name of the Perl sub that |
352 /* key now is the name of the Perl sub that |
| 349 * will create a frame for us */ |
353 * will create a frame for us */ |
| 350 info->prefs_info = gaim_perl_plugin_pref(tmp); |
354 gps->prefs_sub = g_strdup_printf("%s::%s", |
| 351 g_free(tmp); |
355 gps->package, |
| |
356 SvPV(*key, len)); |
| |
357 info->prefs_info = &ui_info; |
| 352 } |
358 } |
| 353 |
359 |
| 354 if ((key = hv_fetch(plugin_info, "gtk_prefs_info", |
360 if ((key = hv_fetch(plugin_info, "gtk_prefs_info", |
| 355 strlen("gtk_prefs_info"), 0))) { |
361 strlen("gtk_prefs_info"), 0))) { |
| 356 char *tmp = g_strdup_printf("%s::%s", gps->package, SvPV(*key, len)); |
|
| 357 /* key now is the name of the Perl sub that |
362 /* key now is the name of the Perl sub that |
| 358 * will create a frame for us */ |
363 * will create a frame for us */ |
| 359 info->ui_info = gaim_perl_gtk_plugin_pref(tmp); |
364 gps->gtk_prefs_sub = g_strdup_printf("%s::%s", |
| 360 g_free(tmp); |
365 gps->package, |
| |
366 SvPV(*key, len)); |
| |
367 info->ui_info = >k_ui_info; |
| 361 } |
368 } |
| 362 |
369 |
| 363 /********************************************************/ |
370 /********************************************************/ |
| 364 /* */ |
371 /* */ |
| 365 /* plugin_action - This is given to the plugin info */ |
372 /* plugin_action - This is given to the plugin info */ |
| 535 gps = (GaimPerlScript *)plugin->info->extra_info; |
542 gps = (GaimPerlScript *)plugin->info->extra_info; |
| 536 if (gps != NULL) { |
543 if (gps != NULL) { |
| 537 g_free(gps->load_sub); |
544 g_free(gps->load_sub); |
| 538 g_free(gps->unload_sub); |
545 g_free(gps->unload_sub); |
| 539 g_free(gps->package); |
546 g_free(gps->package); |
| |
547 g_free(gps->prefs_sub); |
| |
548 g_free(gps->gtk_prefs_sub); |
| 540 g_free(gps); |
549 g_free(gps); |
| 541 plugin->info->extra_info = NULL; |
550 plugin->info->extra_info = NULL; |
| 542 } |
551 } |
| 543 } |
552 } |
| 544 } |
553 } |