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(&params, 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(&params[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