diff plugins/perl/common/Request.xs @ 11170:0e9e2b923d09

[gaim-migrate @ 13271] Fixed some bugs and made some additions to the XSUBS. Added some of my test scripts which are incomplete, but mostly functional. GaimPluginPrefs and GaimGtkPluginPrefs--using evals to do the Gtk widgets with gtk2-perl--work. Plugin actions can now be added, but only one for now. committer: Tailor Script <tailor@pidgin.im>
author John H. Kelm <johnkelm@gmail.com>
date Fri, 29 Jul 2005 13:38:00 +0000
parents 3f3bc7f1b6bf
children b284c703d398
line wrap: on
line diff
--- a/plugins/perl/common/Request.xs	Fri Jul 29 05:05:52 2005 +0000
+++ b/plugins/perl/common/Request.xs	Fri Jul 29 13:38:00 2005 +0000
@@ -1,9 +1,60 @@
 #include "module.h"
 
+typedef struct {
+	char *cancel_cb;
+	char *ok_cb;
+} GaimPerlRequestData;
+
+/********************************************************/
+/*							*/
+/* Callback function that calls a perl subroutine 	*/
+/*							*/
+/* The void * field data is being used as a way to hide	*/
+/* the perl sub's name in a GaimPerlRequestData		*/
+/*							*/
+/********************************************************/
+void gaim_perl_request_ok_cb(void * data, GaimRequestFields *fields) {
+
+	GaimPerlRequestData *gpr = (GaimPerlRequestData *)data;
+
+	dSP;
+	ENTER;
+	SAVETMPS;
+	PUSHMARK(sp);
+	
+	XPUSHs(gaim_perl_bless_object(fields, "Gaim::Request::Fields"));
+	PUTBACK;
+	
+	call_pv(gpr->ok_cb, G_EVAL | G_SCALAR);
+	SPAGAIN;
+
+	PUTBACK;
+	FREETMPS;
+	LEAVE;
+}
+
+void gaim_perl_request_cancel_cb(void * data, GaimRequestFields *fields) {
+
+	GaimPerlRequestData *gpr = (GaimPerlRequestData *)data;
+
+	dSP;
+	ENTER;
+	SAVETMPS;
+	PUSHMARK(sp);
+	
+	XPUSHs(gaim_perl_bless_object(fields, "Gaim::Request::Fields"));
+	PUTBACK;
+	call_pv(gpr->cancel_cb, G_EVAL | G_SCALAR);
+	SPAGAIN;
+
+	PUTBACK;
+	FREETMPS;
+	LEAVE;
+}
+
+
 /* TODO
 
-void *
-gaim_request_fields(handle, title, primary, secondary, fields, ok_text, ok_cb, cancel_text, cancel_cb, user_data)
 
 void *
 gaim_request_input(handle, title, primary, secondary, default_value, multiline, masked, hint, ok_text, ok_cb, cancel_text, cancel_cb, user_data)
@@ -34,6 +85,42 @@
 MODULE = Gaim::Request  PACKAGE = Gaim::Request  PREFIX = gaim_request_
 PROTOTYPES: ENABLE
 
+void *
+gaim_request_fields(handle, title, primary, secondary, fields, ok_text, ok_cb, cancel_text, cancel_cb)
+	Gaim::Plugin handle
+	const char * title
+	const char * primary
+	const char * secondary
+	Gaim::Request::Fields fields
+	const char * ok_text
+	SV * ok_cb
+	const char * cancel_text
+	SV * cancel_cb
+CODE:
+	GaimPerlRequestData *gpr;
+	STRLEN len;
+	char *basename, *package;
+	
+	basename = g_path_get_basename(handle->path);
+	gaim_perl_normalize_script_name(basename);
+	package = g_strdup_printf("Gaim::Script::%s", basename);
+	gpr = g_new(GaimPerlRequestData, 1);
+	gpr->ok_cb = g_strdup_printf("%s::%s", package, SvPV(ok_cb, len));
+	gpr->cancel_cb = g_strdup_printf("%s::%s", package, SvPV(cancel_cb, len));
+	
+	RETVAL = gaim_request_fields(handle, title, primary, secondary, fields, ok_text, G_CALLBACK(gaim_perl_request_ok_cb), cancel_text, G_CALLBACK(gaim_perl_request_cancel_cb), gpr);
+OUTPUT:
+	RETVAL
+
+
+
+
+
+
+
+
+
+
 
 void *
 gaim_request_action_varg(handle, title, primary, secondary, default_action, user_data, action_count, actions)