cvs: php-gtk / NEWS /ext/libglade libglade.overrides

[email protected] ("Andrei Zmievski") Fri, 10 Aug 2001 05:28:05 -0000
Newsgroups php.gtk
Message-ID <cvsandrei997421285@cvsserver>
andrei		Fri Aug 10 01:28:05 2001 EDT

  Modified files:              
    /php-gtk	NEWS 
    /php-gtk/ext/libglade	libglade.overrides 
  Log:
  For now, implement separate GladeXML methods that can be used to connect
  to callbacks without passing emitting object as the first arg.
  
  
Index: php-gtk/NEWS
diff -u php-gtk/NEWS:1.38 php-gtk/NEWS:1.39
--- php-gtk/NEWS:1.38	Wed Aug  8 16:49:09 2001
+++ php-gtk/NEWS	Fri Aug 10 01:28:05 2001
@@ -1,3 +1,5 @@
+    - implemented GladeXML methods signal_connect_object() and
+      signal_autoconnect_object(). (Andrei)
     - changed PHP-visible extension name from 'gtk' to 'php-gtk'. (Andrei)
 
 Version 0.1 "the void which binds" 1-Aug-2001
Index: php-gtk/ext/libglade/libglade.overrides
diff -u php-gtk/ext/libglade/libglade.overrides:1.3 php-gtk/ext/libglade/libglade.overrides:1.4
--- php-gtk/ext/libglade/libglade.overrides:1.3	Mon Jul 30 15:13:14 2001
+++ php-gtk/ext/libglade/libglade.overrides	Fri Aug 10 01:28:05 2001
@@ -46,7 +46,7 @@
 							callback_data, php_gtk_destroy_notify, FALSE, after);
 }
 
-PHP_FUNCTION(wrap_glade_xml_signal_connect)
+static glade_signal_connect_impl(INTERNAL_FUNCTION_PARAMETERS, int pass_object)
 {
 	char *handler_name = NULL;
 	zval *callback = NULL;
@@ -69,22 +69,39 @@
 	callback_filename = zend_get_executed_filename(TSRMLS_C);
 	callback_lineno = zend_get_executed_lineno(TSRMLS_C);
 	extra = php_gtk_func_args_as_hash(ZEND_NUM_ARGS(), 2, ZEND_NUM_ARGS());
-	data = php_gtk_build_value("(VNisi)", callback, extra, 1, callback_filename, callback_lineno);
+	data = php_gtk_build_value("(VNisi)", callback, extra, pass_object, callback_filename, callback_lineno);
 	glade_xml_signal_connect_full(GLADE_XML(PHP_GTK_GET(this_ptr)), handler_name,
 								  (GladeXMLConnectFunc)glade_connect_one, data);
 	RETURN_NULL();
 }
+
+PHP_FUNCTION(glade_xml_signal_connect)
+{
+	glade_signal_connect_impl(INTERNAL_FUNCTION_PARAM_PASSTHRU, 1);
+}
+%%
+override glade_xml_signal_connect_object signal_connect_object GladeXML
+PHP_FUNCTION(glade_xml_signal_connect_object)
+{
+	glade_signal_connect_impl(INTERNAL_FUNCTION_PARAM_PASSTHRU, 0);
+}
 %%
 override glade_xml_signal_autoconnect
+
+typedef struct _php_gtk_autoconnect_data {
+	zend_bool pass_object;
+	zval *map;
+} php_gtk_autoconnect_data;
+
 static void glade_connect_auto(const gchar *handler_name, GtkObject *obj,
 							   const gchar *signal_name, const gchar *signal_data,
 							   GtkObject *connect_object, gboolean after,
-							   zval *map)
+							   php_gtk_autoconnect_data *ac_data)
 {
-	zval **callback_data = NULL;
+	zval **callback_data = NULL, *map = ac_data->map;
 	zval **callback_ptr = NULL, *extra = NULL, *params = NULL;
 	zval *callback, *data, *object = NULL;
-	int pass_object = 1;
+	int pass_object = ac_data->pass_object;
 	char *callback_filename;
 	uint callback_lineno;
 	TSRMLS_FETCH();
@@ -133,15 +150,30 @@
 							data, php_gtk_destroy_notify, FALSE, after);
 }
 
-PHP_FUNCTION(wrap_glade_xml_signal_autoconnect)
+static glade_signal_autoconnect_impl(INTERNAL_FUNCTION_PARAMETERS, int pass_object)
 {
 	zval *map = NULL;
+	php_gtk_autoconnect_data *ac_data;
 
 	NOT_STATIC_METHOD();
 
 	if (!php_gtk_parse_args(ZEND_NUM_ARGS(), "|a", &map))
 		return;
 
+	ac_data = (php_gtk_autoconnect_data *)emalloc(sizeof(php_gtk_autoconnect_data));
+	ac_data->map = map;
+	ac_data->pass_object = pass_object;
 	glade_xml_signal_autoconnect_full(GLADE_XML(PHP_GTK_GET(this_ptr)),
-									  (GladeXMLConnectFunc)glade_connect_auto, map);
+									  (GladeXMLConnectFunc)glade_connect_auto, ac_data);
+}
+
+PHP_FUNCTION(glade_xml_signal_autoconnect)
+{
+	glade_signal_autoconnect_impl(INTERNAL_FUNCTION_PARAM_PASSTHRU, 1);
+}
+%%
+override glade_xml_signal_autoconnect_object signal_autoconnect_object GladeXML
+PHP_FUNCTION(glade_xml_signal_autoconnect_object)
+{
+	glade_signal_autoconnect_impl(INTERNAL_FUNCTION_PARAM_PASSTHRU, 0);
 }