com gtk/php-gtk: - Implement connect_simple() - Depre cate connect_object(): main/php_gtk.h main/ph pg_closure.c main/phpg_gobject.c
[email protected] (David Soria Parra) Fri, 14 Oct 2005 04:10:41 +0000
| Newsgroups | php.gtk.cvs |
|---|---|
| Message-ID | <[email protected]> |
Commit: a5cd6b483c028bd304fb0715fdd2915daa12313f Author: Andrei Zmievski <[email protected]> Fri, 14 Oct 2005 04:10:41 +0000 Parents: a127cddd7f8279ac37b465440c7c58b366c21c1d Branches: master Link: http://git.php.net/?p=gtk/php-gtk.git;a=commitdiff;h=a5cd6b483c028bd304fb0715fdd2915daa12313f Log: - Implement connect_simple() - Deprecate connect_object() Changed paths: M main/php_gtk.h M main/phpg_closure.c M main/phpg_gobject.c Diff: a5cd6b483c028bd304fb0715fdd2915daa12313f diff --git a/main/php_gtk.h b/main/php_gtk.h index a6bbce2..5447bc3 100644 --- a/main/php_gtk.h +++ b/main/php_gtk.h @@ -134,6 +134,12 @@ typedef struct { /* Private structure */ typedef struct _phpg_closure_t phpg_closure_t; +enum { + PHPG_CONNECT_NORMAL, + PHPG_CONNECT_SIMPLE, + PHPG_CONNECT_OBJECT, +}; + #define PHPG_GET(zobj) \ zend_object_store_get_object((zobj) TSRMLS_CC) @@ -451,7 +457,7 @@ void phpg_gpointer_register_self(TSRMLS_D); 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, zend_bool use_signal_object TSRMLS_DC); +PHP_GTK_API GClosure* phpg_closure_new(zval *callback, zval *user_args, int connect_type 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); diff --git a/main/phpg_closure.c b/main/phpg_closure.c index 7f12218..d82b1ef 100644 --- a/main/phpg_closure.c +++ b/main/phpg_closure.c @@ -30,7 +30,7 @@ struct _phpg_closure_t { GClosure closure; zval *callback; zval *user_args; - zend_bool use_signal_object; + int connect_type; char *src_filename; uint src_lineno; }; @@ -47,7 +47,7 @@ static void phpg_closure_invalidate(gpointer data, GClosure *closure) phpg_closure->callback = NULL; phpg_closure->user_args = NULL; - phpg_closure->use_signal_object = 0; + phpg_closure->connect_type = PHPG_CONNECT_NORMAL; phpg_closure->src_filename = NULL; phpg_closure->src_lineno = 0; } @@ -77,12 +77,17 @@ static void phpg_closure_marshal(GClosure *closure, return; } - if (!phpg_closure->use_signal_object) { - /* skip first parameter */ - n_param_values--; - param_values++; + if (phpg_closure->connect_type == PHPG_CONNECT_SIMPLE) { + /* we don't use any signal params for simple connections */ + n_param_values = 0; + } else { + if (phpg_closure->connect_type == PHPG_CONNECT_OBJECT) { + /* skip first parameter */ + n_param_values--; + param_values++; + } + n_params = n_param_values; } - n_params = n_param_values; if (phpg_closure->user_args) { n_params += zend_hash_num_elements(Z_ARRVAL_P(phpg_closure->user_args)); @@ -127,7 +132,7 @@ err_marshal: efree(params); } -PHP_GTK_API GClosure* phpg_closure_new(zval *callback, zval *user_args, zend_bool use_signal_object TSRMLS_DC) +PHP_GTK_API GClosure* phpg_closure_new(zval *callback, zval *user_args, int connect_type TSRMLS_DC) { GClosure *closure; phpg_closure_t *phpg_closure; @@ -153,7 +158,7 @@ PHP_GTK_API GClosure* phpg_closure_new(zval *callback, zval *user_args, zend_boo phpg_closure->user_args = NULL; } - phpg_closure->use_signal_object = use_signal_object; + phpg_closure->connect_type = connect_type; return closure; } diff --git a/main/phpg_gobject.c b/main/phpg_gobject.c index e607a79..fd3ab41 100644 --- a/main/phpg_gobject.c +++ b/main/phpg_gobject.c @@ -315,7 +315,7 @@ static PHP_METHOD(GObject, __tostring) /* }}} */ /* {{{ static phpg_signal_connect_impl() */ -static void phpg_signal_connect_impl(INTERNAL_FUNCTION_PARAMETERS, zend_bool use_signal_object, zend_bool after) +static void phpg_signal_connect_impl(INTERNAL_FUNCTION_PARAMETERS, int connect_type, zend_bool after) { char *signal = NULL; zval *callback; @@ -337,8 +337,7 @@ static void phpg_signal_connect_impl(INTERNAL_FUNCTION_PARAMETERS, zend_bool use return; } - //extra = php_gtk_func_args_as_hash(ZEND_NUM_ARGS(), 2, ZEND_NUM_ARGS()); - closure = phpg_closure_new(callback, extra, use_signal_object TSRMLS_CC); + closure = phpg_closure_new(callback, extra, connect_type TSRMLS_CC); if (extra) { zval_ptr_dtor(&extra); } @@ -350,25 +349,39 @@ static void phpg_signal_connect_impl(INTERNAL_FUNCTION_PARAMETERS, zend_bool use /* {{{ GObject::connect */ static PHP_METHOD(GObject, connect) { - phpg_signal_connect_impl(INTERNAL_FUNCTION_PARAM_PASSTHRU, TRUE, FALSE); + phpg_signal_connect_impl(INTERNAL_FUNCTION_PARAM_PASSTHRU, PHPG_CONNECT_NORMAL, FALSE); } /* }}} */ /* {{{ GObject::connect_after */ static PHP_METHOD(GObject, connect_after) { - phpg_signal_connect_impl(INTERNAL_FUNCTION_PARAM_PASSTHRU, TRUE, TRUE); + phpg_signal_connect_impl(INTERNAL_FUNCTION_PARAM_PASSTHRU, PHPG_CONNECT_NORMAL, TRUE); +} +/* }}} */ +/* {{{ GObject::connect_simple */ +static PHP_METHOD(GObject, connect_simple) +{ + phpg_signal_connect_impl(INTERNAL_FUNCTION_PARAM_PASSTHRU, PHPG_CONNECT_SIMPLE, FALSE); +} +/* }}} */ +/* {{{ GObject::connect_simple_after */ +static PHP_METHOD(GObject, connect_simple_after) +{ + phpg_signal_connect_impl(INTERNAL_FUNCTION_PARAM_PASSTHRU, PHPG_CONNECT_SIMPLE, TRUE); } /* }}} */ /* {{{ GObject::connect_object */ static PHP_METHOD(GObject, connect_object) { - phpg_signal_connect_impl(INTERNAL_FUNCTION_PARAM_PASSTHRU, FALSE, FALSE); + phpg_warn_deprecated("use connect() or connect_simple()" TSRMLS_CC); + phpg_signal_connect_impl(INTERNAL_FUNCTION_PARAM_PASSTHRU, PHPG_CONNECT_OBJECT, FALSE); } /* }}} */ /* {{{ GObject::connect_object_after */ static PHP_METHOD(GObject, connect_object_after) { - phpg_signal_connect_impl(INTERNAL_FUNCTION_PARAM_PASSTHRU, FALSE, TRUE); + phpg_warn_deprecated("use connect_after() or connect_simple_after()" TSRMLS_CC); + phpg_signal_connect_impl(INTERNAL_FUNCTION_PARAM_PASSTHRU, PHPG_CONNECT_OBJECT, TRUE); } /* }}} */ @@ -683,6 +696,20 @@ ZEND_BEGIN_ARG_INFO_EX(arginfo_gobject_connect_after, 0, 0, 2) ZEND_END_ARG_INFO(); static +ZEND_BEGIN_ARG_INFO_EX(arginfo_gobject_connect_simple, 0, 0, 2) + ZEND_ARG_INFO(0, signal) + ZEND_ARG_INFO(0, callback) + ZEND_ARG_INFO(0, userparam) +ZEND_END_ARG_INFO(); + +static +ZEND_BEGIN_ARG_INFO_EX(arginfo_gobject_connect_simple_after, 0, 0, 2) + ZEND_ARG_INFO(0, signal) + ZEND_ARG_INFO(0, callback) + ZEND_ARG_INFO(0, userparam) +ZEND_END_ARG_INFO(); + +static ZEND_BEGIN_ARG_INFO_EX(arginfo_gobject_connect_object, 0, 0, 2) ZEND_ARG_INFO(0, signal) ZEND_ARG_INFO(0, callback) @@ -743,6 +770,8 @@ static zend_function_entry gobject_methods[] = { PHP_ME(GObject, connect_after, arginfo_gobject_connect_after , ZEND_ACC_PUBLIC) PHP_ME(GObject, connect_object, arginfo_gobject_connect_object , ZEND_ACC_PUBLIC) PHP_ME(GObject, connect_object_after, arginfo_gobject_connect_object_after , ZEND_ACC_PUBLIC) + PHP_ME(GObject, connect_simple, arginfo_gobject_connect_simple , ZEND_ACC_PUBLIC) + PHP_ME(GObject, connect_simple_after, arginfo_gobject_connect_simple_after , ZEND_ACC_PUBLIC) PHP_ME(GObject, get_property, arginfo_gobject_get_property , ZEND_ACC_PUBLIC) PHP_ME(GObject, set_property, arginfo_gobject_set_property , ZEND_ACC_PUBLIC) PHP_ME(GObject, get_data, arginfo_gobject_get_data , ZEND_ACC_PUBLIC)