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: | David Soria Parra | 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;