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

From: Date: Sat, 01 Oct 2005 22:43:23 +0000
Subject: 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
Groups: php.gtk.cvs 
Request: Send a blank email to php-gtk-cvs+get-4792@lists.php.net to get a copy of this message
Commit: cbf79bfbd31fccd672be7049a4aa16a905d3eca8 Author: Andrei Zmievski <andrei@php.net> Sat, 1 Oct 2005 22:43:23 +0000 Parents: 28dcb5bda4b38797e2c6dd1d9411546d87312dd3 Branches: master Link: http://git.php.net/?p=gtk/php-gtk.git;a=commitdiff;h=cbf79bfbd31fccd672be7049a4aa16a905d3eca8 Log: Implement basic G_TYPE_POINTER support. Changed paths: M config.m4 M main/php_gtk.c M main/php_gtk.h M main/phpg_gboxed.c M main/phpg_gvalue.c Diff: cbf79bfbd31fccd672be7049a4aa16a905d3eca8 diff --git a/config.m4 b/config.m4 index 7318081..dd112e8 100644 --- a/config.m4 +++ b/config.m4 @@ -51,7 +51,7 @@ PHP_GTK_ARG_ENABLE(debug, whether to include debugging symbols, if test "$PHP_GTK_DEBUG" = "yes"; then echo " $CFLAGS" | grep ' -g' >/dev/null || DEBUG_CFLAGS="-g" if test "$CFLAGS" = "-g -O2"; then - CFLAGS=-g + CFLAGS=-g fi test -n "$GCC" && DEBUG_CFLAGS="$DEBUG_CFLAGS -Wall" fi @@ -68,7 +68,8 @@ PHP_SUBST(PHP_GTK_EXTENSIONS) PHP_NEW_EXTENSION(php_gtk2, main/php_gtk.c main/phpg_support.c main/phpg_gtype.c \ main/phpg_exceptions.c main/php_gtk_util.c main/phpg_gvalue.c \ - main/phpg_closure.c main/phpg_gboxed.c main/phpg_gobject.c, + main/phpg_closure.c main/phpg_gboxed.c main/phpg_gpointer.c \ + main/phpg_gobject.c, $ext_shared,, -I@ext_srcdir@/main) PHP_ADD_SOURCES_X(/main, php_gtk_ext.c,, shared_objects_php_gtk2) diff --git a/main/php_gtk.c b/main/php_gtk.c index c9e1562..d839176 100644 --- a/main/php_gtk.c +++ b/main/php_gtk.c @@ -194,6 +194,7 @@ PHP_RINIT_FUNCTION(gtk) phpg_gtype_register_self(TSRMLS_C); phpg_gobject_register_self(TSRMLS_C); phpg_gboxed_register_self(TSRMLS_C); + phpg_gpointer_register_self(TSRMLS_C); G_TYPE_PHP_VALUE = g_boxed_type_register_static("PhpValue", php_object_copy, php_object_release); diff --git a/main/php_gtk.h b/main/php_gtk.h index 975db1f..a6bbce2 100644 --- a/main/php_gtk.h +++ b/main/php_gtk.h @@ -118,6 +118,12 @@ typedef struct { gboolean free_on_destroy; } phpg_gboxed_t; +typedef struct { + PHPG_OBJ_HEADER + GType gtype; + gpointer pointer; +} phpg_gpointer_t; + typedef int (*boxed_from_zval_t)(const zval *value, GValue *gvalue TSRMLS_DC); typedef int (*boxed_to_zval_t)(const GValue *gvalue, zval **value TSRMLS_DC); typedef struct { @@ -440,6 +446,9 @@ static inline phpg_gboxed_t* phpg_gboxed_get(zval *zobj TSRMLS_DC) return pobj; } +/* GPointer */ +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); @@ -448,6 +457,7 @@ PHP_GTK_API void phpg_watch_closure(zval *obj, GClosure *closure TSRMLS_DC); PHP_GTK_API extern PHP_GTK_EXPORT_CE(gtype_ce); PHP_GTK_API extern PHP_GTK_EXPORT_CE(gobject_ce); PHP_GTK_API extern PHP_GTK_EXPORT_CE(gboxed_ce); +PHP_GTK_API extern PHP_GTK_EXPORT_CE(gpointer_ce); #endif /* HAVE_PHP_GTK */ diff --git a/main/phpg_gboxed.c b/main/phpg_gboxed.c index 6b93ca1..3ea918b 100644 --- a/main/phpg_gboxed.c +++ b/main/phpg_gboxed.c @@ -125,6 +125,7 @@ PHP_GTK_API void phpg_gboxed_new(zval **zobj, GType gtype, gpointer boxed, gbool ZVAL_NULL(*zobj); phpg_return_if_fail(gtype != 0); + phpg_return_if_fail(boxed != NULL); phpg_return_if_fail(!copy || (copy && own_ref)); ce = g_type_get_qdata(gtype, phpg_class_key); diff --git a/main/phpg_gvalue.c b/main/phpg_gvalue.c index 17c2065..be3ce5e 100644 --- a/main/phpg_gvalue.c +++ b/main/phpg_gvalue.c @@ -27,7 +27,6 @@ */ /* TODO - * G_TYPE_POINTER * G_TYPE_PARAM */ @@ -130,6 +129,10 @@ PHP_GTK_API int phpg_gvalue_to_zval(const GValue *gval, zval **value, zend_bool } break; + case G_TYPE_POINTER: + phpg_gpointer_new(value, G_VALUE_TYPE(gval), g_value_get_pointer(gval) TSRMLS_CC); + break; + case G_TYPE_BOXED: { phpg_gboxed_marshal_t *gbm; @@ -258,6 +261,18 @@ PHP_GTK_API int phpg_gvalue_from_zval(GValue *gval, zval *value TSRMLS_DC) g_value_set_string(gval, Z_STRVAL_P(value)); break; + case G_TYPE_POINTER: + if (Z_TYPE_P(value) == IS_NULL) { + g_value_set_pointer(gval, NULL); + } else if (Z_TYPE_P(value) == IS_OBJECT + && instanceof_function(Z_OBJCE_P(value), gpointer_ce TSRMLS_CC) + && G_VALUE_HOLDS(gval, ((phpg_gpointer_t*)PHPG_GET(value))->gtype)) { + g_value_set_pointer(gval, ((phpg_gpointer_t*)PHPG_GET(value))->pointer); + } else { + return FAILURE; + } + break; + case G_TYPE_BOXED: { phpg_gboxed_marshal_t *gbm;

« previous php.gtk.cvs (#4792) next »