com gtk/php-gtk: Implement basic G_TYPE_POINTER support .: config.m4 main/php_gtk.c main/php_gtk. h main/phpg_gboxed.c main/phpg_gvalue.c
[email protected] (David Soria Parra) Sat, 01 Oct 2005 22:43:23 +0000
| Newsgroups | php.gtk.cvs |
|---|---|
| Message-ID | <[email protected]> |
Commit: cbf79bfbd31fccd672be7049a4aa16a905d3eca8=0AAuthor: Andrei Zmi= evski <[email protected]> Sat, 1 Oct 2005 22:43:23 +0000=0AParents: = 28dcb5bda4b38797e2c6dd1d9411546d87312dd3=0ABranches: master=0A=0ALink: = http://git.php.net/?p=3Dgtk/php-gtk.git;a=3Dcommitdiff;h=3Dcbf79bfbd31fc= cd672be7049a4aa16a905d3eca8=0A=0ALog:=0AImplement basic G_TYPE_POINTER supp= ort.=0A=0AChanged paths:=0A M config.m4=0A M main/php_gtk.c=0A M main= /php_gtk.h=0A M main/phpg_gboxed.c=0A M main/phpg_gvalue.c=0A=0A=0ADiff= :=0Acbf79bfbd31fccd672be7049a4aa16a905d3eca8=0Adiff --git a/config.m4 b/con= fig.m4=0Aindex 7318081..dd112e8 100644=0A--- a/config.m4=0A+++ b/config.m4= =0A@@ -51,7 +51,7 @@ PHP_GTK_ARG_ENABLE(debug, whether to include debugging= symbols,=0A if test "$PHP_GTK_DEBUG" =3D "yes"; then=0A echo " $CFLAGS" = | grep ' -g' >/dev/null || DEBUG_CFLAGS=3D"-g"=0A if test "$CFLAGS" =3D "= -g -O2"; then=0A- =09CFLAGS=3D-g=0A+ CFLAGS=3D-g=0A fi=0A test -n "= $GCC" && DEBUG_CFLAGS=3D"$DEBUG_CFLAGS -Wall"=0A fi=0A@@ -68,7 +68,8 @@ PHP= _SUBST(PHP_GTK_EXTENSIONS)=0A =0A PHP_NEW_EXTENSION(php_gtk2, main/php_gtk.= c main/phpg_support.c main/phpg_gtype.c \=0A ma= in/phpg_exceptions.c main/php_gtk_util.c main/phpg_gvalue.c \=0A- = main/phpg_closure.c main/phpg_gboxed.c main/phpg_gobject.= c,=0A+ main/phpg_closure.c main/phpg_gboxed.c ma= in/phpg_gpointer.c \=0A+ main/phpg_gobject.c,=0A= $ext_shared,, -I@ext_srcdir@/main)=0A =0A PHP_= ADD_SOURCES_X(/main, php_gtk_ext.c,, shared_objects_php_gtk2)=0Adiff --git = a/main/php_gtk.c b/main/php_gtk.c=0Aindex c9e1562..d839176 100644=0A--- a/m= ain/php_gtk.c=0A+++ b/main/php_gtk.c=0A@@ -194,6 +194,7 @@ PHP_RINIT_FUNCTI= ON(gtk)=0A =09phpg_gtype_register_self(TSRMLS_C);=0A =09phpg_gobject_regist= er_self(TSRMLS_C);=0A =09phpg_gboxed_register_self(TSRMLS_C);=0A+=09phpg_gp= ointer_register_self(TSRMLS_C);=0A =0A =09G_TYPE_PHP_VALUE =3D g_boxed_type= _register_static("PhpValue", php_object_copy, php_object_release);=0A =0Adi= ff --git a/main/php_gtk.h b/main/php_gtk.h=0Aindex 975db1f..a6bbce2 100644= =0A--- a/main/php_gtk.h=0A+++ b/main/php_gtk.h=0A@@ -118,6 +118,12 @@ typed= ef struct {=0A =09gboolean free_on_destroy;=0A } phpg_gboxed_t;=0A =0A+type= def struct {=0A+=09PHPG_OBJ_HEADER=0A+=09GType gtype;=0A+=09gpointer pointe= r;=0A+} phpg_gpointer_t;=0A+=0A typedef int (*boxed_from_zval_t)(const zval= *value, GValue *gvalue TSRMLS_DC);=0A typedef int (*boxed_to_zval_t)(const= GValue *gvalue, zval **value TSRMLS_DC);=0A typedef struct {=0A@@ -440,6 += 446,9 @@ static inline phpg_gboxed_t* phpg_gboxed_get(zval *zobj TSRMLS_DC)= =0A return pobj;=0A }=0A =0A+/* GPointer */=0A+void phpg_gpointer_regis= ter_self(TSRMLS_D);=0A+PHP_GTK_API void phpg_gpointer_new(zval **zobj, GTyp= e gtype, gpointer pointer TSRMLS_DC);=0A =0A /* Closures */=0A PHP_GTK_API = GClosure* phpg_closure_new(zval *callback, zval *user_args, zend_bool use_s= ignal_object TSRMLS_DC);=0A@@ -448,6 +457,7 @@ PHP_GTK_API void phpg_watch_= closure(zval *obj, GClosure *closure TSRMLS_DC);=0A PHP_GTK_API extern PHP_= GTK_EXPORT_CE(gtype_ce);=0A PHP_GTK_API extern PHP_GTK_EXPORT_CE(gobject_ce= );=0A PHP_GTK_API extern PHP_GTK_EXPORT_CE(gboxed_ce);=0A+PHP_GTK_API exter= n PHP_GTK_EXPORT_CE(gpointer_ce);=0A =0A #endif /* HAVE_PHP_GTK */=0A =0Adi= ff --git a/main/phpg_gboxed.c b/main/phpg_gboxed.c=0Aindex 6b93ca1..3ea918b= 100644=0A--- a/main/phpg_gboxed.c=0A+++ b/main/phpg_gboxed.c=0A@@ -125,6 += 125,7 @@ PHP_GTK_API void phpg_gboxed_new(zval **zobj, GType gtype, gpointe= r boxed, gbool=0A ZVAL_NULL(*zobj);=0A =0A phpg_return_if_fail(gtyp= e !=3D 0);=0A+ phpg_return_if_fail(boxed !=3D NULL);=0A phpg_return_= if_fail(!copy || (copy && own_ref));=0A =0A ce =3D g_type_get_qdata(gty= pe, phpg_class_key);=0Adiff --git a/main/phpg_gvalue.c b/main/phpg_gvalue.c= =0Aindex 17c2065..be3ce5e 100644=0A--- a/main/phpg_gvalue.c=0A+++ b/main/ph= pg_gvalue.c=0A@@ -27,7 +27,6 @@=0A */=0A =0A /* TODO=0A- * G_TYPE_POINTER= =0A * G_TYPE_PARAM=0A */=0A =0A@@ -130,6 +129,10 @@ PHP_GTK_API int phpg_= gvalue_to_zval(const GValue *gval, zval **value, zend_bool=0A }= =0A break;=0A =0A+ case G_TYPE_POINTER:=0A+ p= hpg_gpointer_new(value, G_VALUE_TYPE(gval), g_value_get_pointer(gval) TSRML= S_CC);=0A+ break;=0A+=0A case G_TYPE_BOXED:=0A {= =0A phpg_gboxed_marshal_t *gbm;=0A@@ -258,6 +261,18 @@ PHP_GTK_= API int phpg_gvalue_from_zval(GValue *gval, zval *value TSRMLS_DC)=0A = g_value_set_string(gval, Z_STRVAL_P(value));=0A break;= =0A =0A+ case G_TYPE_POINTER:=0A+ if (Z_TYPE_P(value) =3D= =3D IS_NULL) {=0A+ g_value_set_pointer(gval, NULL);=0A+ = } else if (Z_TYPE_P(value) =3D=3D IS_OBJECT=0A+ = && instanceof_function(Z_OBJCE_P(value), gpointer_ce TSRMLS_CC)=0A+ = && G_VALUE_HOLDS(gval, ((phpg_gpointer_t*)PHPG_GET(value))= ->gtype)) {=0A+ g_value_set_pointer(gval, ((phpg_gpointer_t*= )PHPG_GET(value))->pointer);=0A+ } else {=0A+ ret= urn FAILURE;=0A+ }=0A+ break;=0A+=0A case G_T= YPE_BOXED:=0A {=0A phpg_gboxed_marshal_t *gbm;=0A