com php/gtk-src: Add little hack to make sure user classes get their constructor's run when used with libglade or gtkbuilder and that constructors ar never double constructed: demos/examples/signals.php generator/templates.php main/phpg_gobject.c
[email protected] (Elizabeth Marie Smith) Wed, 15 Aug 2012 15:39:11 +0000
| Newsgroups | php.gtk.cvs |
|---|---|
| Message-ID | <[email protected]> |
Commit: 806a8657de680df02bf47d0a7413d16650fdef83=0AAuthor: Elizabeth = M Smith <[email protected]> Wed, 15 Aug 2012 11:39:11 -0400= =0AParents: b9901ae6000b45d2883122fcbc13dcfba6cbf61c=0ABranches: master= =0A=0ALink: http://git.php.net/?p=3Dphp/gtk-src.git;a=3Dcommitdiff;h= =3D806a8657de680df02bf47d0a7413d16650fdef83=0A=0ALog:=0AAdd little hack to = make sure user classes get=0Atheir constructor's run when used with libglad= e or=0Agtkbuilder and that constructors ar never double=0Aconstructed=0A=0A= Also added signal example for using TYPE_PHP_VALUE=0A=0AChanged paths:=0A = M demos/examples/signals.php=0A M generator/templates.php=0A M main/ph= pg_gobject.c=0A=0A=0ADiff:=0Adiff --git a/demos/examples/signals.php b/demo= s/examples/signals.php=0Aindex 9c7b381..bf5d677 100644=0A--- a/demos/exampl= es/signals.php=0A+++ b/demos/examples/signals.php=0A@@ -4,11 +4,18 @@ class= NewType extends GtkButton {=0A =09public $__gsignals =3D array(=0A =09=09'= clicked' =3D> 'override',=0A =09=09'mashed' =3D> array(GObject::SIGNAL_RUN= _LAST, GObject::TYPE_BOOLEAN, array(GObject::TYPE_LONG, GtkRequisition::gty= pe)),=0A+=09=09'weird' =3D> array(GObject::SIGNAL_RUN_FIRST, GObject::TYPE= _NONE, array(Gobject::TYPE_PHP_VALUE)),=0A =09=09);=0A =0A =09function __co= nstruct()=0A =09{=0A =09=09parent::__construct();=0A+=09=09$this->emit('wei= rd', 'hello dolly');=0A+=09}=0A+=0A+=09function __do_weird($arg)=0A+=09{=0A= +=09=09echo "NewType: class closure for `weird` called with arguments {$arg= } \n";=0A =09}=0A =0A =09function __do_clicked()=0Adiff --git a/generator/t= emplates.php b/generator/templates.php=0Aindex 0bec10c..6a643c2 100644=0A--= - a/generator/templates.php=0A+++ b/generator/templates.php=0A@@ -53,17 +53= ,22 @@ static PHP_METHOD(%(class), %(name))=0A {=0A %(var_list)\tGObject *w= rapped_obj;=0A =0A+=09phpg_gobject_t *pobj =3D zend_object_store_get_object= (this_ptr TSRMLS_CC);=0A+=09if (pobj->obj !=3D NULL) {=0A+=09=09return;=0A+= =09}=0A+=0A =09if (!php_gtk_parse_args(ZEND_NUM_ARGS(), \"%(specs)\"%(parse= _list))) {=0A- PHPG_THROW_CONSTRUCT_EXCEPTION(%(class));=0A+=09=09PH= PG_THROW_CONSTRUCT_EXCEPTION(%(class));=0A =09}=0A %(pre_code)=0A =09wrappe= d_obj =3D (GObject *) %(cname)(%(arg_list));=0A %(post_code)=0A =09if (!wra= pped_obj) {=0A- PHPG_THROW_CONSTRUCT_EXCEPTION(%(class));=0A+=09=09P= HPG_THROW_CONSTRUCT_EXCEPTION(%(class));=0A =09}=0A %(post_create_code)=0A-= phpg_gobject_set_wrapper(this_ptr, wrapped_obj TSRMLS_CC);=0A+=09phpg_g= object_set_wrapper(this_ptr, wrapped_obj TSRMLS_CC);=0A }\n\n";=0A =0A cons= t static_constructor_body =3D "=0A@@ -150,51 +155,61 @@ e\n\n";=0A const co= nstructor_with_props =3D "=0A static PHP_METHOD(%(class), %(name))=0A {=0A-= GParameter params[%(n_params)];=0A+=09GParameter params[%(n_params)];= =0A =09zval *php_args[%(n_args)] =3D { NULL, };=0A =09char *prop_names[] = =3D { %(props) NULL };=0A- GObject *wrapped_obj;=0A- guint i, n_param= s;=0A+=09GObject *wrapped_obj;=0A+=09guint i, n_params;=0A =09GType gtype = =3D phpg_gtype_from_zval(this_ptr TSRMLS_CC);=0A =0A- if (!php_gtk_parse= _args(ZEND_NUM_ARGS(), \"%(specs)\"%(parse_list))) {=0A- PHPG_THROW_= CONSTRUCT_EXCEPTION(%(class));=0A- }=0A+=09phpg_gobject_t *pobj =3D zend= _object_store_get_object(this_ptr TSRMLS_CC);=0A+=09if (pobj->obj !=3D NULL= ) {=0A+=09=09return;=0A+=09}=0A+=0A+=09if (!php_gtk_parse_args(ZEND_NUM_ARG= S(), \"%(specs)\"%(parse_list))) {=0A+=09=09PHPG_THROW_CONSTRUCT_EXCEPTION(= %(class));=0A+=09}=0A =0A =09memset(¶ms, 0, %(n_params) * sizeof(GParam= eter));=0A- if (!phpg_parse_ctor_props(gtype, php_args, params, &n_param= s, prop_names TSRMLS_CC)) {=0A- PHPG_THROW_CONSTRUCT_EXCEPTION(%(cla= ss));=0A- }=0A+=09if (!phpg_parse_ctor_props(gtype, php_args, params, &n= _params, prop_names TSRMLS_CC)) {=0A+=09=09PHPG_THROW_CONSTRUCT_EXCEPTION(%= (class));=0A+=09}=0A %(pre_code)=0A- wrapped_obj =3D (GObject *) g_objec= t_newv(gtype, n_params, params);=0A+=09wrapped_obj =3D (GObject *) g_object= _newv(gtype, n_params, params);=0A %(post_code)=0A- if (!wrapped_obj) {= =0A- PHPG_THROW_CONSTRUCT_EXCEPTION(%(class));=0A- }=0A+=09if (!w= rapped_obj) {=0A+=09=09PHPG_THROW_CONSTRUCT_EXCEPTION(%(class));=0A+=09}=0A= =0A =09for (i =3D 0; i < n_params; i++) {=0A =09=09g_value_unset(¶ms[i= ].value);=0A- }=0A- phpg_gobject_set_wrapper(this_ptr, wrapped_obj TS= RMLS_CC);=0A+=09}=0A+=09phpg_gobject_set_wrapper(this_ptr, wrapped_obj TSRM= LS_CC);=0A }\n\n";=0A =0A const constructor_without_props =3D "=0A static P= HP_METHOD(%(class), %(name))=0A {=0A- GObject *wrapped_obj;=0A+=09GObjec= t *wrapped_obj;=0A =0A- if (!php_gtk_parse_args(ZEND_NUM_ARGS(), \"\")) = {=0A- PHPG_THROW_CONSTRUCT_EXCEPTION(%(class));=0A- }=0A+=09phpg_= gobject_t *pobj =3D zend_object_store_get_object(this_ptr TSRMLS_CC);=0A+= =09if (pobj->obj !=3D NULL) {=0A+=09=09return;=0A+=09}=0A+=0A+=09if (!php_g= tk_parse_args(ZEND_NUM_ARGS(), \"\")) {=0A+=09=09PHPG_THROW_CONSTRUCT_EXCEP= TION(%(class));=0A+=09}=0A =0A %(pre_code)=0A- wrapped_obj =3D (GObject = *) g_object_newv(phpg_gtype_from_zval(this_ptr TSRMLS_CC), 0, NULL);=0A+=09= wrapped_obj =3D (GObject *) g_object_newv(phpg_gtype_from_zval(this_ptr TSR= MLS_CC), 0, NULL);=0A %(post_code)=0A- if (!wrapped_obj) {=0A- PH= PG_THROW_CONSTRUCT_EXCEPTION(%(class));=0A- }=0A+=09if (!wrapped_obj) {= =0A+=09=09PHPG_THROW_CONSTRUCT_EXCEPTION(%(class));=0A+=09}=0A =0A- phpg= _gobject_set_wrapper(this_ptr, wrapped_obj TSRMLS_CC);=0A+=09phpg_gobject_s= et_wrapper(this_ptr, wrapped_obj TSRMLS_CC);=0A }\n\n";=0A const deprecatio= n_msg =3D "\n\tphpg_warn_deprecated(%s TSRMLS_CC);\n";=0A const method1_cal= l =3D "%s(%s(PHP_GTK_GET(this_ptr))%s)";=0Adiff --git a/main/phpg_gobject.c= b/main/phpg_gobject.c=0Aindex b1ce5b3..5f1e4cb 100644=0A--- a/main/phpg_go= bject.c=0A+++ b/main/phpg_gobject.c=0A@@ -228,6 +228,10 @@ PHP_GTK_API void= phpg_gobject_new(zval **zobj, GObject *obj TSRMLS_DC)=0A #ifdef ZTS=0A = g_object_set_qdata(obj, gobject_wrapper_zts_key, (void*)TSRMLS_C);=0A = #endif=0A+=0A+ if (ce->type =3D=3D ZEND_USER_CLASS) {=0A+ = zend_call_method_with_0_params(zobj, ce, &ce->constructor, "__construct", = NULL);=0A+ }=0A }=0A }=0A /* }}} */=0A@@ -398,7 +402,7 @@ static= void phpg_signal_connect_impl(INTERNAL_FUNCTION_PARAMETERS, int connect_t= =0A if (!php_gtk_parse_varargs(ZEND_NUM_ARGS(), 2, &extra, "sV", &signa= l, &callback)) {=0A if (extra) {=0A zval_ptr_dtor(&extr= a);=0A- }=09=09=09=0A+ }=0A return;=0A }=0A =0A@@= -1387,6 +1391,7 @@ static PHP_METHOD(GObject, register_type)=0A =09}=0A = =0A =09parent_type =3D phpg_gtype_from_class(ce TSRMLS_CC);=0A+=0A =09if (!= parent_type) {=0A =09=09return;=0A =09}=0A@@ -1418,7 +1423,7 @@ static PHP_= METHOD(GObject, register_type)=0A =09new_type =3D g_type_register_static(pa= rent_type, type_name, &type_info, 0);=0A =09if (new_type =3D=3D 0) {=0A =09= =09php_error_docref(NULL TSRMLS_CC, E_WARNING, "could not create new GType"= );=0A-=09=09=0A+=0A =09=09if (free_name) {=0A =09=09=09g_free(type_name);= =0A =09=09}=0A