cvs: php-gtk /main php_gtk.h phpg_closure.c phpg_gobject.c
| From: | Andrei Zmievski | 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(¶m_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);
}