#include "EXTERN.h" #include "perl.h" #include "XSUB.h" #include "GtkDefs.h" extern int did_we_init_gnome; int did_we_init_panel = 0; static void start_new_callback(const char * param, gpointer data) { AV * args = (AV*)data; SV * handler = *av_fetch(args, 0, 0); int i; dSP; ENTER; SAVETMPS; PUSHMARK(sp); for (i=1;i<=av_len(args);i++) XPUSHs(sv_2mortal(newSVsv(*av_fetch(args, i, 0)))); if (param) XPUSHs(sv_2mortal(newSVpv(param, 0))); PUTBACK; i = perl_call_sv(handler, G_DISCARD); FREETMPS; LEAVE; } void AppletInit_internal(char * app_id, AV * args) { if (!did_we_init_gdk && !did_we_init_gtk && !did_we_init_gnome && !did_we_init_panel) { int argc; char ** argv = 0; AV * ARGV = perl_get_av("ARGV", FALSE); SV * ARGV0 = perl_get_sv("0", FALSE); int i; argc = av_len(ARGV)+2; if (argc) { argv = malloc(sizeof(char*)*argc); argv[0] = SvPV(ARGV0, PL_na); for(i=0;i<=av_len(ARGV);i++) argv[i+1] = SvPV(*av_fetch(ARGV, i, 0), PL_na); } i = argc; applet_widget_init(app_id, NULL , argc, argv, 0, &i, "argv0"); did_we_init_gdk = 1; did_we_init_gtk = 1; did_we_init_gnome = 1; did_we_init_panel = 1; while (i--) av_shift(ARGV); if (argv) free(argv); GtkInit_internal(); /*Gnome_InstallTypedefs(); Gnome_InstallObjects();*/ } } MODULE = Gnome::Panel::AppletWidget PACKAGE = Gnome::Panel::AppletWidget PREFIX = applet_widget_ #ifdef APPLET_WIDGET void init(Class, app_id, start_func=0, ...) SV * Class char * app_id SV * start_func CODE: { AV * args = 0; if (start_func) { args = newAV(); PackCallbackST(args, 2); } AppletInit_internal(app_id, args); } Gnome::Panel::AppletWidget new(Class, param=0) SV * Class char * param CODE: RETVAL = APPLET_WIDGET(applet_widget_new(param)); OUTPUT: RETVAL void applet_widget_set_tooltip(aw, tooltip) Gnome::Panel::AppletWidget aw char * tooltip void applet_widget_set_widget_tooltip(aw, widget, tooltip) Gnome::Panel::AppletWidget aw Gtk::Widget widget char * tooltip void applet_widget_add(aw, widget) Gnome::Panel::AppletWidget aw Gtk::Widget widget #if 0 void applet_widget_remove_from_panel(aw) Gnome::Panel::AppletWidget aw #endif void applet_widget_sync_config(aw) Gnome::Panel::AppletWidget aw #if 0 Gnome::Panel::OrientType applet_widget_get_panel_orient(aw) Gnome::Panel::AppletWidget aw #endif int applet_widget_get_applet_count(Class) CODE: RETVAL = applet_widget_get_applet_count(); OUTPUT: RETVAL void applet_widget_gtk_main(Class) CODE: applet_widget_gtk_main(); #endif