cvs: php-gtk /main php_gtk.h phpg_closure.c phpg_gobject.c

From: Date: Sat, 05 Nov 2005 08:31:46 +0000
Subject: cvs: php-gtk /main php_gtk.h phpg_closure.c phpg_gobject.c
Groups: php.gtk.cvs 
Request: Send a blank email to php-gtk-cvs+get-1996@lists.php.net to get a copy of this message
andrei Sat Nov 5 03:31:46 2005 EDT Modified files: /php-gtk/main php_gtk.h phpg_closure.c phpg_gobject.c Log: Extend closures with 'replace' type of connection that allows one to substitute a different object (any PHP value really) in place of the one that emitted the signal. http://cvs.php.net/diff.php/php-gtk/main/php_gtk.h?r1=1.122&r2=1.123&ty=u Index: php-gtk/main/php_gtk.h diff -u php-gtk/main/php_gtk.h:1.122 php-gtk/main/php_gtk.h:1.123 --- php-gtk/main/php_gtk.h:1.122 Wed Nov 2 15:09:11 2005 +++ php-gtk/main/php_gtk.h Sat Nov 5 03:31:45 2005 @@ -18,7 +18,7 @@ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ -/* $Id: php_gtk.h,v 1.122 2005/11/02 20:09:11 sfox Exp $: */ +/* $Id: php_gtk.h,v 1.123 2005/11/05 08:31:45 andrei Exp $: */ #ifndef _PHP_GTK_H #define _PHP_GTK_H @@ -137,6 +137,7 @@ enum { PHPG_CONNECT_NORMAL, PHPG_CONNECT_SIMPLE, + PHPG_CONNECT_REPLACE, PHPG_CONNECT_OBJECT, }; @@ -458,7 +459,7 @@ PHP_GTK_API void phpg_gpointer_new(zval **zobj, GType gtype, gpointer pointer TSRMLS_DC); /* Closures */ -PHP_GTK_API GClosure* phpg_closure_new(zval *callback, zval *user_args, int connect_type TSRMLS_DC); +PHP_GTK_API GClosure* phpg_closure_new(zval *callback, zval *user_args, int connect_type, zval *replace_object TSRMLS_DC); PHP_GTK_API void phpg_watch_closure(zval *obj, GClosure *closure TSRMLS_DC); PHP_GTK_API extern PHP_GTK_EXPORT_CE(gtype_ce); http://cvs.php.net/diff.php/php-gtk/main/phpg_closure.c?r1=1.11&r2=1.12&ty=u Index: php-gtk/main/phpg_closure.c diff -u php-gtk/main/phpg_closure.c:1.11 php-gtk/main/phpg_closure.c:1.12 --- php-gtk/main/phpg_closure.c:1.11 Wed Nov 2 15:09:13 2005 +++ php-gtk/main/phpg_closure.c Sat Nov 5 03:31:45 2005 @@ -30,6 +30,7 @@ GClosure closure; zval *callback; zval *user_args; + zval *replace_object; int connect_type; char *src_filename; uint src_lineno; @@ -43,10 +44,14 @@ if (phpg_closure->user_args) { zval_ptr_dtor(&phpg_closure->user_args); } + if (phpg_closure->replace_object) { + zval_ptr_dtor(&phpg_closure->replace_object); + } efree(phpg_closure->src_filename); phpg_closure->callback = NULL; phpg_closure->user_args = NULL; + phpg_closure->replace_object = NULL; phpg_closure->connect_type = PHPG_CONNECT_NORMAL; phpg_closure->src_filename = NULL; phpg_closure->src_lineno = 0; @@ -94,12 +99,18 @@ } params = (zval ***)emalloc(n_params * sizeof(zval **)); - for (i = 0; i < n_param_values; i++) { + i = 0; + + if (phpg_closure->connect_type == PHPG_CONNECT_REPLACE) { + params[i++] = &phpg_closure->replace_object; + } + + for ( ; i < n_param_values; i++) { params[i] = (zval **) emalloc(sizeof(zval *)); *(params[i]) = NULL; if (phpg_gvalue_to_zval(&param_values[i], params[i], FALSE TSRMLS_CC) != SUCCESS) { goto err_marshal; - } + } } if (phpg_closure->user_args) { @@ -125,14 +136,15 @@ err_marshal: efree(callback_name); - for (i = 0; i < n_param_values; i++) { + i = (phpg_closure->connect_type == PHPG_CONNECT_REPLACE) ? 1 : 0; + for ( ; i < n_param_values; i++) { zval_ptr_dtor(params[i]); efree(params[i]); } efree(params); } -PHP_GTK_API GClosure* phpg_closure_new(zval *callback, zval *user_args, int connect_type TSRMLS_DC) +PHP_GTK_API GClosure* phpg_closure_new(zval *callback, zval *user_args, int connect_type, zval *replace_object TSRMLS_DC) { GClosure *closure; phpg_closure_t *phpg_closure; @@ -158,6 +170,10 @@ phpg_closure->user_args = NULL; } + if (replace_object) { + zval_add_ref(&replace_object); + phpg_closure->replace_object = replace_object; + } phpg_closure->connect_type = connect_type; return closure; http://cvs.php.net/diff.php/php-gtk/main/phpg_gobject.c?r1=1.48&r2=1.49&ty=u Index: php-gtk/main/phpg_gobject.c diff -u php-gtk/main/phpg_gobject.c:1.48 php-gtk/main/phpg_gobject.c:1.49 --- php-gtk/main/phpg_gobject.c:1.48 Fri Oct 14 00:10:41 2005 +++ php-gtk/main/phpg_gobject.c Sat Nov 5 03:31:45 2005 @@ -337,7 +337,7 @@ return; } - closure = phpg_closure_new(callback, extra, connect_type TSRMLS_CC); + closure = phpg_closure_new(callback, extra, connect_type, NULL TSRMLS_CC); if (extra) { zval_ptr_dtor(&extra); }

« previous php.gtk.cvs (#1996) next »