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