andrei Sun Feb 27 03:02:35 2005 EDT
Modified files:
/php-gtk/ext/gtk+ gdk.overrides
/php-gtk/generator generator.php
/php-gtk/main php_gtk.h phpg_gobject.c
Log:
- Add support for accessing properties for a couple of event types.
- Also implement a way to easier get properties of classes that overrode
read_property handler.
http://cvs.php.net/diff.php/php-gtk/ext/gtk+/gdk.overrides?r1=1.13&r2=1.14&ty=u
Index: php-gtk/ext/gtk+/gdk.overrides
diff -u php-gtk/ext/gtk+/gdk.overrides:1.13 php-gtk/ext/gtk+/gdk.overrides:1.14
--- php-gtk/ext/gtk+/gdk.overrides:1.13 Sat Feb 26 22:39:06 2005
+++ php-gtk/ext/gtk+/gdk.overrides Sun Feb 27 03:02:34 2005
@@ -92,8 +92,10 @@
override-handler GdkEvent read_property
static zval* phpg_gdkevent_read_property_handler(zval *object, zval *member,
int type TSRMLS_DC)
{
- zval tmp_member;
- zval result, *result_ptr = NULL;
+ zval tmp_member;
+ zval *result = NULL;
+ GdkEvent *event = (GdkEvent *) PHPG_GBOXED(object);
+ char *name;
if (member->type != IS_STRING) {
tmp_member = *member;
@@ -101,10 +103,99 @@
convert_to_string(&tmp_member);
member = &tmp_member;
}
- printf("GdkEvent read property handler\n");
- result_ptr = zend_get_std_object_handlers()->read_property(object, member,
type TSRMLS_CC);
+
+ name = Z_STRVAL_P(member);
+
+ /* TODO
+ * the rest of event types
+ */
+ switch (event->type) {
+ case GDK_NOTHING:
+ case GDK_DELETE:
+ case GDK_DESTROY:
+ break;
+
+ case GDK_KEY_PRESS:
+ case GDK_KEY_RELEASE:
+ if (!strcmp(name, "time")) {
+ ALLOC_ZVAL(result);
+ ZVAL_LONG(result, event->key.time);
+ } else if (!strcmp(name, "state")) {
+ ALLOC_ZVAL(result);
+ ZVAL_LONG(result, event->key.state);
+ } else if (!strcmp(name, "keyval")) {
+ ALLOC_ZVAL(result);
+ ZVAL_LONG(result, event->key.keyval);
+ } else if (!strcmp(name, "string")) {
+ ALLOC_ZVAL(result);
+ ZVAL_STRINGL(result, event->key.string, event->key.length, 1);
+ } else if (!strcmp(name, "hardware_keycode")) {
+ ALLOC_ZVAL(result);
+ ZVAL_LONG(result, event->key.hardware_keycode);
+ } else if (!strcmp(name, "group")) {
+ ALLOC_ZVAL(result);
+ ZVAL_LONG(result, event->key.group);
+ }
+ break;
+
+ default:
+ break;
+ }
+
+ if (!strcmp(name, "type")) {
+ ALLOC_ZVAL(result);
+ ZVAL_LONG(result, event->type);
+ } else if (!strcmp(name, "window")) {
+ ALLOC_ZVAL(result);
+ phpg_gobject_new(&result, (GObject *)event->any.window TSRMLS_CC);
+ } else if (!strcmp(name, "send_event")) {
+ ALLOC_ZVAL(result);
+ ZVAL_BOOL(result, event->any.send_event);
+ }
+
+ if (result) {
+ result->refcount = 0;
+ result->is_ref = 0;
+ } else {
+ result = zend_get_std_object_handlers()->read_property(object, member,
type TSRMLS_CC);
+ }
+
if (member == &tmp_member) {
zval_dtor(member);
}
- return result_ptr;
+
+ return result;
+}
+
+%%
+override-handler GdkEvent get_properties
+HashTable* phpg_gdkevent_get_properties_handler(zval *object TSRMLS_DC)
+{
+ phpg_head_t *poh = NULL;
+ GdkEvent *event = (GdkEvent *) PHPG_GBOXED(object);
+
+ poh = (phpg_head_t *) zend_object_store_get_object(object TSRMLS_CC);
+
+ /* TODO
+ * the rest of event types
+ */
+ switch (event->type) {
+ case GDK_KEY_PRESS:
+ case GDK_KEY_RELEASE:
+ phpg_get_properties_helper(object, poh->zobj.properties TSRMLS_CC,
+ STRS(time), STRS(state), STRS(keyval),
STRS(string),
+ STRS(hardware_keycode), STRS(group),
NULL);
+ break;
+
+ case GDK_NOTHING:
+ case GDK_DELETE:
+ case GDK_DESTROY:
+ default:
+ break;
+ }
+
+ phpg_get_properties_helper(object, poh->zobj.properties TSRMLS_CC,
+ STRS(type), STRS(window), STRS(send_event),
NULL);
+
+ return poh->zobj.properties;
}
http://cvs.php.net/diff.php/php-gtk/generator/generator.php?r1=1.67&r2=1.68&ty=u
Index: php-gtk/generator/generator.php
diff -u php-gtk/generator/generator.php:1.67
php-gtk/generator/generator.php:1.68
--- php-gtk/generator/generator.php:1.67 Sat Feb 26 22:39:06 2005
+++ php-gtk/generator/generator.php Sun Feb 27 03:02:34 2005
@@ -19,7 +19,7 @@
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
-/* $Id: generator.php,v 1.67 2005/02/27 03:39:06 andrei Exp $ */
+/* $Id: generator.php,v 1.68 2005/02/27 08:02:34 andrei Exp $ */
/*
* Significant portions of this generator are based on the pygtk code generator
@@ -59,7 +59,7 @@
'method' =>
Templates::boxed_method_body,
'prop' =>
Templates::boxed_prop_access),
);
- var $handlers = array('read_property', 'write_property');
+ var $handlers = array('read_property', 'write_property',
'get_properties');
function Generator(&$parser, &$overrides, $prefix, $function_class)
{
http://cvs.php.net/diff.php/php-gtk/main/php_gtk.h?r1=1.93&r2=1.94&ty=u
Index: php-gtk/main/php_gtk.h
diff -u php-gtk/main/php_gtk.h:1.93 php-gtk/main/php_gtk.h:1.94
--- php-gtk/main/php_gtk.h:1.93 Sat Feb 26 22:39:06 2005
+++ php-gtk/main/php_gtk.h Sun Feb 27 03:02:35 2005
@@ -18,7 +18,7 @@
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
-/* $Id: php_gtk.h,v 1.93 2005/02/27 03:39:06 andrei Exp $: */
+/* $Id: php_gtk.h,v 1.94 2005/02/27 08:02:35 andrei Exp $: */
#ifndef _PHP_GTK_H
#define _PHP_GTK_H
@@ -199,6 +199,9 @@
zval *phpg_read_property(zval *object, zval *member, int type TSRMLS_DC);
void phpg_write_property(zval *object, zval *member, zval *value TSRMLS_DC);
HashTable* phpg_get_properties(zval *object TSRMLS_DC);
+PHP_GTK_API void phpg_get_properties_helper(zval *object, HashTable *ht
TSRMLS_DC, ...);
+
+#define STRS(s) #s, sizeof(#s)-1
PHP_GTK_API void *php_gtk_get_object(zval *wrapper);
PHP_GTK_API int php_gtk_get_simple_enum_value(zval *enum_val, int *result);
http://cvs.php.net/diff.php/php-gtk/main/phpg_gobject.c?r1=1.25&r2=1.26&ty=u
Index: php-gtk/main/phpg_gobject.c
diff -u php-gtk/main/phpg_gobject.c:1.25 php-gtk/main/phpg_gobject.c:1.26
--- php-gtk/main/phpg_gobject.c:1.25 Sat Feb 26 23:57:41 2005
+++ php-gtk/main/phpg_gobject.c Sun Feb 27 03:02:35 2005
@@ -504,6 +504,30 @@
}
/* }}} */
+/* {{{ PHP_GTK_API phpg_get_properties_helper */
+PHP_GTK_API void phpg_get_properties_helper(zval *object, HashTable *ht
TSRMLS_DC, ...)
+{
+ va_list va;
+ char *prop;
+ int prop_len;
+ zval *result;
+ zend_class_entry *ce = Z_OBJCE_P(object);
+
+#ifdef ZTS
+ va_start(va, tsrm_ls);
+#else
+ va_start(va, ht);
+#endif
+ while ((prop = va_arg(va, char *)) != NULL) {
+ prop_len = va_arg(va, int);
+ result = zend_read_property(ce, object, prop, prop_len, 1 TSRMLS_CC);
+ zend_hash_update(ht, prop, prop_len+1, &result, sizeof(zval *), NULL);
+ }
+
+ va_end(va);
+}
+/* }}} */
+
/*
* GObject PHP class definition
*/
--
PHP-GTK CVS Mailing List (http://gtk.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php
|