com gtk/php-gtk: Removing old overrides: ext/gtk+/v1.gdk.overrides ext/gtk+/v1.gtk.overrides

[email protected] (David Soria Parra)
Newsgroups php.gtk.cvs
Message-ID <[email protected]>
Commit:    07aa1180bf2c90254e877397b5494a29669b686f
Author:    Christian Weiske <[email protected]>         Mon, 19 Jun 2006 16:25:44 +0000
Parents:   ae2ae03920ef46c9009896eb3f57bf35e5fba889
Branches:  master

Link:       http://git.php.net/?p=gtk/php-gtk.git;a=commitdiff;h=07aa1180bf2c90254e877397b5494a29669b686f

Log:
Removing old overrides

Changed paths:
  D  ext/gtk+/v1.gdk.overrides
  D  ext/gtk+/v1.gtk.overrides
diff_07aa1180bf2c90254e877397b5494a29669b686f.txt (text/plain, 94.9 KB)
07aa1180bf2c90254e877397b5494a29669b686f
diff --git a/ext/gtk+/v1.gdk.overrides b/ext/gtk+/v1.gdk.overrides
deleted file mode 100644
index c85568c..0000000
--- a/ext/gtk+/v1.gdk.overrides
+++ /dev/null
@@ -1,192 +0,0 @@
-/* vim: set ft=cpp: */
-/* TODO
- * fix gdk_gc_new2
- */
-%%
-headers
-#include <gdk-pixbuf/gdk-pixbuf.h>
-
-#if defined(GDK_WINDOWING_X11)
-#include <gdk/gdkx.h>
-#elif defined(GDK_WINDOWING_WIN32)
-#include <gdk/gdkwin32.h>
-#endif
-
-/* make GDK_DISPLAY() the case macro */
-#undef GDK_DISPLAY
-#define GDK_DISPLAY(object) (GDK_DISPLAY_OBJECT(object))
-
-/* Forward declaration, since gen_gtk.h is generated later. */
-extern PHP_GTK_EXPORT_CE(gtkwidget_ce);
-
-#include "gen_pango.h"
-
-%%
-ignore
-	GdkDebugFlag
-	GdkColorInfoFlags
-%%
-ignore
-	gdk_pixmap_new
-	gdk_gc_new2
-%%
-override gdk_color_parse
-PHP_FUNCTION(gdk_color_parse)
-{
-	gchar *color_spec;
-	GdkColor color;
-
-	if (!php_gtk_parse_args(ZEND_NUM_ARGS(), "s", &color_spec)) {
-		return;
-	}
-
-	if (gdk_color_parse(color_spec, &color))
-		*return_value = *php_gdk_color_new(&color);
-	else
-		php_error(E_WARNING, "%s() could not parse color spec '%s'", get_active_function_name(TSRMLS_C), color_spec);
-}
-%%
-override gdk_pixmap_create_from_xpm
-PHP_FUNCTION(gdk_pixmap_create_from_xpm)
-{
-	zval *php_window, *php_trans_color;
-	gchar *filename;
-	GdkWindow *window = NULL;
-	GdkColor *trans_color = NULL;
-	GdkPixmap *pixmap = NULL;
-	GdkBitmap *mask;
-
-	if (!php_gtk_parse_args(ZEND_NUM_ARGS(), "NNs", &php_window, gdk_window_ce,
-							&php_trans_color, gdk_color_ce, &filename))
-		return;
-
-	if (Z_TYPE_P(php_window) != IS_NULL)
-		window = PHP_GDK_WINDOW_GET(php_window);
-	if (Z_TYPE_P(php_trans_color) != IS_NULL)
-		trans_color = PHP_GDK_COLOR_GET(php_trans_color);
-
-	pixmap = gdk_pixmap_create_from_xpm(window, &mask, trans_color, filename);
-	if (!pixmap) {
-		php_error(E_WARNING, "%s() cannot load pixmap", get_active_function_name(TSRMLS_C));
-		return;
-	}
-	
-	*return_value = *php_gtk_build_value("(NN)", php_gdk_pixmap_new(pixmap), php_gdk_bitmap_new(mask));
-}
-%%
-override gdk_pixmap_create_from_xpm_d
-PHP_FUNCTION(gdk_pixmap_create_from_xpm_d)
-{
-	zval *php_window, *php_trans_color, *php_data;
-	zval **line;
-	GdkWindow *window = NULL;
-	GdkColor *trans_color = NULL;
-	GdkPixmap *pixmap = NULL;
-	GdkBitmap *mask;
-	char **data;
-	int len, i = 0;
-
-	if (!php_gtk_parse_args(ZEND_NUM_ARGS(), "NNa/", &php_window, gdk_window_ce,
-							&php_trans_color, gdk_color_ce, &php_data))
-		return;
-
-	if (Z_TYPE_P(php_window) != IS_NULL)
-		window = PHP_GDK_WINDOW_GET(php_window);
-	if (Z_TYPE_P(php_trans_color) != IS_NULL)
-		trans_color = PHP_GDK_COLOR_GET(php_trans_color);
-
-	len = zend_hash_num_elements(Z_ARRVAL_P(php_data));
-	data = emalloc(len * sizeof(char *));
-	for (zend_hash_internal_pointer_reset(Z_ARRVAL_P(php_data));
-		 zend_hash_get_current_data(Z_ARRVAL_P(php_data), (void **)&line) == SUCCESS;
-		 zend_hash_move_forward(Z_ARRVAL_P(php_data))) {
-		convert_to_string_ex(line);
-		data[i++] = Z_STRVAL_PP(line);
-	}
-
-	pixmap = gdk_pixmap_create_from_xpm_d(window, &mask, trans_color, data);
-	efree(data);
-	if (!pixmap) {
-		php_error(E_WARNING, "%s() cannot create pixmap", get_active_function_name(TSRMLS_C));
-		return;
-	}
-
-	*return_value = *php_gtk_build_value("(NN)", php_gdk_pixmap_new(pixmap), php_gdk_bitmap_new(mask));
-}
-%%
-override gdk_pixmap_colormap_create_from_xpm
-PHP_FUNCTION(gdk_pixmap_colormap_create_from_xpm)
-{
-	zval *php_window, *php_trans_color, *php_colormap;
-	gchar *filename;
-	GdkWindow *window = NULL;
-	GdkColormap *colormap = NULL;
-	GdkColor *trans_color = NULL;
-	GdkPixmap *pixmap = NULL;
-	GdkBitmap *mask;
-
-	if (!php_gtk_parse_args(ZEND_NUM_ARGS(), "NNNs", &php_window, gdk_window_ce,
-							&php_colormap, gdk_colormap_ce, &php_trans_color,
-							gdk_color_ce, &filename))
-		return;
-
-	if (Z_TYPE_P(php_window) != IS_NULL)
-		window = PHP_GDK_WINDOW_GET(php_window);
-	if (Z_TYPE_P(php_colormap) != IS_NULL)
-		colormap = PHP_GDK_COLORMAP_GET(php_colormap);
-	if (Z_TYPE_P(php_trans_color) != IS_NULL)
-		trans_color = PHP_GDK_COLOR_GET(php_trans_color);
-
-	pixmap = gdk_pixmap_colormap_create_from_xpm(window, colormap, &mask, trans_color, filename);
-	if (!pixmap) {
-		php_error(E_WARNING, "%s() cannot load pixmap", get_active_function_name(TSRMLS_C));
-		return;
-	}
-
-	*return_value = *php_gtk_build_value("(NN)", php_gdk_pixmap_new(pixmap), php_gdk_bitmap_new(mask));
-}
-%%
-override gdk_pixmap_colormap_create_from_xpm_d
-PHP_FUNCTION(gdk_pixmap_colormap_create_from_xpm_d)
-{
-	zval *php_window, *php_colormap,
-		 *php_trans_color, *php_data;
-	zval **line;
-	GdkWindow *window = NULL;
-	GdkColormap *colormap = NULL;
-	GdkColor *trans_color = NULL;
-	GdkPixmap *pixmap = NULL;
-	GdkBitmap *mask;
-	char **data;
-	int len, i = 0;
-
-	if (!php_gtk_parse_args(ZEND_NUM_ARGS(), "NNNa/", &php_window,
-							gdk_window_ce, &php_colormap, gdk_colormap_ce,
-							&php_trans_color, gdk_color_ce, &php_data))
-		return;
-
-	if (Z_TYPE_P(php_window) != IS_NULL)
-		window = PHP_GDK_WINDOW_GET(php_window);
-	if (Z_TYPE_P(php_colormap) != IS_NULL)
-		colormap = PHP_GDK_COLORMAP_GET(php_colormap);
-	if (Z_TYPE_P(php_trans_color) != IS_NULL)
-		trans_color = PHP_GDK_COLOR_GET(php_trans_color);
-
-	len = zend_hash_num_elements(Z_ARRVAL_P(php_data));
-	data = emalloc(len * sizeof(char *));
-	for (zend_hash_internal_pointer_reset(Z_ARRVAL_P(php_data));
-		 zend_hash_get_current_data(Z_ARRVAL_P(php_data), (void **)&line) == SUCCESS;
-		 zend_hash_move_forward(Z_ARRVAL_P(php_data))) {
-		convert_to_string_ex(line);
-		data[i++] = Z_STRVAL_PP(line);
-	}
-
-	pixmap = gdk_pixmap_colormap_create_from_xpm_d(window, colormap, &mask, trans_color, data);
-	efree(data);
-	if (!pixmap) {
-		php_error(E_WARNING, "%s() cannot create pixmap", get_active_function_name(TSRMLS_C));
-		return;
-	}
-
-	*return_value = *php_gtk_build_value("(NN)", php_gdk_pixmap_new(pixmap), php_gdk_bitmap_new(mask));
-}
diff --git a/ext/gtk+/v1.gtk.overrides b/ext/gtk+/v1.gtk.overrides
deleted file mode 100644
index 112ba5d..0000000
--- a/ext/gtk+/v1.gtk.overrides
+++ /dev/null
@@ -1,3230 +0,0 @@
-/* vim: set ft=cpp fdm=marker: */
-%%
-headers
-#include "gen_atk.h"
-#include "gen_gdk.h"
-#include "gen_pango.h"
-#include "ext/standard/file.h"
-
-/* TODO
- * implement gtk_adjustment_set_all
- * implement gtk_radio_tool_button_new
- */
-%% {{{ ignores
-
-%%
-ignore-glob
-	*_get_type
-	gtk_marshal_*
-	gtk_arg_*
-	gtk_args_*
-	gtk_signal_connect*
-	gtk_signal_new*
-	gtk_init_add_*
-	gtk_quit_add_*
-	gtk_timeout_add_*
-	gtk_idle_add_*
-	gtk_accelerator_*
-	gtk_target_list_*
-	gtk_radio_tool_button_new*
-%%
-ignore
-	gtk_init
-	gtk_init_check
-	gtk_exit
-	gtk_set_locale
-	gtk_accel_group_new
-	gtk_accel_group_ref
-	gtk_accel_group_unref
-	gtk_accel_group_lock
-	gtk_accel_group_unlock
-	gtk_accel_groups_activate
-	gtk_accel_group_activate
-	gtk_accel_group_attach
-	gtk_accel_group_detach
-	gtk_accel_group_get_entry
-	gtk_accel_group_lock_entry
-	gtk_accel_group_unlock_entry
-	gtk_accel_group_add
-	gtk_accel_group_remove
-	gtk_accel_group_handle_add
-	gtk_accel_group_handle_remove
-	gtk_accel_group_create_add
-	gtk_accel_group_create_remove
-	gtk_accel_groups_from_object
-	gtk_accel_group_entries_from_object
-	gtk_button_new_with_label
-	gtk_button_new_with_mnemonic
-	gtk_button_new_from_stock
-	gtk_signal_add_emission_hook_full
-	gtk_signal_set_funcs
-	gtk_signal_disconnect_by_func
-	gtk_signal_disconnect_by_data
-	gtk_signal_handler_block_by_func
-	gtk_signal_handler_block_by_data
-	gtk_signal_handler_unblock_by_func
-	gtk_signal_handler_unblock_by_data
-	gtk_signal_handler_pending_by_func
-	gtk_signal_n_emissions
-	gtk_signal_n_emissions_by_name
-	gtk_signal_query
-	gtk_signal_emit
-	gtk_signal_emit_by_name
-	gtk_signal_emitv
-	gtk_signal_emitv_by_name
-	gtk_quit_remove_by_data
-	gtk_idle_remove_by_data
-	gtk_object_weakref
-	gtk_object_weakunref
-	gtk_object_get
-	gtk_object_getv
-	gtk_object_set
-	gtk_object_setv
-	gtk_object_set_data_full
-	gtk_object_set_user_data
-	gtk_object_get_user_data
-	gtk_object_set_data_by_id
-	gtk_object_set_data_by_id_full
-	gtk_object_get_data_by_id
-	gtk_object_remove_data_by_id
-	gtk_object_remove_no_notify_by_id
-	gtk_object_arg_set
-	gtk_object_arg_get
-	gtk_trace_referencing
-	gtk_widget_get
-	gtk_widget_getv
-	gtk_widget_set
-	gtk_widget_setv
-	gtk_container_get_toplevels
-	gtk_container_add_child_arg_type
-	gtk_container_query_child_args
-	gtk_container_child_args_collect
-	gtk_container_child_arg_get_info
-	gtk_container_foreach
-	gtk_container_foreach_full
-	gtk_container_forall
-	gtk_container_child_getv
-	gtk_container_child_setv
-	gtk_container_add_with_args
-	gtk_container_addv
-	gtk_container_child_set
-	gtk_container_arg_set
-	gtk_container_arg_get
-	gtk_progress_bar_new
-	gtk_clist_set_row_data_full
-	gtk_window_add_embedded_xid
-	gtk_window_remove_embedded_xid
-	gtk_range_trough_click
-	gtk_range_default_htrough_click
-	gtk_range_default_vtrough_click
-	gtk_tooltips_data_get
-	gtk_type_check_object_cast
-	gtk_type_check_class_cast
-	gtk_type_register_enum
-	gtk_type_register_flags
-	gtk_preview_uninit
-	gtk_item_factory_create_item
-	gtk_item_factory_delete_entry
-	gtk_item_factory_delete_entries
-	gtk_item_factory_popup_with_data
-	gtk_item_factory_popup_data
-	gtk_item_factory_set_translate_func
-	gtk_item_factory_create_items_ac
-	gtk_item_factory_create_menu_entries
-	gtk_menu_attach_to_widget
-	gtk_style_new
-	gtk_clist_construct
-	gtk_object_new
-	gtk_object_newv
-	gtk_object_query_args
-	gtk_object_add_arg_type
-	gtk_object_args_collect
-	gtk_object_arg_get_info
-	gtk_widget_new
-	gtk_widget_newv
-	gtk_widget_reset_shapes
-	gtk_key_snooper_install
-	gtk_key_snooper_remove
-	gtk_get_current_event
-	gtk_get_event_widget
-	gtk_propagate_event
-	gtk_container_dequeue_resize_handler
-	gtk_window_reposition
-	gtk_draw_flat_box
-	gtk_draw_check
-	gtk_draw_option
-	gtk_draw_cross
-	gtk_draw_ramp
-	gtk_draw_tab
-	gtk_draw_shadow_gap
-	gtk_draw_box_gap
-	gtk_draw_extension
-	gtk_draw_focus
-	gtk_draw_slider
-	gtk_draw_handle
-	gtk_container_queue_resize
-	gtk_container_clear_resize_widgets
-	gtk_container_child_composite_name
-	gtk_progress_bar_update
-	gtk_adjustment_set_all
-%%
-ignore
-	GtkArgFlags
-	GtkPrivateFlags
-%% }}}
-
-%% {{{ General functions
-
-%%
-override gtk_true
-PHP_FUNCTION(gtk_true)
-{
-	RETURN_TRUE;
-}
-%%
-override gtk_false
-PHP_FUNCTION(gtk_false)
-{
-	RETURN_FALSE;
-}
-%%
-override gtk_timeout_add
-PHP_FUNCTION(gtk_timeout_add)
-{
-	guint32 interval;
-	zval *callback = NULL;
-	zval *extra;
-	zval *data;
-	char *callback_filename;
-	uint callback_lineno;
-
-	if (ZEND_NUM_ARGS() < 2) {
-		php_error(E_WARNING, "%s() requires at least 2 arguments, %d given",
-				  get_active_function_name(TSRMLS_C), ZEND_NUM_ARGS());
-		return;
-	}
-
-	if (!php_gtk_parse_args(2, "iV", &interval, &callback))
-		return;
-
-	callback_filename = zend_get_executed_filename(TSRMLS_C);
-	callback_lineno = zend_get_executed_lineno(TSRMLS_C);
-	extra = php_gtk_func_args_as_hash(ZEND_NUM_ARGS(), 2, ZEND_NUM_ARGS());
-	data = php_gtk_build_value("(VNsi)", callback, extra, callback_filename, callback_lineno);
-	RETURN_LONG(gtk_timeout_add_full(interval, NULL,
-									 (GtkCallbackMarshal)php_gtk_handler_marshal,
-									 data, php_gtk_destroy_notify));
-}
-%%
-override gtk_idle_add
-PHP_FUNCTION(gtk_idle_add)
-{
-	zval *callback = NULL;
-	zval *extra;
-	zval *data;
-	char *callback_filename;
-	uint callback_lineno;
-
-	if (ZEND_NUM_ARGS() < 1) {
-		php_error(E_WARNING, "%s() requires at least 1 argument, %d given",
-				  get_active_function_name(TSRMLS_C), ZEND_NUM_ARGS());
-		return;
-	}
-
-	if (!php_gtk_parse_args(1, "V", &callback))
-		return;
-
-	callback_filename = zend_get_executed_filename(TSRMLS_C);
-	callback_lineno = zend_get_executed_lineno(TSRMLS_C);
-	extra = php_gtk_func_args_as_hash(ZEND_NUM_ARGS(), 1, ZEND_NUM_ARGS());
-	data = php_gtk_build_value("(VNsi)", callback, extra, callback_filename, callback_lineno);
-	RETURN_LONG(gtk_idle_add_full(GTK_PRIORITY_DEFAULT, NULL,
-								 (GtkCallbackMarshal)php_gtk_handler_marshal,
-								 data, php_gtk_destroy_notify));
-}
-%%
-override gtk_quit_add
-PHP_FUNCTION(gtk_quit_add)
-{
-	gint main_level;
-	zval *callback = NULL;
-	zval *extra;
-	zval *data;
-	char *callback_filename;
-	uint callback_lineno;
-
-	if (ZEND_NUM_ARGS() < 2) {
-		php_error(E_WARNING, "%s() requires at least 2 arguments, %d given",
-				  get_active_function_name(TSRMLS_C), ZEND_NUM_ARGS());
-		return;
-	}
-
-	if (!php_gtk_parse_args(2, "iV", &main_level, &callback))
-		return;
-
-	callback_filename = zend_get_executed_filename(TSRMLS_C);
-	callback_lineno = zend_get_executed_lineno(TSRMLS_C);
-	extra = php_gtk_func_args_as_hash(ZEND_NUM_ARGS(), 2, ZEND_NUM_ARGS());
-	data = php_gtk_build_value("(VNsi)", callback, extra, callback_filename, callback_lineno);
-	RETURN_LONG(gtk_quit_add_full(main_level, NULL,
-								  (GtkCallbackMarshal)php_gtk_handler_marshal,
-								  data, php_gtk_destroy_notify));
-}
-%%
-override gtk_input_add_full
-void php_gtk_input_marshal(gpointer a, gpointer data, int nargs, GtkArg *args)
-{
-	zval *callback_data = (zval *)data;
-	zval *params;
-	zval *retval = NULL, **callback, **extra = NULL;
-	zval **callback_filename = NULL, **callback_lineno = NULL;
-	zval **source_rsrc = NULL;
-	zval ***input_args;
-	char *callback_name;
-	TSRMLS_FETCH();
-
-	zend_hash_index_find(Z_ARRVAL_P(callback_data), 0, (void **)&callback);
-	zend_hash_index_find(Z_ARRVAL_P(callback_data), 1, (void **)&source_rsrc);
-	zend_hash_index_find(Z_ARRVAL_P(callback_data), 2, (void **)&extra);
-	zend_hash_index_find(Z_ARRVAL_P(callback_data), 3, (void **)&callback_filename);
-	zend_hash_index_find(Z_ARRVAL_P(callback_data), 4, (void **)&callback_lineno);
-
-	if (!php_gtk_is_callable(*callback, 0, &callback_name)) {
-		php_error(E_WARNING, "Unable to call input callback '%s' specified in %s on line %d", callback_name, Z_STRVAL_PP(callback_filename), Z_LVAL_PP(callback_lineno));
-		efree(callback_name);
-		return;
-	}
-
-	params = php_gtk_args_as_hash(nargs, args);
-	/*
-	 * We substitute the first argument with the actual resource zval.
-	 */
-	zval_add_ref(source_rsrc);
-	zend_hash_index_update(Z_ARRVAL_P(params), 0, (void*)source_rsrc, sizeof(zval *), NULL);
-	if (extra)
-		php_array_merge(Z_ARRVAL_P(params), Z_ARRVAL_PP(extra), 0 TSRMLS_CC);
-	input_args = php_gtk_hash_as_array(params);
-	call_user_function_ex(EG(function_table), NULL, *callback, &retval, zend_hash_num_elements(Z_ARRVAL_P(params)), input_args, 0, NULL TSRMLS_CC);
-	if (retval)
-		zval_ptr_dtor(&retval);
-	efree(input_args);
-	zval_ptr_dtor(&params);
-}
-
-PHP_FUNCTION(gtk_input_add_full)
-{
-	zval *source_rsrc;
-	int source;
-	int rsrc_type;
-    GdkInputCondition condition;
-	zval *callback = NULL;
-	zval *extra, *data;
-	char *callback_filename;
-	uint callback_lineno;
-
-	if (ZEND_NUM_ARGS() < 3) {
-		php_error(E_WARNING, "%s() requires at least 3 arguments, %d given",
-				  get_active_function_name(TSRMLS_C), ZEND_NUM_ARGS());
-		return;
-	}
-
-	if (!php_gtk_parse_args(3, "riV", &source_rsrc, &condition, &callback))
-		return;
-
-#ifdef PHP_HAVE_STREAMS
-	{
-		php_stream *stream;
-		stream = zend_list_find(Z_LVAL_P(source_rsrc), &rsrc_type);
-		if (!stream || rsrc_type != php_file_le_stream()) {
-			php_error(E_WARNING, "%s() expects argument 1 to be a valid stream resource", get_active_function_name(TSRMLS_C));
-			return;
-		}
-		if (php_stream_can_cast(stream, PHP_STREAM_AS_SOCKETD) == SUCCESS) {
-			php_stream_cast(stream, PHP_STREAM_AS_SOCKETD, (void*)&source, 0);
-		} else if (php_stream_can_cast(stream, PHP_STREAM_AS_FD) == SUCCESS) {
-			php_stream_cast(stream, PHP_STREAM_AS_FD, (void*)&source, 0);
-		} else {
-			php_error(E_WARNING, "%s() could not use stream of type '%s'",
-					  get_active_function_name(TSRMLS_C), stream->ops->label);
-			return;
-		}
-	}
-#else
-	{
-		void *source_ptr;
-
-		source_ptr = zend_list_find(Z_LVAL_P(source_rsrc), &rsrc_type);
-		if (!source_ptr ||
-			(rsrc_type != php_file_le_fopen() && rsrc_type != php_file_le_popen() && rsrc_type != php_file_le_socket())) {
-			php_error(E_WARNING, "%s() expects argument 1 to be a valid filehandle, pipe, or socket resource", get_active_function_name(TSRMLS_C));
-			return;
-		}
-		if (rsrc_type == php_file_le_socket())
-			source = *((int *)source_ptr);
-		else
-			source = fileno((FILE *)source_ptr);
-	}
-#endif
-	
-	callback_filename = zend_get_executed_filename(TSRMLS_C);
-	callback_lineno = zend_get_executed_lineno(TSRMLS_C);
-	extra = php_gtk_func_args_as_hash(ZEND_NUM_ARGS(), 3, ZEND_NUM_ARGS());
-	data = php_gtk_build_value("(VVNsi)", callback, source_rsrc, extra, callback_filename, callback_lineno);
-	RETURN_LONG(gtk_input_add_full(source, condition, NULL,
-								   (GtkCallbackMarshal)php_gtk_input_marshal,
-								   data, php_gtk_destroy_notify));
-}
-%%
-override gtk_signal_add_emission_hook
-
-static void php_gtk_emission_hook_marshal(GtkObject *o, guint signal_id, guint nargs, GtkArg *args, gpointer data)
-{
-	zval *callback_data = (zval *)data;
-	zval *gtk_args;
-	zval **callback, **extra = NULL;
-	zval **callback_filename = NULL, **callback_fileno = NULL;
-	zval ***hook_args;
-	zval *wrapper = NULL;
-	zval *params;
-	zval *retval = NULL;
-	char *callback_name;
-	TSRMLS_FETCH();
-
-	/* Callback is always passed as the first element. */
-	zend_hash_index_find(Z_ARRVAL_P(callback_data), 0, (void**)&callback);
-
-	/* Extra parametrers are always passed as the second element. */
-	zend_hash_index_find(Z_ARRVAL_P(callback_data), 1, (void**)&extra);
-
-	/* Third and fourth parameter are always filename and the line number where
-	 * the callback was specified. */
-	zend_hash_index_find(Z_ARRVAL_P(callback_data), 2, (void**)&callback_filename);
-	zend_hash_index_find(Z_ARRVAL_P(callback_data), 3, (void**)&callback_fileno);
-
-	if (!php_gtk_is_callable(*callback, 0, &callback_name)) {
-		php_error(E_WARNING, "Unable to call emission hook '%s' specified in %s on line %d", callback_name, Z_STRVAL_PP(callback_filename), Z_LVAL_PP(callback_fileno));
-		efree(callback_name);
-		return;
-	}
-
-	wrapper = php_gtk_new(o);
-
-	/* Prepare the parameters to be passed to the user function. */
-	MAKE_STD_ZVAL(params);
-	array_init(params);
-	/* Pass the object which emitted the signal as first parameer. */
-	add_next_index_zval(params, wrapper);
-	/* Pass the signal id as second parameter. */
-	add_next_index_long(params, signal_id);
-
-	gtk_args = php_gtk_args_as_hash(nargs, args);
-	php_array_merge(Z_ARRVAL_P(params), Z_ARRVAL_P(gtk_args), 0 TSRMLS_CC);
-
-	zval_ptr_dtor(&gtk_args);
-
-	/*
-	 * If there are extra arguments specified by user, add them to the parameter
-	 * array.
-	 */
-	if (extra)
-		php_array_merge(Z_ARRVAL_P(params), Z_ARRVAL_PP(extra), 0 TSRMLS_CC);
-	
-	hook_args = php_gtk_hash_as_array(params);
-
-	call_user_function_ex(EG(function_table), NULL, *callback, &retval,
-						  zend_hash_num_elements(Z_ARRVAL_P(params)), hook_args,
-						  0, NULL TSRMLS_CC);
-	
-	if (retval) {
-		if (args)
-			php_gtk_ret_from_value(&args[nargs], retval);
-		zval_ptr_dtor(&retval);
-	}
-
-	efree(hook_args);
-	zval_ptr_dtor(&params);
-}
-
-PHP_FUNCTION(gtk_signal_add_emission_hook)
-{
-	guint signal_id;
-	zval  *callback;
-	char  *callback_filename;
-	uint  callback_lineno;
-	zval  *extra;
-	zval  *data;
-
-	if (ZEND_NUM_ARGS() < 2) {
-		php_error(E_WARNING, "%s() requires at least 2 arguments, %d given",
-				  get_active_function_name(TSRMLS_C), ZEND_NUM_ARGS());
-		return;
-	}
-
-	if (!php_gtk_parse_args(2, "iV", &signal_id, &callback))
-		return;
-	
-	callback_filename = zend_get_executed_filename(TSRMLS_C);
-	callback_lineno   = zend_get_executed_lineno(TSRMLS_C);
-	extra = php_gtk_func_args_as_hash(ZEND_NUM_ARGS(), 2, ZEND_NUM_ARGS());
-	data  = php_gtk_build_value("(VNsi)", callback, extra, callback_filename, callback_lineno);
-	RETURN_LONG(gtk_signal_add_emission_hook_full(signal_id,
-												  (GtkEmissionHook)php_gtk_emission_hook_marshal,
-												  data, php_gtk_destroy_notify));
-}
-%%
-overrides gtk_rc_get_default_files
-PHP_FUNCTION(gtk_rc_get_default_files)
-{
-	gchar **ret;
-	
-	if (!php_gtk_parse_args(ZEND_NUM_ARGS(), ""))
-		return;
-
-	ret = gtk_rc_get_default_files();
-	if (ret) {
-		array_init(return_value);
-		while (*ret) {
-			add_next_index_string(return_value, *ret, 1);
-			*ret++;
-		}
-		g_free(ret);
-	} else
-		RETURN_NULL();
-}
-%% }}}
-
-%% {{{ GtkBox
-%%
-override gtk_box_query_child_packing
-PHP_FUNCTION(gtk_box_query_child_packing)
-{
-	zval *child;
-	gboolean expand, fill;
-	guint padding;
-	GtkPackType pack_type;
-
-	NOT_STATIC_METHOD();
-
-	if (!php_gtk_parse_args(ZEND_NUM_ARGS(), "O", &child, gtk_widget_ce))
-		return;
-
-	gtk_box_query_child_packing(GTK_BOX(PHP_GTK_GET(this_ptr)),
-								GTK_WIDGET(PHP_GTK_GET(child)),
-								&expand, &fill, &padding, &pack_type);
-
-	array_init(return_value);
-	add_next_index_bool(return_value, expand);
-	add_next_index_bool(return_value, fill);
-	add_next_index_long(return_value, padding);
-	add_next_index_long(return_value, pack_type);
-}
-%%
-getprop GtkBox children
-	GList *tmp;
-	GList *children = GTK_BOX(PHP_GTK_GET(object))->children;
-	/*
-	zend_overloaded_element *property;
-	zend_llist_element *next = (*element)->next;
-	int prop_index;
-
-	if (next) {
-		int i = 0;
-		property = (zend_overloaded_element *)next->data;
-		if (Z_TYPE_P(property) == OE_IS_ARRAY && Z_TYPE(property->element) == IS_LONG) {
-			*element = next;
-			prop_index = Z_LVAL(property->element);
-			for (tmp = children, i = 0; tmp; tmp = tmp->next, i++) {
-				if (i == prop_index) {
-					*return_value = *php_gtk_box_child_new((GtkBoxChild *)tmp->data);
-					return;
-				}
-			}
-		}
-	} else {
-		array_init(return_value);
-		for (tmp = children; tmp; tmp = tmp->next) {
-			add_next_index_zval(return_value, php_gtk_box_child_new((GtkBoxChild *)tmp->data));
-		}
-	}
-	*/
-	array_init(return_value);
-	for (tmp = children; tmp; tmp = tmp->next) {
-		add_next_index_zval(return_value, php_gtk_box_child_new((GtkBoxChild *)tmp->data));
-	}
-%% }}}
-
-%% {{{ GtkButton
-%%
-override gtk_button_new
-PHP_METHOD(GtkButton, __construct)
-{
-	GObject *wrapped_obj;
-	gchar *text = NULL;
-	zend_bool use_underline = 0;
-
-	NOT_STATIC_METHOD();
-
-	if (!php_gtk_parse_args(ZEND_NUM_ARGS(), "|sb", &text, &use_underline)) {
-		return;
-	}
-
-	if (text) {
-		wrapped_obj = (GObject *)gobject_new(GTK_TYPE_BUTTON, "label", text,
-											 "use-underline", use_underline, NULL);
-	} else {
-		wrapped_obj = (GObject *)gtk_button_new();
-	}
-
-	if (!wrapped_obj) {
-		php_error(E_WARNING, "could not create GtkButton object");
-		return;
-	}
-
-    phpg_gobject_set_wrapper(this_ptr, wrapped_obj TSRMLS_CC);
-}
-
-%% }}}
-
-%% {{{ GtkCalendar
-%%
-getprop GtkCalendar marked_date
-	GtkCalendar *cal = GTK_CALENDAR(PHP_GTK_GET(object));
-	/*
-	zend_overloaded_element *property;
-	zend_llist_element *next = (*element)->next;
-	int prop_index;
-
-	if (next) {
-		property = (zend_overloaded_element *)next->data;
-		if (Z_TYPE_P(property) == OE_IS_ARRAY && Z_TYPE(property->element) == IS_LONG) {
-			*element = next;
-			prop_index = Z_LVAL(property->element);
-			if (prop_index > 0 && prop_index < 31)
-				ZVAL_LONG(return_value, cal->marked_date[prop_index]);
-		}
-	} else {
-		int i;
-
-		array_init(return_value);
-		for (i = 0; i < 31; i++)
-			add_next_index_long(return_value, cal->marked_date[i]);
-	}
-	*/
-	int i;
-
-	array_init(return_value);
-	for (i = 0; i < 31; i++)
-		add_next_index_long(return_value, cal->marked_date[i]);
-%%
-override gtk_calendar_get_date
-PHP_FUNCTION(gtk_calendar_get_date)
-{
-	guint year, month, day;
-
-	NOT_STATIC_METHOD();
-
-	gtk_calendar_get_date(GTK_CALENDAR(PHP_GTK_GET(this_ptr)), &year, &month, &day);
-	*return_value = *php_gtk_build_value("(iii)", year, month, day);
-}
-%% }}}
-
-%% {{{ GtkCheckButton
-%%
-ignore gtk_check_button_new_with_label
-%%
-override gtk_check_button_new
-PHP_FUNCTION(gtk_check_button_new)
-{
-	char *label = NULL;
-	GtkObject *wrapped_obj;
-#ifdef PHP_WIN32
-	gchar *utf8_label = NULL;
-#endif
-
-	NOT_STATIC_METHOD();
-
-	if (!php_gtk_parse_args(ZEND_NUM_ARGS(), "|s", &label)) {
-		php_gtk_invalidate(this_ptr);
-		return;
-	}
-
-	if (label) {
-#ifdef PHP_WIN32
-		utf8_label = g_convert(label, strlen(label), "UTF-8", GTK_G(codepage), NULL, NULL, NULL);
-		wrapped_obj = (GtkObject *)gtk_check_button_new_with_label(utf8_label);
-		if (utf8_label) g_free(utf8_label);
-#else
-		wrapped_obj = (GtkObject *)gtk_check_button_new_with_label(label);		
-#endif
-	}
-    else    
-		wrapped_obj = (GtkObject *)gtk_check_button_new();
-	if (!wrapped_obj) {
-		php_error(E_WARNING, "%s(): could not create GtkCheckButton object",
-				  get_active_function_name(TSRMLS_C));
-		php_gtk_invalidate(this_ptr);
-		return;
-	}
-
-	php_gtk_object_init(wrapped_obj, this_ptr);
-}
-%% }}}
-
-%% {{{ GtkCheckMenuItem
-
-%%
-ignore gtk_check_menu_item_new_with_label 
-%%
-override gtk_check_menu_item_new
-PHP_FUNCTION(gtk_check_menu_item_new)
-{
-	char *label;
-	GtkObject *wrapped_obj;
-#ifdef PHP_WIN32
-	gchar *utf8_label = NULL;
-#endif
-	
-	NOT_STATIC_METHOD();
-
-	if (!php_gtk_parse_args(ZEND_NUM_ARGS(), "|s", &label)) {
-		php_gtk_invalidate(this_ptr);
-		return;
-	}
-
-	if (label) {
-#ifdef PHP_WIN32
-		utf8_label = g_convert(label, strlen(label), "UTF-8", GTK_G(codepage), NULL, NULL, NULL);
-		wrapped_obj = (GtkObject *)gtk_check_menu_item_new_with_label(utf8_label);
-		if (utf8_label) g_free(utf8_label);
-#else
-		wrapped_obj = (GtkObject *)gtk_check_menu_item_new_with_label(label);		
-#endif
-	}
-	else
-	    wrapped_obj = (GtkObject *)gtk_check_menu_item_new();
-
-	if (!wrapped_obj) {
-		php_error(E_WARNING, "%s(): could not create GtkCheckMenuItem object",
-				  get_active_function_name(TSRMLS_C));
-		php_gtk_invalidate(this_ptr);
-		return;
-	}
-
-	php_gtk_object_init(wrapped_obj, this_ptr);
-}
-
-%% }}}
-
-%% {{{ GtkCList
-
-%%
-ignore gtk_clist_new_with_titles
-%%
-override gtk_clist_new
-PHP_FUNCTION(gtk_clist_new)
-{
-	GtkObject *wrapped_obj;
-	gint columns, i;
-	gchar **titles;
-#ifdef PHP_WIN32
-	gchar *utf8_title = NULL;
-#endif
-	zval *php_titles = NULL, **temp_title;
-	HashTable *target_hash;
-
-	NOT_STATIC_METHOD();
-
-	if (!php_gtk_parse_args(ZEND_NUM_ARGS(), "i|a/", &columns, &php_titles)) {
-		php_gtk_invalidate(this_ptr);
-		return;
-	}
-
-	if (columns <= 0) {
-		php_error(E_WARNING, "%s() needs number of columns to be > 0", get_active_function_name(TSRMLS_C));
-		php_gtk_invalidate(this_ptr);
-		return;
-	}
-
-	if (php_titles) {
-		if (zend_hash_num_elements(Z_ARRVAL_P(php_titles)) < columns) {
-			php_error(E_WARNING, "%s(): the array of titles is not long enough", get_active_function_name(TSRMLS_C));
-			php_gtk_invalidate(this_ptr);
-			return;
-		}
-
-		target_hash = HASH_OF(php_titles);
-		titles = emalloc(sizeof(gchar *) * columns);
-		i = 0;
-		zend_hash_internal_pointer_reset(target_hash);
-		while (zend_hash_get_current_data(target_hash, (void **)&temp_title) == SUCCESS) {
-			convert_to_string_ex(temp_title);
-
-#ifdef PHP_WIN32
-			utf8_title = g_convert(Z_STRVAL_PP(temp_title), Z_STRLEN_PP(temp_title), "UTF-8", GTK_G(codepage), NULL, NULL, NULL);
-			titles[i++] = utf8_title;
-#else
-			titles[i++] = estrndup(Z_STRVAL_PP(temp_title), Z_STRLEN_PP(temp_title));
-#endif
-
-			zend_hash_move_forward(target_hash);
-		}
-		wrapped_obj = (GtkObject *)gtk_clist_new_with_titles(columns, titles);
-		efree(titles);
-	} else
-		wrapped_obj = (GtkObject *)gtk_clist_new(columns);
-
-	if (!wrapped_obj) {
-		php_error(E_WARNING, "%s(): could not create GtkCList object", get_active_function_name(TSRMLS_C));
-		php_gtk_invalidate(this_ptr);
-		return;
-	}
-
-	php_gtk_object_init(wrapped_obj, this_ptr);	
-}
-%%
-override gtk_clist_append
-PHP_FUNCTION(gtk_clist_append)
-{
-	gint columns, i;
-	gchar **list;
-#ifdef PHP_WIN32
-	gchar *utf8_text = NULL;
-#endif
-	zval *php_list, **text;
-	HashTable *target_hash;
-
-	NOT_STATIC_METHOD();
-
-	if (!php_gtk_parse_args(ZEND_NUM_ARGS(), "a/", &php_list)) {
-		php_gtk_invalidate(this_ptr);
-		return;
-	}
-
-	columns = GTK_CLIST(PHP_GTK_GET(this_ptr))->columns;
-	if (zend_hash_num_elements(Z_ARRVAL_P(php_list)) != columns) {
-		php_error(E_WARNING, "%s(): the array of strings (%d) does not match the number of columns (%d)",
-				  get_active_function_name(TSRMLS_C), zend_hash_num_elements(Z_ARRVAL_P(php_list)), columns);
-		return;
-	}
-	
-	target_hash = HASH_OF(php_list);
-	list = emalloc(sizeof(gchar *) * columns);
-	i = 0;
-	zend_hash_internal_pointer_reset(target_hash);
-	while (zend_hash_get_current_data(target_hash, (void **)&text) == SUCCESS) {
-		convert_to_string_ex(text);
-
-#ifdef PHP_WIN32
-		utf8_text = g_convert(Z_STRVAL_PP(text), Z_STRLEN_PP(text), "UTF-8", GTK_G(codepage), NULL, NULL, NULL);
-		list[i++] = utf8_text;
-#else
-		list[i++] = estrndup(Z_STRVAL_PP(text), Z_STRLEN_PP(text));
-#endif
-
-		zend_hash_move_forward(target_hash);
-	}
-	ZVAL_LONG(return_value, gtk_clist_append(GTK_CLIST(PHP_GTK_GET(this_ptr)), list));
-	efree(list);
-}
-%%
-override gtk_clist_prepend
-PHP_FUNCTION(gtk_clist_prepend)
-{
-	gint columns, i;
-	gchar **list;
-#ifdef PHP_WIN32
-	gchar *utf8_text = NULL;
-#endif
-	zval *php_list, **text;
-	HashTable *target_hash;
-
-	NOT_STATIC_METHOD();
-
-	if (!php_gtk_parse_args(ZEND_NUM_ARGS(), "a/", &php_list)) {
-		php_gtk_invalidate(this_ptr);
-		return;
-	}
-
-	columns = GTK_CLIST(PHP_GTK_GET(this_ptr))->columns;
-	if (zend_hash_num_elements(Z_ARRVAL_P(php_list)) < columns) {
-		php_error(E_WARNING, "%s(): the array of strings is not long enough", get_active_function_name(TSRMLS_C));
-		return;
-	}
-
-	target_hash = HASH_OF(php_list);
-	list = emalloc(sizeof(gchar *) * columns);
-	i = 0;
-	zend_hash_internal_pointer_reset(target_hash);
-	while (zend_hash_get_current_data(target_hash, (void **)&text) == SUCCESS) {
-		convert_to_string_ex(text);
-
-#ifdef PHP_WIN32
-		utf8_text = g_convert(Z_STRVAL_PP(text), Z_STRLEN_PP(text), "UTF-8", GTK_G(codepage), NULL, NULL, NULL);
-		list[i++] = utf8_text;
-#else
-		list[i++] = estrndup(Z_STRVAL_PP(text), Z_STRLEN_PP(text));
-#endif
-
-		zend_hash_move_forward(target_hash);
-	}
-	ZVAL_LONG(return_value, gtk_clist_prepend(GTK_CLIST(PHP_GTK_GET(this_ptr)), list));
-	efree(list);
-}
-%%
-override gtk_clist_insert
-PHP_FUNCTION(gtk_clist_insert)
-{
-	gint columns, i, row;
-	gchar **list;
-#ifdef PHP_WIN32
-	gchar *utf8_text = NULL;
-#endif
-	zval *php_list, **text;
-	HashTable *target_hash;
-
-	NOT_STATIC_METHOD();
-
-	if (!php_gtk_parse_args(ZEND_NUM_ARGS(), "ia/", &row, &php_list)) {
-		php_gtk_invalidate(this_ptr);
-		return;
-	}
-
-	columns = GTK_CLIST(PHP_GTK_GET(this_ptr))->columns;
-	if (zend_hash_num_elements(Z_ARRVAL_P(php_list)) < columns) {
-		php_error(E_WARNING, "%s(): the array of strings is not long enough", get_active_function_name(TSRMLS_C));
-		return;
-	}
-
-	target_hash = HASH_OF(php_list);
-	list = emalloc(sizeof(gchar *) * columns);
-	i = 0;
-	zend_hash_internal_pointer_reset(target_hash);
-	while (zend_hash_get_current_data(target_hash, (void **)&text) == SUCCESS) {
-		convert_to_string_ex(text);
-
-#ifdef PHP_WIN32
-		utf8_text = g_convert(Z_STRVAL_PP(text), Z_STRLEN_PP(text), "UTF-8", GTK_G(codepage), NULL, NULL, NULL);
-		list[i++] = utf8_text;
-#else
-		list[i++] = estrndup(Z_STRVAL_PP(text), Z_STRLEN_PP(text));
-#endif
-
-		zend_hash_move_forward(target_hash);
-	}
-	ZVAL_LONG(return_value, gtk_clist_insert(GTK_CLIST(PHP_GTK_GET(this_ptr)), row, list));
-	efree(list);
-}
-%%
-override gtk_clist_get_text
-PHP_FUNCTION(gtk_clist_get_text)
-{
-	gint row, column;
-	gchar *text = NULL;
-#ifdef PHP_WIN32
-	gchar *cp_text = NULL;
-#endif
-
-	if (!php_gtk_parse_args(ZEND_NUM_ARGS(), "ii", &row, &column))
-		return;
-
-	if (!gtk_clist_get_text(GTK_CLIST(PHP_GTK_GET(this_ptr)), row, column, &text)) {
-		php_error(E_WARNING, "%s() cannot get text value", get_active_function_name(TSRMLS_C));
-		return;
-	}
-
-#ifdef PHP_WIN32
-	if (text) {
-		cp_text = g_convert(text, strlen(text), GTK_G(codepage), "UTF-8", NULL, NULL, NULL);
-		RETURN_STRING(cp_text, 1);
-		g_free(cp_text);
-	}
-	else {
-		RETURN_NULL();
-	}
-#else
-	RETURN_STRING(text, 1);
-#endif
-}
-%%
-override gtk_clist_get_pixmap
-PHP_FUNCTION(gtk_clist_get_pixmap)
-{
-	zval *php_pixmap = NULL, *php_mask = NULL;
-	int column, row;
-	GdkPixmap *pixmap = NULL;
-	GdkBitmap *mask = NULL;
-
-	NOT_STATIC_METHOD();
-
-	if (!php_gtk_parse_args(ZEND_NUM_ARGS(), "ii", &row, &column))
-		return;
-
-	if (!gtk_clist_get_pixmap(GTK_CLIST(PHP_GTK_GET(this_ptr)), row, column,
-							  &pixmap, &mask)) {
-		php_error(E_WARNING, "%s() cannot get pixmap value", get_active_function_name(TSRMLS_C));
-		return;
-	}
-
-	php_pixmap = php_gdk_pixmap_new(pixmap);
-	php_mask = php_gdk_bitmap_new(mask);
-
-	*return_value = *php_gtk_build_value("(NN)", php_pixmap, php_mask);
-}
-%%
-override gtk_clist_set_row_data
-PHP_FUNCTION(gtk_clist_set_row_data)
-{
-	zval *data;
-	int row;
-
-	NOT_STATIC_METHOD();
-
-	if (!php_gtk_parse_args(ZEND_NUM_ARGS(), "iV", &row, &data))
-		return;
-
-	zval_add_ref(&data);
-	gtk_clist_set_row_data_full(GTK_CLIST(PHP_GTK_GET(this_ptr)), row, data,
-								php_gtk_destroy_notify);
-}
-%%
-override gtk_clist_get_row_data
-PHP_FUNCTION(gtk_clist_get_row_data)
-{
-	zval *data;
-	int row;
-
-	NOT_STATIC_METHOD();
-
-	if (!php_gtk_parse_args(ZEND_NUM_ARGS(), "i", &row))
-		return;
-
-	data = gtk_clist_get_row_data(GTK_CLIST(PHP_GTK_GET(this_ptr)), row);
-
-	if (data) {
-		*return_value = *data;
-		zval_copy_ctor(return_value);
-	} else {
-		RETURN_NULL();
-	}
-}
-%%
-override gtk_clist_find_row_from_data
-PHP_FUNCTION(gtk_clist_find_row_from_data)
-{
-	zval *data;
-
-	NOT_STATIC_METHOD();
-
-	if (!php_gtk_parse_args(ZEND_NUM_ARGS(), "V", &data))
-		return;
-
-	RETURN_LONG(gtk_clist_find_row_from_data(GTK_CLIST(PHP_GTK_GET(this_ptr)), data));
-}
-%%
-override gtk_clist_get_pixtext
-PHP_FUNCTION(gtk_clist_get_pixtext)
-{
-	zval *php_pixmap = NULL, *php_mask = NULL;
-	int column, row;
-	gchar *text = NULL;
-	guint8 spacing;
-	GdkPixmap *pixmap = NULL;
-	GdkBitmap *mask = NULL;
-
-	NOT_STATIC_METHOD();
-
-	if (!php_gtk_parse_args(ZEND_NUM_ARGS(), "ii", &row, &column))
-		return;
-
-	if (!gtk_clist_get_pixtext(GTK_CLIST(PHP_GTK_GET(this_ptr)),
-							   row, column, &text, &spacing, &pixmap, &mask)) {
-		php_error(E_WARNING, "%s() cannot get pixtext value", get_active_function_name(TSRMLS_C));
-		return;
-	}
-
-	php_pixmap = php_gdk_pixmap_new(pixmap);
-	php_mask = php_gdk_bitmap_new(mask);
-
-	*return_value = *php_gtk_build_value("(siNN)", text, (int)spacing,
-										 php_pixmap, php_mask);
-}
-%%
-override gtk_clist_get_selection_info
-PHP_FUNCTION(gtk_clist_get_selection_info)
-{
-	gint x, y;
-	gint row, column;
-
-	NOT_STATIC_METHOD();
-
-	if (!php_gtk_parse_args(ZEND_NUM_ARGS(), "ii", &x, &y))
-		return;
-
-	if (gtk_clist_get_selection_info(GTK_CLIST(PHP_GTK_GET(this_ptr)), x, y,
-									 &row, &column)) {
-		*return_value = *php_gtk_build_value("(ii)", row, column);
-	} else {
-		RETURN_FALSE;
-	}
-}
-%%
-getprop GtkCList selection
-	GList *tmp;
-	GList *selection = GTK_CLIST(PHP_GTK_GET(object))->selection;
-	/*
-	zend_overloaded_element *property;
-	zend_llist_element *next = (*element)->next;
-	int prop_index;
-
-	if (next) {
-		int i = 0;
-		property = (zend_overloaded_element *)next->data;
-		if (Z_TYPE_P(property) == OE_IS_ARRAY && Z_TYPE(property->element) == IS_LONG) {
-			*element = next;
-			prop_index = Z_LVAL(property->element);
-			for (tmp = selection, i = 0; tmp; tmp = tmp->next, i++) {
-				if (i == prop_index) {
-					RETURN_LONG(GPOINTER_TO_INT(tmp->data));
-				}
-			}
-		}
-	} else {
-		array_init(return_value);
-		for (tmp = selection; tmp; tmp = tmp->next)
-			add_next_index_long(return_value, GPOINTER_TO_INT(tmp->data));
-	}
-	*/
-	array_init(return_value);
-	for (tmp = selection; tmp; tmp = tmp->next)
-		add_next_index_long(return_value, GPOINTER_TO_INT(tmp->data));
-%%
-getprop GtkCList row_list
-	GList *tmp;
-	GList *row_list = GTK_CLIST(PHP_GTK_GET(object))->row_list;
-	/*
-	zend_overloaded_element *property;
-	zend_llist_element *next = (*element)->next;
-	int prop_index;
-
-	if (next) {
-		int i = 0;
-		property = (zend_overloaded_element *)next->data;
-		if (Z_TYPE_P(property) == OE_IS_ARRAY && Z_TYPE(property->element) == IS_LONG) {
-			*element = next;
-			prop_index = Z_LVAL(property->element);
-			for (tmp = row_list, i = 0; tmp; tmp = tmp->next, i++) {
-				if (i == prop_index) {
-					*return_value = *php_gtk_clist_row_new((GtkCListRow *)tmp->data);
-					return;
-				}
-			}
-		}
-	} else {
-		array_init(return_value);
-		for (tmp = row_list; tmp; tmp = tmp->next) {
-			add_next_index_zval(return_value, php_gtk_clist_row_new((GtkCListRow *)tmp->data));
-		}
-	}
-	*/
-	array_init(return_value);
-	for (tmp = row_list; tmp; tmp = tmp->next) {
-		add_next_index_zval(return_value, php_gtk_clist_row_new((GtkCListRow *)tmp->data));
-	}
-%% }}}
-
-%% {{{ GtkColorSelection
-%%
-override gtk_color_selection_set_color
-PHP_FUNCTION(gtk_color_selection_set_color)
-{
-	gdouble value[4];
-
-	NOT_STATIC_METHOD();
-
-	value[3] = 1.0;
-	if (!php_gtk_parse_args(ZEND_NUM_ARGS(), "ddd|d",
-							&value[0], &value[1], &value[2], &value[3]))
-		return;
-
-	gtk_color_selection_set_color(GTK_COLOR_SELECTION(PHP_GTK_GET(this_ptr)), value);
-}
-%%
-override gtk_color_selection_get_color
-PHP_FUNCTION(gtk_color_selection_get_color)
-{
-	gdouble value[4];
-	GtkColorSelection *colorsel;
-
-	NOT_STATIC_METHOD();
-
-	if (!php_gtk_parse_args(ZEND_NUM_ARGS(), ""))
-		return;
-
-	colorsel = GTK_COLOR_SELECTION(PHP_GTK_GET(this_ptr));
-	gtk_color_selection_get_color(colorsel, value);
-	if (colorsel->use_opacity)
-		*return_value = *php_gtk_build_value("(dddd)", value[0], value[1], value[2], value[3]);
-	else
-		*return_value = *php_gtk_build_value("(ddd)", value[0], value[1], value[2]);
-}
-%% }}}
-
-%% {{{ GtkCombo
-%%
-override gtk_combo_set_popdown_strings
-PHP_FUNCTION(gtk_combo_set_popdown_strings)
-{
-	zval *php_list, **item;
-	GList *list = NULL;
-#ifdef PHP_WIN32
-	gchar *utf8_text = NULL;
-#endif
-
-	NOT_STATIC_METHOD();
-
-	if (!php_gtk_parse_args(ZEND_NUM_ARGS(), "a/", &php_list))
-		return;
-
-	zend_hash_internal_pointer_reset(Z_ARRVAL_P(php_list));
-	while (zend_hash_get_current_data(Z_ARRVAL_P(php_list), (void **)&item) == SUCCESS) {
-		convert_to_string_ex(item);
-#ifdef PHP_WIN32
-		utf8_text = g_convert(Z_STRVAL_PP(item), Z_STRLEN_PP(item), "UTF-8", GTK_G(codepage), NULL, NULL, NULL);
-		list = g_list_append(list, utf8_text);
-#else
-		list = g_list_append(list, Z_STRVAL_PP(item));
-#endif
-		zend_hash_move_forward(Z_ARRVAL_P(php_list));
-	}
-
-	gtk_combo_set_popdown_strings(GTK_COMBO(PHP_GTK_GET(this_ptr)), list);
-	g_list_free(list);
-	RETURN_TRUE;
-}
-%% }}}
-
-%% {{{ GtkContainer
-%%
-override gtk_container_children
-PHP_FUNCTION(gtk_container_children)
-{
-	GList *children, *tmp;
-
-	NOT_STATIC_METHOD();
-
-	if (!php_gtk_parse_args(ZEND_NUM_ARGS(), ""))
-		return;
-
-	children = gtk_container_children(GTK_CONTAINER(PHP_GTK_GET(this_ptr)));
-	array_init(return_value);
-	for (tmp = children; tmp; tmp = tmp->next)
-		add_next_index_zval(return_value, php_gtk_new(tmp->data));
-	g_list_free(children);
-}
-%% }}}
-
-%% {{{ GtkCTree
-%%
-ignore
-  gtk_ctree_construct
-  gtk_ctree_insert_gnode
-  gtk_ctree_export_to_gnode
-  gtk_ctree_find_node_ptr
-  gtk_ctree_new
-%%
-override gtk_ctree_new_with_titles
-PHP_FUNCTION(gtk_ctree_new_with_titles)
-{
-	GtkObject *wrapped_obj;
-	gint columns, tree_column, i;
-	gchar **titles;
-	zval *php_titles = NULL, **temp_title;
-	HashTable *target_hash;
-#ifdef PHP_WIN32
-	gchar * utf8_text = NULL;
-#endif
-
-	NOT_STATIC_METHOD();
-
-	if (!php_gtk_parse_args(ZEND_NUM_ARGS(), "ii|a/", &columns, &tree_column, &php_titles)) {
-		php_gtk_invalidate(this_ptr);
-		return;
-	}
-
-	if (columns <= 0) {
-		php_error(E_WARNING, "%s() needs number of columns to be > 0", get_active_function_name(TSRMLS_C));
-		php_gtk_invalidate(this_ptr);
-		return;
-	}
-
-	if (php_titles) {
-		if (zend_hash_num_elements(Z_ARRVAL_P(php_titles)) < columns) {
-			php_error(E_WARNING, "%s(): the array of titles is not long enough", get_active_function_name(TSRMLS_C));
-			php_gtk_invalidate(this_ptr);
-			return;
-		}
-
-		target_hash = HASH_OF(php_titles);
-		titles = emalloc(sizeof(gchar *) * columns);
-		i = 0;
-		zend_hash_internal_pointer_reset(target_hash);
-		while (zend_hash_get_current_data(target_hash, (void **)&temp_title) == SUCCESS) {
-			convert_to_string_ex(temp_title);
-#ifdef PHP_WIN32
-			utf8_text = g_convert(Z_STRVAL_PP(temp_title), Z_STRLEN_PP(temp_title), "UTF-8", GTK_G(codepage), NULL, NULL, NULL);
-			titles[i++] = utf8_text;
-#else
-			titles[i++] = estrndup(Z_STRVAL_PP(temp_title), Z_STRLEN_PP(temp_title));
-#endif
-			zend_hash_move_forward(target_hash);
-		}
-		wrapped_obj = (GtkObject *)gtk_ctree_new_with_titles(columns, tree_column, titles);
-		efree(titles);
-	} else
-		wrapped_obj = (GtkObject *)gtk_ctree_new(columns, tree_column);
-
-	if (!wrapped_obj) {
-		php_error(E_WARNING, "%s(): could not create GtkCTree object", get_active_function_name(TSRMLS_C));
-		php_gtk_invalidate(this_ptr);
-		return;
-	}
-
-	php_gtk_object_init(wrapped_obj, this_ptr);	
-}
-%%
-override gtk_ctree_insert_node
-PHP_FUNCTION(gtk_ctree_insert_node)
-{
-	zval *php_parent, *php_sibling, *php_text,
-		 *php_pixmap_closed, *php_pixmap_opened,
-		 *php_mask_closed, *php_mask_opened, **temp_text;
-	zval *php_ret;
-	gint spacing, columns, i;
-	zend_bool is_leaf, expanded;
-	GtkCTreeNode *parent = NULL, *sibling = NULL, *ret;
-	GdkPixmap *pixmap_closed = NULL, *pixmap_opened = NULL;
-	GdkBitmap *mask_closed = NULL, *mask_opened = NULL;
-	GtkCTree *tree;
-	gchar **text = NULL;
-	HashTable *target_hash;
-#ifdef PHP_WIN32
-	gchar * utf8_text = NULL;
-#endif
-
-	NOT_STATIC_METHOD();
-
-	if (!php_gtk_parse_args(ZEND_NUM_ARGS(), "NNa/iNNNNbb", &php_parent,
-							gtk_ctree_node_ce, &php_sibling, gtk_ctree_node_ce,
-							&php_text, &spacing, &php_pixmap_closed,
-							gdk_pixmap_ce, &php_mask_closed, gdk_bitmap_ce,
-							&php_pixmap_opened, gdk_pixmap_ce, &php_mask_opened,
-							gdk_bitmap_ce, &is_leaf, &expanded))
-		return;
-
-	target_hash = HASH_OF(php_text);
-	tree = GTK_CTREE(PHP_GTK_GET(this_ptr));
-	columns = GTK_CLIST(tree)->columns;
-	if (zend_hash_num_elements(target_hash) != columns) {
-		php_error(E_WARNING, "%s(): the text array size (%d) does not match the number of columns in the ctree (%d)", get_active_function_name(TSRMLS_C), zend_hash_num_elements(target_hash), columns);
-		return;
-	}
-	if (Z_TYPE_P(php_parent) != IS_NULL)
-		parent			= PHP_GTK_CTREE_NODE_GET(php_parent);
-	if (Z_TYPE_P(php_sibling) != IS_NULL)
-		sibling			= PHP_GTK_CTREE_NODE_GET(php_sibling);
-	if (Z_TYPE_P(php_pixmap_closed) != IS_NULL)
-		pixmap_closed	= PHP_GDK_PIXMAP_GET(php_pixmap_closed);
-	if (Z_TYPE_P(php_mask_closed) != IS_NULL)
-		mask_closed		= PHP_GDK_BITMAP_GET(php_mask_closed);
-	if (Z_TYPE_P(php_pixmap_opened) != IS_NULL)
-		pixmap_opened	= PHP_GDK_PIXMAP_GET(php_pixmap_opened);
-	if (Z_TYPE_P(php_mask_opened) != IS_NULL)
-		mask_opened		= PHP_GDK_BITMAP_GET(php_mask_opened);
-
-	text = emalloc(sizeof(gchar *) * columns);
-	i = 0;
-	zend_hash_internal_pointer_reset(target_hash);
-	while (zend_hash_get_current_data(target_hash, (void **)&temp_text) == SUCCESS) {
-		convert_to_string_ex(temp_text);
-#ifdef PHP_WIN32
-		utf8_text = g_convert(Z_STRVAL_PP(temp_text), Z_STRLEN_PP(temp_text), "UTF-8", GTK_G(codepage), NULL, NULL, NULL);
-		text[i++] = utf8_text;
-#else
-		text[i++] = estrndup(Z_STRVAL_PP(temp_text), Z_STRLEN_PP(temp_text));
-#endif
-		zend_hash_move_forward(target_hash);
-	}
-
-	ret = gtk_ctree_insert_node(tree, parent, sibling, text, (guint8)spacing,
-								pixmap_closed, mask_closed, pixmap_opened,
-								mask_opened, is_leaf, expanded);
-	efree(text);
-	php_ret = php_gtk_ctree_node_new(ret);
-	SEPARATE_ZVAL(&php_ret);
-	*return_value = *php_ret;
-}
-%%
-override gtk_ctree_post_recursive
-static void ctree_callback(GtkCTree *ctree, GtkCTreeNode *node, zval *callback_data)
-{
-	zval *retval = NULL;
-	zval **callback = NULL, **extra = NULL;
-	zval **callback_filename = NULL, **callback_lineno = NULL;
-	zval ***args, *params;
-	char *callback_name;
-	TSRMLS_FETCH();
-
-	zend_hash_index_find(Z_ARRVAL_P(callback_data), 0, (void **)&callback);
-	zend_hash_index_find(Z_ARRVAL_P(callback_data), 1, (void **)&extra);
-	zend_hash_index_find(Z_ARRVAL_P(callback_data), 2, (void **)&callback_filename);
-	zend_hash_index_find(Z_ARRVAL_P(callback_data), 3, (void **)&callback_lineno);
-
-	if (!php_gtk_is_callable(*callback, 0, &callback_name)) {
-		php_error(E_WARNING, "Unable to call ctree callback '%s' specified in %s on line %d", callback_name, Z_STRVAL_PP(callback_filename), Z_LVAL_PP(callback_lineno));
-		efree(callback_name);
-		return;
-	}
-
-	params = php_gtk_build_value("(NN)", php_gtk_new((GtkObject *)ctree),
-								 php_gtk_ctree_node_new(node));
-	if (extra)
-		php_array_merge(Z_ARRVAL_P(params), Z_ARRVAL_PP(extra), 0 TSRMLS_CC);
-
-	args = php_gtk_hash_as_array(params);
-
-	call_user_function_ex(EG(function_table), NULL, *callback, &retval, zend_hash_num_elements(Z_ARRVAL_P(params)), args, 0, NULL TSRMLS_CC);
-	if (retval)
-		zval_ptr_dtor(&retval);
-	efree(args);
-	zval_ptr_dtor(&params);
-}
-
-static void traverse_ctree(INTERNAL_FUNCTION_PARAMETERS, zend_bool use_depth, zend_bool pre_order)
-{
-	zval *php_node, *callback;
-	zval *data, *extra;
-	GtkCTreeNode *node = NULL;
-	gint depth;
-	int req_args = 2;
-	char *callback_filename;
-	uint callback_lineno;
-
-	NOT_STATIC_METHOD();
-
-	if (use_depth)
-		req_args = 3;
-
-	if (ZEND_NUM_ARGS() < req_args) {
-		php_error(E_WARNING, "%s() requires at least %d arguments, %d given",
-				  get_active_function_name(TSRMLS_C), req_args, ZEND_NUM_ARGS());
-		return;
-	}
-
-	if (use_depth) {
-		if (!php_gtk_parse_args(3, "NiV", &php_node, gtk_ctree_node_ce, &depth, &callback))
-			return;
-	} else {
-		if (!php_gtk_parse_args(2, "NV", &php_node, gtk_ctree_node_ce, &callback))
-			return;
-	}
-
-	if (Z_TYPE_P(php_node) != IS_NULL)
-		node = PHP_GTK_CTREE_NODE_GET(php_node);
-
-	callback_filename = zend_get_executed_filename(TSRMLS_C);
-	callback_lineno = zend_get_executed_lineno(TSRMLS_C);
-	extra = php_gtk_func_args_as_hash(ZEND_NUM_ARGS(), 2, ZEND_NUM_ARGS());
-	data = php_gtk_build_value("(VNsi)", callback, extra, callback_filename, callback_lineno);
-	if (pre_order) {
-		if (use_depth)
-			gtk_ctree_pre_recursive_to_depth(GTK_CTREE(PHP_GTK_GET(this_ptr)),
-											 node, depth,
-											 (GtkCTreeFunc)ctree_callback, data);
-		else
-			gtk_ctree_pre_recursive(GTK_CTREE(PHP_GTK_GET(this_ptr)), node,
-									(GtkCTreeFunc)ctree_callback, data);
-	} else {
-		if (use_depth)
-			gtk_ctree_post_recursive_to_depth(GTK_CTREE(PHP_GTK_GET(this_ptr)),
-											  node, depth,
-											  (GtkCTreeFunc)ctree_callback, data);
-		else
-			gtk_ctree_post_recursive(GTK_CTREE(PHP_GTK_GET(this_ptr)), node,
-									 (GtkCTreeFunc)ctree_callback, data);
-	}
-}
-
-PHP_FUNCTION(gtk_ctree_post_recursive)
-{
-	traverse_ctree(INTERNAL_FUNCTION_PARAM_PASSTHRU, 0, 0);
-}
-%%
-override gtk_ctree_post_recursive_to_depth
-PHP_FUNCTION(gtk_ctree_post_recursive_to_depth)
-{
-	traverse_ctree(INTERNAL_FUNCTION_PARAM_PASSTHRU, 1, 0);
-}
-%%
-override gtk_ctree_pre_recursive
-PHP_FUNCTION(gtk_ctree_pre_recursive)
-{
-	traverse_ctree(INTERNAL_FUNCTION_PARAM_PASSTHRU, 0, 1);
-}
-%%
-override gtk_ctree_pre_recursive_to_depth
-PHP_FUNCTION(gtk_ctree_pre_recursive_to_depth)
-{
-	traverse_ctree(INTERNAL_FUNCTION_PARAM_PASSTHRU, 1, 1);
-}
-%%
-override gtk_ctree_get_node_info
-PHP_FUNCTION(gtk_ctree_get_node_info)
-{
-	zval *node;
-	zval *php_pixmap_closed, *php_mask_closed;
-	zval *php_pixmap_opened, *php_mask_opened;
-	gchar *text;
-	guint8 spacing;
-	GdkPixmap *pixmap_closed, *pixmap_opened;
-	GdkBitmap *mask_closed, *mask_opened;
-	gboolean is_leaf, expanded;
-
-	NOT_STATIC_METHOD();
-
-	if (!php_gtk_parse_args(ZEND_NUM_ARGS(), "O", &node, gtk_ctree_node_ce))
-		return;
-
-	if (!gtk_ctree_get_node_info(GTK_CTREE(PHP_GTK_GET(this_ptr)),
-								 PHP_GTK_CTREE_NODE_GET(node), &text, &spacing,
-								 &pixmap_closed, &mask_closed, &pixmap_opened,
-								 &mask_opened, &is_leaf, &expanded)) {
-		php_error(E_WARNING, "%s() cannot get node info", get_active_function_name(TSRMLS_C));
-		return;
-	}
-
-	php_pixmap_closed = php_gdk_pixmap_new(pixmap_closed);
-	php_pixmap_opened = php_gdk_pixmap_new(pixmap_opened);
-	php_mask_closed = php_gdk_bitmap_new(mask_closed);
-	php_mask_opened = php_gdk_bitmap_new(mask_opened);
-
-	*return_value = *php_gtk_build_value("(siNNNNbb)", text, (int)spacing,
-										 php_pixmap_closed, php_mask_closed,
-										 php_pixmap_opened, php_mask_opened,
-										 (int)is_leaf, (int)expanded);
-}
-%%
-ignore gtk_ctree_node_set_row_data_full
-%%
-override gtk_ctree_node_set_row_data
-PHP_FUNCTION(gtk_ctree_node_set_row_data)
-{
-	zval *node, *data;
-
-	NOT_STATIC_METHOD();
-
-	if (!php_gtk_parse_args(ZEND_NUM_ARGS(), "OV", &node, gtk_ctree_node_ce, &data))
-		return;
-
-	zval_add_ref(&data);
-	gtk_ctree_node_set_row_data_full(GTK_CTREE(PHP_GTK_GET(this_ptr)),
-									 PHP_GTK_CTREE_NODE_GET(node), data,
-									 php_gtk_destroy_notify);
-}
-%%
-override gtk_ctree_node_get_row_data
-PHP_FUNCTION(gtk_ctree_node_get_row_data)
-{
-	zval *node, *data;
-
-	NOT_STATIC_METHOD();
-
-	if (!php_gtk_parse_args(ZEND_NUM_ARGS(), "O", &node, gtk_ctree_node_ce))
-		return;
-
-	data = gtk_ctree_node_get_row_data(GTK_CTREE(PHP_GTK_GET(this_ptr)),
-									   PHP_GTK_CTREE_NODE_GET(node));
-	if (data) {
-		*return_value = *data;
-		zval_copy_ctor(return_value);
-	} else {
-		RETURN_NULL();
-	}
-}
-%%
-override gtk_ctree_node_get_text
-PHP_FUNCTION(gtk_ctree_node_get_text)
-{
-	zval *node;
-	gint column;
-	gchar *text = NULL;
-#ifdef PHP_WIN32
-	gchar *cp_text = NULL;
-#endif
-
-	NOT_STATIC_METHOD();
-
-	if (!php_gtk_parse_args(ZEND_NUM_ARGS(), "Oi", &node, gtk_ctree_node_ce, &column))
-		return;
-
-	if (!gtk_ctree_node_get_text(GTK_CTREE(PHP_GTK_GET(this_ptr)),
-								 PHP_GTK_CTREE_NODE_GET(node), column, &text)) {
-		php_error(E_WARNING, "%s() cannot get text value", get_active_function_name(TSRMLS_C));
-		return;
-	}
-
-#ifdef PHP_WIN32
-	if (text) {
-		cp_text = g_convert(text, strlen(text), GTK_G(codepage), "UTF-8", NULL, NULL, NULL);
-		RETURN_STRING(cp_text, 1);
-		g_free(cp_text);
-	}
-	else {
-		RETURN_NULL();
-	}
-#else
-	RETURN_STRING(text, 1);
-#endif
-}
-%%
-override gtk_ctree_node_get_pixmap
-PHP_FUNCTION(gtk_ctree_node_get_pixmap)
-{
-	zval *node, *php_pixmap, *php_mask;
-	int column;
-	GdkPixmap *pixmap = NULL;
-	GdkBitmap *mask = NULL;
-
-	NOT_STATIC_METHOD();
-
-	if (!php_gtk_parse_args(ZEND_NUM_ARGS(), "Oi", &node, gtk_ctree_node_ce, &column))
-		return;
-
-	if (!gtk_ctree_node_get_pixmap(GTK_CTREE(PHP_GTK_GET(this_ptr)),
-								   PHP_GTK_CTREE_NODE_GET(node), column,
-								   &pixmap, &mask)) {
-		php_error(E_WARNING, "%s() cannot get pixmap value", get_active_function_name(TSRMLS_C));
-		return;
-	}
-	
-	php_pixmap = php_gdk_pixmap_new(pixmap);
-	php_mask = php_gdk_bitmap_new(pixmap);
-
-	*return_value = *php_gtk_build_value("(NN)", php_pixmap, php_mask);
-}
-%%
-override gtk_ctree_node_get_pixtext
-PHP_FUNCTION(gtk_ctree_node_get_pixtext)
-{
-	zval *node, *php_pixmap = NULL, *php_mask = NULL;
-	int column;
-	gchar *text = NULL;
-	guint8 spacing;
-	GdkPixmap *pixmap = NULL;
-	GdkBitmap *mask = NULL;
-
-	NOT_STATIC_METHOD();
-
-	if (!php_gtk_parse_args(ZEND_NUM_ARGS(), "Oi", &node, gtk_ctree_node_ce, &column))
-		return;
-
-	if (!gtk_ctree_node_get_pixtext(GTK_CTREE(PHP_GTK_GET(this_ptr)),
-									PHP_GTK_CTREE_NODE_GET(node), column, &text,
-									&spacing, &pixmap, &mask)) {
-		php_error(E_WARNING, "%s() cannot get pixtext value", get_active_function_name(TSRMLS_C));
-		return;
-	}
-
-	php_pixmap = php_gdk_pixmap_new(pixmap);
-	php_mask = php_gdk_bitmap_new(mask);
-
-	*return_value = *php_gtk_build_value("(siNN)", text, (int)spacing,
-										 php_pixmap, php_mask);
-}
-
-%%
-override gtk_ctree_find_by_row_data
-PHP_FUNCTION(gtk_ctree_find_by_row_data)
-{
-	zval *php_node, *data, *php_ret;
-	GtkCTreeNode *ret;
-
-	NOT_STATIC_METHOD();
-
-	if (!php_gtk_parse_args(ZEND_NUM_ARGS(), "OV", &php_node, gtk_ctree_node_ce,
-							&data))
-		return;
-
-	ret = gtk_ctree_find_by_row_data(GTK_CTREE(PHP_GTK_GET(this_ptr)),
-									 PHP_GTK_CTREE_NODE_GET(php_node), data);
-	php_ret = php_gtk_ctree_node_new(ret);
-	SEPARATE_ZVAL(&php_ret);
-	*return_value = *php_ret;
-}
-
-%%
-override gtk_ctree_find_all_by_row_data
-PHP_FUNCTION(gtk_ctree_find_all_by_row_data)
-{
-	zval *php_node, *data;
-	zval *item;
-	GList *ret, *tmp;
-
-	NOT_STATIC_METHOD();
-
-	if (!php_gtk_parse_args(ZEND_NUM_ARGS(), "OV", &php_node, gtk_ctree_node_ce,
-							&data))
-		return;
-
-	ret = gtk_ctree_find_all_by_row_data(GTK_CTREE(PHP_GTK_GET(this_ptr)),
-										 PHP_GTK_CTREE_NODE_GET(php_node), data);
-	array_init(return_value);
-	for (tmp = ret; tmp != NULL; tmp = tmp->next) {
-		item = php_gtk_ctree_node_new((GtkCTreeNode *)tmp->data);
-		add_next_index_zval(return_value, item);
-	}
-	g_list_free(ret);
-}
-
-%%
-getprop GtkCTree selection
-	GList *tmp;
-	GList *selection = GTK_CLIST(PHP_GTK_GET(object))->selection;
-	/*
-	zend_overloaded_element *property;
-	zend_llist_element *next = (*element)->next;
-	int prop_index;
-
-	if (next) {
-		int i = 0;
-		property = (zend_overloaded_element *)next->data;
-		if (Z_TYPE_P(property) == OE_IS_ARRAY && Z_TYPE(property->element) == IS_LONG) {
-			*element = next;
-			prop_index = Z_LVAL(property->element);
-			for (tmp = selection, i = 0; tmp; tmp = tmp->next, i++) {
-				if (i == prop_index) {
-					*return_value = *php_gtk_ctree_node_new(GTK_CTREE_NODE(tmp->data));
-					return;
-				}
-			}
-		}
-	} else {
-		array_init(return_value);
-		for (tmp = selection; tmp; tmp = tmp->next)
-			add_next_index_zval(return_value, php_gtk_ctree_node_new(GTK_CTREE_NODE(tmp->data)));
-	}
-	*/
-	array_init(return_value);
-	for (tmp = selection; tmp; tmp = tmp->next)
-		add_next_index_zval(return_value, php_gtk_ctree_node_new(GTK_CTREE_NODE(tmp->data)));
-%%
-getprop GtkCTree clist
-	*return_value = *php_gtk_new((GtkObject *)GTK_CLIST(PHP_GTK_GET(object)));
-%%
-getprop GtkCTree row_list
-	GList *tmp;
-	GList *row_list = GTK_CLIST(PHP_GTK_GET(object))->row_list;
-	/*
-	zend_overloaded_element *property;
-	zend_llist_element *next = (*element)->next;
-	int prop_index;
-
-	if (next) {
-		int i = 0;
-		property = (zend_overloaded_element *)next->data;
-		if (Z_TYPE_P(property) == OE_IS_ARRAY && Z_TYPE(property->element) == IS_LONG) {
-			*element = next;
-			prop_index = Z_LVAL(property->element);
-			for (tmp = row_list, i = 0; tmp; tmp = tmp->next, i++) {
-				if (i == prop_index) {
-					*return_value = *php_gtk_ctree_node_new(GTK_CTREE_NODE(tmp));
-					return;
-				}
-			}
-		}
-	} else {
-		array_init(return_value);
-		for (tmp = row_list; tmp; tmp = tmp->next) {
-			add_next_index_zval(return_value, php_gtk_ctree_node_new(GTK_CTREE_NODE(tmp)));
-		}
-	}
-	*/
-	array_init(return_value);
-	for (tmp = row_list; tmp; tmp = tmp->next) {
-		add_next_index_zval(return_value, php_gtk_ctree_node_new(GTK_CTREE_NODE(tmp)));
-	}
-%% }}}
-
-%% {{{ GtkCurve
-
-%%
-override gtk_curve_get_vector
-PHP_FUNCTION(gtk_curve_get_vector)
-{
-	int veclen = -1, i;
-	gfloat *vector = NULL;
-
-	NOT_STATIC_METHOD();
-
-	if (!php_gtk_parse_args(ZEND_NUM_ARGS(), "|i", &veclen))
-		return;
-
-	if (veclen < 0)
-		veclen = GTK_CURVE(PHP_GTK_GET(this_ptr))->num_points;
-	vector = emalloc(sizeof(gfloat) * veclen);
-	gtk_curve_get_vector(GTK_CURVE(PHP_GTK_GET(this_ptr)), veclen, vector);
-	array_init(return_value);
-	for (i = 0; i < veclen; i++)
-		add_index_double(return_value, i, vector[i]);
-	efree(vector);
-}
-%%
-override gtk_curve_set_vector
-PHP_FUNCTION(gtk_curve_set_vector)
-{
-	int veclen, i;
-	gfloat *vector = NULL;
-	zval *php_vector, **temp_vector;
-	HashTable *target_hash;
-	
-	NOT_STATIC_METHOD();
-
-	if (!php_gtk_parse_args(ZEND_NUM_ARGS(), "a", &php_vector))
-		return;
-
-	target_hash = HASH_OF(php_vector);
-	veclen = zend_hash_num_elements(target_hash);
-	vector = emalloc(sizeof(gfloat) * veclen);
-	zend_hash_internal_pointer_reset(target_hash);
-	i = 0;
-	while (zend_hash_get_current_data(target_hash, (void **)&temp_vector) == SUCCESS) {
-		vector[i++] = (gfloat)Z_DVAL_PP(temp_vector);
-		zend_hash_move_forward(target_hash);
-	}
-	
-	gtk_curve_set_vector(GTK_CURVE(PHP_GTK_GET(this_ptr)), veclen, vector);
-	RETURN_TRUE;
-}
-%% }}}
-
-%% {{{ GtkEditable
-%%
-override gtk_editable_insert_text
-PHP_FUNCTION(gtk_editable_insert_text)
-{
-	char *text;
-	int len, pos;
-
-	NOT_STATIC_METHOD();
-
-	if (!php_gtk_parse_args(ZEND_NUM_ARGS(), "s#i", &text, &len, &pos))
-		return;
-
-	gtk_editable_insert_text(GTK_EDITABLE(PHP_GTK_GET(this_ptr)), text, len, &pos);
-	RETURN_LONG(pos);
-}
-%% }}}
-
-%% {{{ GtkFixed
-%%
-getprop GtkFixed children
-	GList *tmp;
-	GList *children = GTK_FIXED(PHP_GTK_GET(object))->children;
-	/*
-	zend_overloaded_element *property;
-	zend_llist_element *next = (*element)->next;
-	int prop_index;
-
-	if (next) {
-		int i = 0;
-		property = (zend_overloaded_element *)next->data;
-		if (Z_TYPE_P(property) == OE_IS_ARRAY && Z_TYPE(property->element) == IS_LONG) {
-			*element = next;
-			prop_index = Z_LVAL(property->element);
-			for (tmp = children, i = 0; tmp; tmp = tmp->next, i++) {
-				if (i == prop_index) {
-					*return_value = *php_gtk_fixed_child_new((GtkFixedChild *)tmp->data);
-					return;
-				}
-			}
-		}
-	} else {
-		array_init(return_value);
-		for (tmp = children; tmp; tmp = tmp->next) {
-			add_next_index_zval(return_value, php_gtk_fixed_child_new((GtkFixedChild *)tmp->data));
-		}
-	}
-	*/
-	array_init(return_value);
-	for (tmp = children; tmp; tmp = tmp->next) {
-		add_next_index_zval(return_value, php_gtk_fixed_child_new((GtkFixedChild *)tmp->data));
-	}
-%% }}}
-
-%% {{{ GtkItemFactory
-%%
-override gtk_item_factory_create_items
-static void item_factory_callback(zval *callback_data, guint action, GtkWidget *widget)
-{
-	zval *retval = NULL;
-	zval **callback, **extra;
-	zval **callback_filename, **callback_lineno;
-	zval *params;
-	zval ***args;
-	char *callback_name;
-	TSRMLS_FETCH();
-
-	zend_hash_index_find(Z_ARRVAL_P(callback_data), 0, (void **)&callback);
-	zend_hash_index_find(Z_ARRVAL_P(callback_data), 1, (void **)&callback_filename);
-	zend_hash_index_find(Z_ARRVAL_P(callback_data), 2, (void **)&callback_lineno);
-	if (!php_gtk_is_callable(*callback, 0, &callback_name)) {
-		php_error(E_WARNING, "unable to call item factory callback '%s' specified in %s on line %d", callback_name, Z_STRVAL_PP(callback_filename), Z_LVAL_PP(callback_lineno));
-		efree(callback_name);
-		return;
-	}
-
-	params = php_gtk_build_value("(iN)", action, php_gtk_new((GtkObject *)widget));
-	if (zend_hash_num_elements(Z_ARRVAL_P(callback_data)) > 3) {
-		zend_hash_index_find(Z_ARRVAL_P(callback_data), 3, (void **)&extra);
-		php_array_merge(Z_ARRVAL_P(params), Z_ARRVAL_PP(extra), 0 TSRMLS_CC);
-	}
-
-	args = php_gtk_hash_as_array(params);
-
-	call_user_function_ex(EG(function_table), NULL, *callback, &retval, zend_hash_num_elements(Z_ARRVAL_P(params)), args, 0, NULL TSRMLS_CC);
-	if (retval)
-		zval_ptr_dtor(&retval);
-	efree(args);
-	zval_ptr_dtor(&params);
-}
-
-PHP_FUNCTION(gtk_item_factory_create_items)
-{
-	zval *list, **item, *callback_data,
-		 *callback, *extra = NULL;
-	GtkItemFactoryEntry entry;
-	GtkItemFactory *factory;
-	int i = 0;
-	char *callback_filename;
-	uint callback_lineno;
-
-	NOT_STATIC_METHOD();
-
-	if (!php_gtk_parse_args(ZEND_NUM_ARGS(), "a", &list))
-		return;
-	
-	factory = GTK_ITEM_FACTORY(PHP_GTK_GET(this_ptr));
-	zend_hash_internal_pointer_reset(Z_ARRVAL_P(list));
-	while (zend_hash_get_current_data(Z_ARRVAL_P(list), (void**)&item) == SUCCESS) {
-		if (Z_TYPE_PP(item) != IS_ARRAY ||
-			!php_gtk_parse_args_hash_quiet(*item, "ssVis|a", &entry.path,
-									 &entry.accelerator, &callback,
-									 &entry.callback_action, &entry.item_type, &extra)) {
-			php_error(E_WARNING, "%s() was unable to parse item #%d in the input array",
-					  get_active_function_name(TSRMLS_C), i+1);
-			return;
-		}
-
-		if (Z_TYPE_P(callback) == IS_NULL)
-			entry.callback = NULL;
-		else {
-			callback_filename = zend_get_executed_filename(TSRMLS_C);
-			callback_lineno = zend_get_executed_lineno(TSRMLS_C);
-			if (extra)
-				callback_data = php_gtk_build_value("(VsiV)", callback, callback_filename, callback_lineno, extra);
-			else
-				callback_data = php_gtk_build_value("(Vsi)", callback, callback_filename, callback_lineno);
-			entry.callback = (GtkItemFactoryCallback)item_factory_callback;
-		}
-
-		gtk_item_factory_create_item(factory, &entry, callback_data, 1);
-
-		i++;
-		zend_hash_move_forward(Z_ARRVAL_P(list));
-	}
-
-	RETURN_TRUE;
-}
-%% }}}
-
-%% {{{ GtkLabel
-%%
-override gtk_label_get
-PHP_FUNCTION(gtk_label_get)
-{
-	gchar *text;
-
-	NOT_STATIC_METHOD();
-
-	if (!php_gtk_parse_args(ZEND_NUM_ARGS(), ""))
-		return;
-
-	gtk_label_get(GTK_LABEL(PHP_GTK_GET(this_ptr)), &text);
-	RETURN_STRING(text, 1);
-}
-%% }}}
-
-%% {{{ GtkList
-
-%%
-override gtk_list_append_items
-PHP_FUNCTION(gtk_list_append_items)
-{
-	zval *php_items, **item;
-	GList *items = NULL;
-	int i = 0;
-
-	NOT_STATIC_METHOD();
-
-	if (!php_gtk_parse_args(ZEND_NUM_ARGS(), "a", &php_items))
-		return;
-
-	for (zend_hash_internal_pointer_reset(Z_ARRVAL_P(php_items));
-		 zend_hash_get_current_data(Z_ARRVAL_P(php_items), (void **)&item) == SUCCESS;
-		 zend_hash_move_forward(Z_ARRVAL_P(php_items)), i++) {
-		if (!php_gtk_check_class(*item, gtk_listitem_ce)) {
-			php_error(E_WARNING, "%s() needs list item #%d to be a GtkListItem", get_active_function_name(TSRMLS_C), i);
-			g_list_free(items);
-			return;
-		}
-
-		items = g_list_append(items, PHP_GTK_GET(*item));
-	}
-
-	gtk_list_append_items(GTK_LIST(PHP_GTK_GET(this_ptr)), items);
-}
-%%
-override gtk_list_prepend_items
-PHP_FUNCTION(gtk_list_prepend_items)
-{
-	zval *php_items, **item;
-	GList *items = NULL;
-	int i = 0;
-
-	NOT_STATIC_METHOD();
-
-	if (!php_gtk_parse_args(ZEND_NUM_ARGS(), "a", &php_items))
-		return;
-
-	for (zend_hash_internal_pointer_reset(Z_ARRVAL_P(php_items));
-		 zend_hash_get_current_data(Z_ARRVAL_P(php_items), (void **)&item) == SUCCESS;
-		 zend_hash_move_forward(Z_ARRVAL_P(php_items)), i++) {
-		if (!php_gtk_check_class(*item, gtk_listitem_ce)) {
-			php_error(E_WARNING, "%s() needs list item #%d to be a GtkListItem", get_active_function_name(TSRMLS_C), i);
-			g_list_free(items);
-			return;
-		}
-
-		items = g_list_append(items, PHP_GTK_GET(*item));
-	}
-
-	gtk_list_prepend_items(GTK_LIST(PHP_GTK_GET(this_ptr)), items);
-}
-%%
-override gtk_list_insert_items
-PHP_FUNCTION(gtk_list_insert_items)
-{
-	zval *php_items, **item;
-	GList *items = NULL;
-	int position, i = 0;
-
-	NOT_STATIC_METHOD();
-
-	if (!php_gtk_parse_args(ZEND_NUM_ARGS(), "ai", &php_items, &position))
-		return;
-
-	for (zend_hash_internal_pointer_reset(Z_ARRVAL_P(php_items));
-		 zend_hash_get_current_data(Z_ARRVAL_P(php_items), (void **)&item) == SUCCESS;
-		 zend_hash_move_forward(Z_ARRVAL_P(php_items)), i++) {
-		if (!php_gtk_check_class(*item, gtk_listitem_ce)) {
-			php_error(E_WARNING, "%s() needs list item #%d to be a GtkListItem", get_active_function_name(TSRMLS_C), i);
-			g_list_free(items);
-			return;
-		}
-
-		items = g_list_append(items, PHP_GTK_GET(*item));
-	}
-
-	gtk_list_insert_items(GTK_LIST(PHP_GTK_GET(this_ptr)), items, position);
-}
-%%
-override gtk_list_remove_items
-PHP_FUNCTION(gtk_list_remove_items)
-{
-	zval *php_items, **item;
-	GList *items = NULL;
-	int i = 0;
-
-	NOT_STATIC_METHOD();
-
-	if (!php_gtk_parse_args(ZEND_NUM_ARGS(), "a", &php_items))
-		return;
-
-	for (zend_hash_internal_pointer_reset(Z_ARRVAL_P(php_items));
-		 zend_hash_get_current_data(Z_ARRVAL_P(php_items), (void **)&item) == SUCCESS;
-		 zend_hash_move_forward(Z_ARRVAL_P(php_items)), i++) {
-		if (!php_gtk_check_class(*item, gtk_listitem_ce)) {
-			php_error(E_WARNING, "%s() needs list item #%d to be a GtkListItem", get_active_function_name(TSRMLS_C), i);
-			g_list_free(items);
-			return;
-		}
-
-		items = g_list_append(items, PHP_GTK_GET(*item));
-	}
-
-	gtk_list_remove_items(GTK_LIST(PHP_GTK_GET(this_ptr)), items);
-	g_list_free(items);
-}
-%%
-ignore gtk_list_item_new_with_label
-       gtk_list_remove_items_no_unref
-%%
-override gtk_list_item_new
-PHP_FUNCTION(gtk_list_item_new)
-{
-	GtkObject *wrapped_obj;
-	gchar *text = NULL;
-#ifdef PHP_WIN32
-	gchar *utf8_text = NULL;
-#endif
-
-	NOT_STATIC_METHOD();
-
-	if (!php_gtk_parse_args(ZEND_NUM_ARGS(), "|s", &text)) {
-		php_gtk_invalidate(this_ptr);
-		return;
-	}
-
-	if (text) {
-#ifdef PHP_WIN32
-		utf8_text = g_convert(text, strlen(text), "UTF-8", GTK_G(codepage), NULL, NULL, NULL);
-		wrapped_obj = (GtkObject *)gtk_list_item_new_with_label(utf8_text);
-		if (utf8_text) g_free(utf8_text);
-#else
-		wrapped_obj = (GtkObject *)gtk_list_item_new_with_label(text);
-#endif
-	}
-	else
-		wrapped_obj = (GtkObject *)gtk_list_item_new();
-
-	if (!wrapped_obj) {
-		php_error(E_WARNING, "%s(): could not create GtkListItem object",
-				  get_active_function_name(TSRMLS_C));
-		php_gtk_invalidate(this_ptr);
-		return;
-	}
-
-	php_gtk_object_init(wrapped_obj, this_ptr);
-}
-%%
-getprop GtkList selection
-	GList *tmp;
-	GList *selection = GTK_LIST(PHP_GTK_GET(object))->selection;
-	/*
-	zend_overloaded_element *property;
-	zend_llist_element *next = (*element)->next;
-	int prop_index;
-
-	if (next) {
-		int i = 0;
-		property = (zend_overloaded_element *)next->data;
-		if (Z_TYPE_P(property) == OE_IS_ARRAY && Z_TYPE(property->element) == IS_LONG) {
-			*element = next;
-			prop_index = Z_LVAL(property->element);
-			for (tmp = selection, i = 0; tmp; tmp = tmp->next, i++) {
-				if (i == prop_index) {
-					*return_value = *php_gtk_new((GtkObject *)tmp->data);
-					return;
-				}
-			}
-		}
-	} else {
-		array_init(return_value);
-		for (tmp = selection; tmp; tmp = tmp->next)
-			add_next_index_zval(return_value, php_gtk_new((GtkObject *)tmp->data));
-	}
-	*/
-	array_init(return_value);
-	for (tmp = selection; tmp; tmp = tmp->next)
-		add_next_index_zval(return_value, php_gtk_new((GtkObject *)tmp->data));
-%% }}}
-
-%% {{{ GtkMenu
-
-%%
-override gtk_menu_attach_to_widget
-static void gtk_menu_detacher(GtkWidget *widget, GtkMenu *menu)
-{
-	GtkMenu *remove_menu;
-	g_return_if_fail(widget != NULL);
-	g_return_if_fail(GTK_IS_MENU(widget));
-	
-	remove_menu = GTK_MENU(widget);
-//	g_return_if_fail(remove_menu->menu == (GtkWidget*) menu);
-	
-//	remove_menu->menu = NULL;
-}
-
-PHP_FUNCTION(gtk_menu_attach_to_widget)
-{
-	zval *php_widget = NULL;
-
-	NOT_STATIC_METHOD();
-	
-	if (!php_gtk_parse_args(ZEND_NUM_ARGS(), "O", &php_widget, gtk_widget_ce))
-		return;
-
-	gtk_menu_attach_to_widget(GTK_MENU(PHP_GTK_GET(this_ptr)), GTK_WIDGET(PHP_GTK_GET(php_widget)), gtk_menu_detacher);
-}
-%%
-override gtk_menu_popup
-static void php_gtk_menu_position(GtkMenu *menu, int *x, int *y, zval *callback_data)
-{
-	zval **callback;
-	zval **callback_filename, **callback_lineno;
-	zval *retval, *params;
-	zval ***args;
-	char *callback_name;
-	TSRMLS_FETCH();
-
-	zend_hash_index_find(Z_ARRVAL_P(callback_data), 0, (void **)&callback);
-	zend_hash_index_find(Z_ARRVAL_P(callback_data), 1, (void **)&callback_filename);
-	zend_hash_index_find(Z_ARRVAL_P(callback_data), 2, (void **)&callback_lineno);
-	if (!php_gtk_is_callable(*callback, 0, &callback_name)) {
-		php_error(E_WARNING, "unable to call menu position callback '%s' specified in %s on line %d", callback_name, Z_STRVAL_PP(callback_filename), Z_LVAL_PP(callback_lineno));
-		efree(callback_name);
-		return;
-	}
-
-	params = php_gtk_build_value("(Nii)", php_gtk_new(GTK_OBJECT(menu)), *x, *y);
-	args = php_gtk_hash_as_array(params);
-
-	call_user_function_ex(EG(function_table), NULL, *callback, &retval, zend_hash_num_elements(Z_ARRVAL_P(params)), args, 0, NULL TSRMLS_CC);
-
-	if (retval) {
-		if (Z_TYPE_P(retval) == IS_ARRAY &&
-			!php_gtk_parse_args_hash_quiet(retval, "ii", x, y)) {
-			php_error(E_WARNING, "unable to parse result of menu position callback");
-		}
-		zval_ptr_dtor(&retval);
-	}
-
-	efree(args);
-	zval_ptr_dtor(&params);
-}
-
-PHP_FUNCTION(gtk_menu_popup)
-{
-	zval *php_pms, *php_pmi;
-	GtkWidget *pms = NULL, *pmi = NULL;
-	zval *callback, *data;
-	int button, time;
-	char *callback_filename;
-	uint callback_lineno;
-
-	NOT_STATIC_METHOD();
-
-	if (!php_gtk_parse_args(ZEND_NUM_ARGS(), "NNVii", &php_pms, gtk_widget_ce,
-							&php_pmi, gtk_widget_ce, &callback, &button, &time))
-		return;
-
-	if (Z_TYPE_P(php_pms) != IS_NULL)
-		pms = GTK_WIDGET(PHP_GTK_GET(php_pms));
-	if (Z_TYPE_P(php_pmi) != IS_NULL)
-		pmi = GTK_WIDGET(PHP_GTK_GET(php_pmi));
-
-	if (Z_TYPE_P(callback) != IS_NULL) {
-		callback_filename = zend_get_executed_filename(TSRMLS_C);
-		callback_lineno = zend_get_executed_lineno(TSRMLS_C);
-		data = php_gtk_build_value("(Vsi)", callback, callback_filename, callback_lineno);
-		gtk_menu_popup(GTK_MENU(PHP_GTK_GET(this_ptr)), pms, pmi,
-					   (GtkMenuPositionFunc)php_gtk_menu_position, data,
-					   button, time);
-	} else
-		gtk_menu_popup(GTK_MENU(PHP_GTK_GET(this_ptr)), pms, pmi, NULL, NULL,
-					   button, time);
-}
-
-%% }}}
-
-%% {{{1 GtkMenuItem
-
-%%
-ignore gtk_menu_item_new_with_label 
-%%
-override gtk_menu_item_new
-PHP_FUNCTION(gtk_menu_item_new)
-{
-	GtkObject *wrapped_obj;
-	char *label = NULL;
-#ifdef PHP_WIN32
-	gchar *utf8_label = NULL;
-#endif
-	
-	NOT_STATIC_METHOD();
-
-	if (!php_gtk_parse_args(ZEND_NUM_ARGS(), "|s", &label)) {
-		php_gtk_invalidate(this_ptr);
-		return;
-	}
-
-	if (label) {
-#ifdef PHP_WIN32
-		utf8_label = g_convert(label, strlen(label), "UTF-8", GTK_G(codepage), NULL, NULL, NULL);
-		wrapped_obj = (GtkObject *)gtk_menu_item_new_with_label(utf8_label);
-		if (utf8_label) g_free(utf8_label);
-#else
-		wrapped_obj = (GtkObject *)gtk_menu_item_new_with_label(label);		
-#endif
-	}
-	else
-	    wrapped_obj = (GtkObject *)gtk_menu_item_new();
-
-	if (!wrapped_obj) {
-		php_error(E_WARNING, "%s(): could not create GtkMenuItem object",
-				  get_active_function_name(TSRMLS_C));
-		php_gtk_invalidate(this_ptr);
-		return;
-	}
-
-	php_gtk_object_init(wrapped_obj, this_ptr);
-}
-
-%% }}}
-
-%% {{{ GtkNotebook
-%%
-override gtk_notebook_query_tab_label_packing
-PHP_FUNCTION(gtk_notebook_query_tab_label_packing)
-{
-	zval *child;
-	gboolean expand, fill;
-	GtkPackType pack_type;
-
-	NOT_STATIC_METHOD();
-
-	if (!php_gtk_parse_args(ZEND_NUM_ARGS(), "O", &child, gtk_widget_ce))
-		return;
-
-	gtk_notebook_query_tab_label_packing(GTK_NOTEBOOK(PHP_GTK_GET(this_ptr)),
-										 GTK_WIDGET(PHP_GTK_GET(child)),
-										 &expand, &fill, &pack_type);
-
-	array_init(return_value);
-	add_next_index_bool(return_value, expand);
-	add_next_index_bool(return_value, fill);
-	add_next_index_long(return_value, pack_type);
-}
-%% }}}
-
-%% {{{ GtkObject
-
-%%
-override gtk_signal_connect
-static void gtk_signal_connect_impl(INTERNAL_FUNCTION_PARAMETERS, int pass_object, int after)
-{
-	char *name = NULL;
-	zval *callback = NULL;
-	zval *extra;
-	zval *data;
-	char *callback_filename;
-	uint callback_lineno;
-
-	NOT_STATIC_METHOD();
-
-	if (ZEND_NUM_ARGS() < 2) {
-		php_error(E_WARNING, "%s() requires at least 2 arguments, %d given",
-				  get_active_function_name(TSRMLS_C), ZEND_NUM_ARGS());
-		return;
-	}
-
-	if (!php_gtk_parse_args(2, "sV", &name, &callback))
-		return;
-
-	callback_filename = zend_get_executed_filename(TSRMLS_C);
-	callback_lineno = zend_get_executed_lineno(TSRMLS_C);
-	extra = php_gtk_func_args_as_hash(ZEND_NUM_ARGS(), 2, ZEND_NUM_ARGS());
-	data = php_gtk_build_value("(VNisi)", callback, extra, pass_object, callback_filename, callback_lineno);
-	RETURN_LONG(gtk_signal_connect_full(PHP_GTK_GET(this_ptr), name, NULL,
-										(GtkCallbackMarshal)php_gtk_callback_marshal,
-										data, php_gtk_destroy_notify, FALSE, after));
-}
-
-PHP_FUNCTION(gtk_signal_connect)
-{
-	php_gtk_signal_connect_impl(INTERNAL_FUNCTION_PARAM_PASSTHRU, 1, 0);
-}
-%%
-override gtk_signal_connect_object
-PHP_FUNCTION(gtk_signal_connect_object)
-{
-	php_gtk_signal_connect_impl(INTERNAL_FUNCTION_PARAM_PASSTHRU, 0, 0);
-}
-%%
-override gtk_signal_connect_after
-PHP_FUNCTION(gtk_signal_connect_after)
-{
-	php_gtk_signal_connect_impl(INTERNAL_FUNCTION_PARAM_PASSTHRU, 1, 1);
-}
-%%
-override gtk_signal_connect_object_after
-PHP_FUNCTION(gtk_signal_connect_object_after)
-{
-	php_gtk_signal_connect_impl(INTERNAL_FUNCTION_PARAM_PASSTHRU, 0, 1);
-}
-%%
-override gtk_signal_emit
-PHP_FUNCTION(gtk_signal_emit)
-{
-	char *name;
-	guint signal_id, nparams, i;
-	GtkSignalQuery *query;
-	GtkArg *params;
-	zval *php_params, *ret;
-	gchar buf[sizeof(GtkArg)]; /* holds the return value */
-
-	NOT_STATIC_METHOD();
-
-	if (ZEND_NUM_ARGS() < 1) {
-		php_error(E_WARNING, "%s() requires at least 1 argument, 0 given", get_active_function_name(TSRMLS_C));
-		return;
-	}
-
-	if (!php_gtk_parse_args(1, "s", &name))
-		return;
-
-	signal_id = gtk_signal_lookup(name, GTK_OBJECT_TYPE(PHP_GTK_GET(this_ptr)));
-	if (signal_id <= 0) {
-		php_error(E_WARNING, "%s() can't find signal '%s' in class hierarchy",
-				  get_active_function_name(TSRMLS_C), name);
-		return;
-	}
-
-	query = gtk_signal_query(signal_id);
-	if (ZEND_NUM_ARGS() < (int)query->nparams + 1) {
-		php_error(E_WARNING, "%s() requires %d arguments for signal '%s', %d given",
-				  get_active_function_name(TSRMLS_C), query->nparams, name, ZEND_NUM_ARGS()-1);
-		g_free(query);
-		return;
-	}
-
-	php_params = php_gtk_func_args_as_hash(ZEND_NUM_ARGS(), 1, ZEND_NUM_ARGS());
-	params = g_new(GtkArg, query->nparams + 1);
-	nparams = query->nparams;
-
-	for (i = 0; i < nparams; i++) {
-		params[i].type = query->params[i];
-		params[i].name = NULL;
-	}
-	params[i].type = query->return_val;
-	params[i].name = NULL;
-	params[i].d.pointer_data = buf;
-	g_free(query);
-
-	if (!php_gtk_args_from_hash(params, nparams, php_params)) {
-		zval_ptr_dtor(&php_params);
-		g_free(params);
-		return;
-	}
-	zval_ptr_dtor(&php_params);
-
-	gtk_signal_emitv(PHP_GTK_GET(this_ptr), signal_id, params);
-	ret = php_gtk_ret_as_value(&params[nparams]);
-	g_free(params);
-	if (ret) {
-		*return_value = *ret;
-		FREE_ZVAL(ret);
-	}
-}
-%%
-override gtk_object_set
-PHP_FUNCTION(gtk_object_set)
-{
-	zval *hash;
-	GtkArg *arg;
-	gint nargs;
-	GtkObject *obj;
-
-	NOT_STATIC_METHOD();
-
-	if (!php_gtk_parse_args(ZEND_NUM_ARGS(), "a", &hash))
-		return;
-
-	obj = PHP_GTK_GET(this_ptr);
-	arg = php_gtk_hash_as_args(hash, GTK_OBJECT_TYPE(obj), &nargs);
-	if (!arg && nargs != 0)
-		return;
-
-	gtk_object_setv(obj, nargs, arg);
-	g_free(arg);
-}
-%%
-override gtk_object_get
-PHP_FUNCTION(gtk_object_get)
-{
-	char *name;
-	GtkArg garg;
-	zval *ret;
-
-	NOT_STATIC_METHOD();
-
-	if (!php_gtk_parse_args(ZEND_NUM_ARGS(), "s", &name))
-		return;
-
-	garg.type = GTK_TYPE_INVALID;
-	garg.name = name;
-	gtk_object_getv(PHP_GTK_GET(this_ptr), 1, &garg);
-
-	if (garg.type == GTK_TYPE_INVALID) {
-		php_error(E_WARNING, "%s(): invalid arg '%s'",
-				  get_active_function_name(TSRMLS_C), name);
-		return;
-	}
-	
-	ret = php_gtk_arg_as_value(&garg);
-	if (ret == NULL) {
-		php_error(E_WARNING, "%s() couldn't translate type",
-				  get_active_function_name(TSRMLS_C));
-		return;
-	}
-
-	zval_add_ref(&ret);
-	*return_value = *ret;
-	FREE_ZVAL(ret);
-}
-%%
-override gtk_object_set_data
-PHP_FUNCTION(gtk_object_set_data)
-{
-	char *key;
-	zval *data;
-
-	NOT_STATIC_METHOD();
-
-	if (!php_gtk_parse_args(ZEND_NUM_ARGS(), "sV", &key, &data))
-		return;
-
-	zval_add_ref(&data);
-	gtk_object_set_data_full(PHP_GTK_GET(this_ptr), key, data, php_gtk_destroy_notify);
-}
-%%
-override gtk_object_get_data
-PHP_FUNCTION(gtk_object_get_data)
-{
-	char *key;
-	zval *data;
-
-	NOT_STATIC_METHOD();
-
-	if (!php_gtk_parse_args(ZEND_NUM_ARGS(), "s", &key))
-		return;
-
-	data = gtk_object_get_data(PHP_GTK_GET(this_ptr), key);
-	if (data) {
-		*return_value = *data;
-		zval_copy_ctor(return_value);
-	}
-}
-
-%% }}}
-
-%% {{{ GtkRadioButton
-%%
-ignore-glob gtk_radio_button_new_*
-%%
-override gtk_radio_button_new
-PHP_FUNCTION(gtk_radio_button_new)
-{
-	zval *php_group = NULL;
-	gchar *text = NULL;
-	GtkRadioButton *group = NULL;
-	GtkObject *wrapped_obj = NULL;
-#ifdef PHP_WIN32
-	gchar *utf8_text = NULL;
-#endif
-
-	NOT_STATIC_METHOD();
-
-	if (!php_gtk_parse_args(ZEND_NUM_ARGS(), "|Ns", &php_group, gtk_radiobutton_ce, &text))
-		return;
-
-	if (php_group && Z_TYPE_P(php_group) != IS_NULL)
-		group = GTK_RADIO_BUTTON(PHP_GTK_GET(php_group));
-
-	if (!text) {
-		if (!group)
-			wrapped_obj = (GtkObject *)gtk_radio_button_new(NULL);
-		else
-			wrapped_obj = (GtkObject *)gtk_radio_button_new(group->group);
-	} else {
-#ifdef PHP_WIN32
-		utf8_text = g_convert(text, strlen(text), "UTF-8", GTK_G(codepage), NULL, NULL, NULL);
-		if (!group)
-			wrapped_obj = (GtkObject *)gtk_radio_button_new_with_label(NULL, utf8_text);
-		else
-			wrapped_obj = (GtkObject *)gtk_radio_button_new_with_label(group->group, utf8_text);
-		if (utf8_text) g_free(utf8_text);
-#else
-		if (!group)
-			wrapped_obj = (GtkObject *)gtk_radio_button_new_with_label(NULL, text);
-		else
-			wrapped_obj = (GtkObject *)gtk_radio_button_new_with_label(group->group, text);
-#endif
-	}
-
-	if (!wrapped_obj) {
-		php_error(E_WARNING, "%s(): could not create GtkRadioButton object",
-				  get_active_function_name(TSRMLS_C));
-		php_gtk_invalidate(this_ptr);
-		return;
-	}
-
-	php_gtk_object_init(wrapped_obj, this_ptr);	
-}
-
-%%
-override gtk_radio_button_group
-PHP_FUNCTION(gtk_radio_button_group)
-{
-	GtkRadioButton *button;
-	GSList *list, *tmp;
-
-	NOT_STATIC_METHOD();
-
-	if (!php_gtk_parse_args(ZEND_NUM_ARGS(), ""))
-		return;
-
-	button = GTK_RADIO_BUTTON(PHP_GTK_GET(this_ptr));
-
-	array_init(return_value);
-	list = gtk_radio_button_group(button);
-	for (tmp = list; tmp; tmp = tmp->next) {
-		add_next_index_zval(return_value, php_gtk_new(tmp->data));
-	}
-}
-
-%%
-override gtk_radio_button_set_group
-PHP_FUNCTION(gtk_radio_button_set_group)
-{
-	zval *php_button;
-	GSList *list;
-
-	if (!php_gtk_parse_args(ZEND_NUM_ARGS(), "O", &php_button, gtk_radiobutton_ce))
-		return;
-
-	list = gtk_radio_button_group(GTK_RADIO_BUTTON(PHP_GTK_GET(php_button)));
-	gtk_radio_button_set_group(GTK_RADIO_BUTTON(PHP_GTK_GET(this_ptr)), list);
-}
-
-%% }}}
-
-%% {{{ GtkRadioMenuItem
-%%
-ignore gtk_radio_menu_item_new_with_label
-%%
-override gtk_radio_menu_item_new
-PHP_FUNCTION(gtk_radio_menu_item_new)
-{
-	zval *php_group = NULL;
-	gchar *text = NULL;
-	GtkRadioMenuItem *group = NULL;
-	GtkObject *wrapped_obj = NULL;
-#ifdef PHP_WIN32
-	gchar *utf8_text = NULL;
-#endif
-
-	NOT_STATIC_METHOD();
-
-	if (!php_gtk_parse_args(ZEND_NUM_ARGS(), "|Ns", &php_group, gtk_radiomenuitem_ce, &text))
-		return;
-
-	if (php_group && Z_TYPE_P(php_group) != IS_NULL)
-		group = GTK_RADIO_MENU_ITEM(PHP_GTK_GET(php_group));
-
-	if (!text) {
-		if (!group)
-			wrapped_obj = (GtkObject *)gtk_radio_menu_item_new(NULL);
-		else
-			wrapped_obj = (GtkObject *)gtk_radio_menu_item_new(group->group);
-	} else {
-#ifdef PHP_WIN32
-		utf8_text = g_convert(text, strlen(text), "UTF-8", GTK_G(codepage), NULL, NULL, NULL);
-		if (!group)
-			wrapped_obj = (GtkObject *)gtk_radio_menu_item_new_with_label(NULL, utf8_text);
-		else
-			wrapped_obj = (GtkObject *)gtk_radio_menu_item_new_with_label(group->group, utf8_text);
-		if (utf8_text) g_free(utf8_text);
-#else
-		if (!group)
-			wrapped_obj = (GtkObject *)gtk_radio_menu_item_new_with_label(NULL, text);
-		else
-			wrapped_obj = (GtkObject *)gtk_radio_menu_item_new_with_label(group->group, text);
-#endif
-	}
-
-	if (!wrapped_obj) {
-		php_error(E_WARNING, "%s(): could not create GtkRadioMenuItem object",
-				  get_active_function_name(TSRMLS_C));
-		php_gtk_invalidate(this_ptr);
-		return;
-	}
-
-	php_gtk_object_init(wrapped_obj, this_ptr);	
-}
-
-%%
-override gtk_radio_menu_item_group
-PHP_FUNCTION(gtk_radio_menu_item_group)
-{
-	GtkRadioMenuItem *menu_item;
-	GSList *list, *tmp;
-
-	NOT_STATIC_METHOD();
-
-	if (!php_gtk_parse_args(ZEND_NUM_ARGS(), ""))
-		return;
-
-	menu_item = GTK_RADIO_MENU_ITEM(PHP_GTK_GET(this_ptr));
-
-	array_init(return_value);
-	list = gtk_radio_menu_item_group(menu_item);
-	for (tmp = list; tmp; tmp = tmp->next) {
-		add_next_index_zval(return_value, php_gtk_new(tmp->data));
-	}
-}
-
-%%
-override gtk_radio_menu_item_set_group
-PHP_FUNCTION(gtk_radio_menu_item_set_group)
-{
-	zval *php_menu_item;
-	GSList *list;
-
-	if (!php_gtk_parse_args(ZEND_NUM_ARGS(), "O", &php_menu_item, gtk_radiomenuitem_ce))
-		return;
-
-	list = gtk_radio_menu_item_group(GTK_RADIO_MENU_ITEM(PHP_GTK_GET(php_menu_item)));
-	gtk_radio_menu_item_set_group(GTK_RADIO_MENU_ITEM(PHP_GTK_GET(this_ptr)), list);
-}
-
-%% }}}
-
-%% {{{ GtkTable
-%%
-getprop GtkTable children
-	GList *tmp;
-	GList *children = GTK_TABLE(PHP_GTK_GET(object))->children;
-	/*
-	zend_overloaded_element *property;
-	zend_llist_element *next = (*element)->next;
-	int prop_index;
-
-	if (next) {
-		int i = 0;
-		property = (zend_overloaded_element *)next->data;
-		if (Z_TYPE_P(property) == OE_IS_ARRAY && Z_TYPE(property->element) == IS_LONG) {
-			*element = next;
-			prop_index = Z_LVAL(property->element);
-			for (tmp = children, i = 0; tmp; tmp = tmp->next, i++) {
-				if (i == prop_index) {
-					*return_value = *php_gtk_table_child_new((GtkTableChild *)tmp->data);
-					return;
-				}
-			}
-		}
-	} else {
-		array_init(return_value);
-		for (tmp = children; tmp; tmp = tmp->next) {
-			add_next_index_zval(return_value, php_gtk_table_child_new((GtkTableChild *)tmp->data));
-		}
-	}
-	*/
-	array_init(return_value);
-	for (tmp = children; tmp; tmp = tmp->next) {
-		add_next_index_zval(return_value, php_gtk_table_child_new((GtkTableChild *)tmp->data));
-	}
-%% }}}
-
-%% {{{ GtkToggleButton
-%%
-ignore gtk_toggle_button_new_with_label
-%%
-override gtk_toggle_button_new
-PHP_FUNCTION(gtk_toggle_button_new)
-{
-	GtkObject *wrapped_obj;
-	gchar *text = NULL;
-#ifdef PHP_WIN32
-	gchar *utf8_text = NULL;
-#endif
-
-	NOT_STATIC_METHOD();
-
-	if (!php_gtk_parse_args(ZEND_NUM_ARGS(), "|s", &text)) {
-		php_gtk_invalidate(this_ptr);
-		return;
-	}
-
-	if (text) {
-#ifdef PHP_WIN32
-		utf8_text = g_convert(text, strlen(text), "UTF-8", GTK_G(codepage), NULL, NULL, NULL);
-		wrapped_obj = (GtkObject *)gtk_toggle_button_new_with_label(utf8_text);
-		if (utf8_text) g_free(utf8_text);
-#else
-		wrapped_obj = (GtkObject *)gtk_toggle_button_new_with_label(text);
-#endif
-	}
-	else
-		wrapped_obj = (GtkObject *)gtk_toggle_button_new();
-
-	if (!wrapped_obj) {
-		php_error(E_WARNING, "%s(): could not create GtkToggleButton object",
-				  get_active_function_name(TSRMLS_C));
-		php_gtk_invalidate(this_ptr);
-		return;
-	}
-
-	php_gtk_object_init(wrapped_obj, this_ptr);
-}
-%% }}}
-
-%% {{{ GtkTreeItem
-%%
-ignore gtk_tree_item_new_with_label
-%%
-override gtk_tree_item_new
-PHP_FUNCTION(gtk_tree_item_new)
-{
-	GtkObject *wrapped_obj;
-	gchar *text = NULL;
-#ifdef PHP_WIN32
-	gchar *utf8_text = NULL;
-#endif
-
-	NOT_STATIC_METHOD();
-
-	if (!php_gtk_parse_args(ZEND_NUM_ARGS(), "|s", &text)) {
-		php_gtk_invalidate(this_ptr);
-		return;
-	}
-
-	if (text) {
-#ifdef PHP_WIN32
-		utf8_text = g_convert(text, strlen(text), "UTF-8", GTK_G(codepage), NULL, NULL, NULL);
-		wrapped_obj = (GtkObject *)gtk_tree_item_new_with_label(utf8_text);
-		if (utf8_text) g_free(utf8_text);
-#else
-		wrapped_obj = (GtkObject *)gtk_tree_item_new_with_label(text);
-#endif
-	}
-	else
-		wrapped_obj = (GtkObject *)gtk_tree_item_new();
-
-	if (!wrapped_obj) {
-		php_error(E_WARNING, "%s(): could not create GtkTreeItem object",
-				get_active_function_name(TSRMLS_C));
-		php_gtk_invalidate(this_ptr);
-		return;
-	}
-
-	php_gtk_object_init(wrapped_obj, this_ptr);
-}
-%% }}}
-
-%% {{{ GtkWidget
-%%
-override gtk_drag_dest_set
-PHP_FUNCTION(gtk_drag_dest_set)
-{
-	zval *php_flags, *php_targets, *php_actions;
-	zval **item;
-	GtkDestDefaults flags;
-	GdkDragAction actions;
-	GtkTargetEntry *targets;
-	int i;
-
-	NOT_STATIC_METHOD();
-
-	if (!php_gtk_parse_args(ZEND_NUM_ARGS(), "VaV", &php_flags, &php_targets,
-							&php_actions))
-		return;
-
-	if (!php_gtk_get_flag_value(GTK_TYPE_DEST_DEFAULTS, php_flags, (gint *)&flags))
-		return;
-
-	if (!php_gtk_get_flag_value(GTK_TYPE_GDK_DRAG_ACTION, php_actions, (gint *)&actions))
-		return;
-
-	targets = g_new(GtkTargetEntry, zend_hash_num_elements(Z_ARRVAL_P(php_targets)));
-
-	for (zend_hash_internal_pointer_reset(Z_ARRVAL_P(php_targets)), i = 0;
-		 zend_hash_get_current_data(Z_ARRVAL_P(php_targets), (void **)&item) == SUCCESS;
-		 zend_hash_move_forward(Z_ARRVAL_P(php_targets)), i++) {
-		if (Z_TYPE_PP(item) != IS_ARRAY ||
-			!php_gtk_parse_args_hash_quiet(*item, "sii", &targets[i].target,
-										   &targets[i].flags, &targets[i].info)) {
-			php_error(E_WARNING, "%s() was unable to parse target #%d in the list of targets", get_active_function_name(TSRMLS_C), i+1);
-			g_free(targets);
-			return;
-		}
-	}
-
-	gtk_drag_dest_set(GTK_WIDGET(PHP_GTK_GET(this_ptr)), flags, targets, i, actions);
-	g_free(targets);
-}
-%%
-override gtk_drag_source_set
-PHP_FUNCTION(gtk_drag_source_set)
-{
-	zval *php_sbmask, *php_targets, *php_actions;
-	zval **item;
-	GdkModifierType sbmask;
-	GdkDragAction actions;
-	GtkTargetEntry *targets;
-	int i;
-
-	NOT_STATIC_METHOD();
-
-	if (!php_gtk_parse_args(ZEND_NUM_ARGS(), "VaV", &php_sbmask, &php_targets,
-							&php_actions))
-		return;
-
-	if (!php_gtk_get_flag_value(GTK_TYPE_GDK_MODIFIER_TYPE, php_sbmask, (gint *)&sbmask))
-		return;
-
-	if (!php_gtk_get_flag_value(GTK_TYPE_GDK_DRAG_ACTION, php_actions, (gint *)&actions))
-		return;
-
-	targets = g_new(GtkTargetEntry, zend_hash_num_elements(Z_ARRVAL_P(php_targets)));
-
-	for (zend_hash_internal_pointer_reset(Z_ARRVAL_P(php_targets)), i = 0;
-		 zend_hash_get_current_data(Z_ARRVAL_P(php_targets), (void **)&item) == SUCCESS;
-		 zend_hash_move_forward(Z_ARRVAL_P(php_targets)), i++) {
-		if (Z_TYPE_PP(item) != IS_ARRAY ||
-			!php_gtk_parse_args_hash_quiet(*item, "sii", &targets[i].target,
-										   &targets[i].flags, &targets[i].info)) {
-			php_error(E_WARNING, "%s() was unable to parse target #%d in the list of targets", get_active_function_name(TSRMLS_C), i+1);
-			g_free(targets);
-			return;
-		}
-	}
-
-	gtk_drag_source_set(GTK_WIDGET(PHP_GTK_GET(this_ptr)), sbmask, targets, i, actions);
-	g_free(targets);
-}
-%%
-override gtk_drag_begin
-PHP_FUNCTION(gtk_drag_begin)
-{
-	zval *php_targets, *php_actions, *event;
-	zval *php_ret, **item;
-	GdkDragAction actions;
-	GtkTargetEntry *tents;
-	GtkTargetList *targets;
-	GdkDragContext *context;
-	gint button, i;
-
-	NOT_STATIC_METHOD();
-
-	if (!php_gtk_parse_args(ZEND_NUM_ARGS(), "aViO", &php_targets, &php_actions,
-							&button, &event, gdk_event_ce))
-		return;
-
-	if (!php_gtk_get_flag_value(GTK_TYPE_GDK_DRAG_ACTION, php_actions, (gint *)&actions))
-		return;
-
-	tents = g_new(GtkTargetEntry, zend_hash_num_elements(Z_ARRVAL_P(php_targets)));
-
-	for (zend_hash_internal_pointer_reset(Z_ARRVAL_P(php_targets)), i = 0;
-		 zend_hash_get_current_data(Z_ARRVAL_P(php_targets), (void **)&item) == SUCCESS;
-		 zend_hash_move_forward(Z_ARRVAL_P(php_targets)), i++) {
-		if (Z_TYPE_PP(item) != IS_ARRAY ||
-			!php_gtk_parse_args_hash_quiet(*item, "sii", &tents[i].target,
-										   &tents[i].flags, &tents[i].info)) {
-			php_error(E_WARNING, "%s() was unable to parse target #%d in the list of targets", get_active_function_name(TSRMLS_C), i+1);
-			g_free(tents);
-			return;
-		}
-	}
-
-	targets = gtk_target_list_new(tents, i);
-	g_free(tents);
-	context = gtk_drag_begin(GTK_WIDGET(PHP_GTK_GET(this_ptr)), targets, actions, button, PHP_GDK_EVENT_GET(event));
-	gtk_target_list_unref(targets);
-
-	php_ret = php_gdk_drag_context_new(context);
-	SEPARATE_ZVAL(&php_ret);
-	*return_value = *php_ret;
-}
-%%
-override gtk_widget_size_request
-PHP_FUNCTION(gtk_widget_size_request)
-{   
-	zval *ret;
-    GtkRequisition requisition;
-
-    NOT_STATIC_METHOD();
-
-    if (!php_gtk_parse_args(ZEND_NUM_ARGS(), ""))
-        return;
-
-    gtk_widget_size_request(GTK_WIDGET(PHP_GTK_GET(this_ptr)), &requisition);
-
-	ret = php_gtk_requisition_new(&requisition);
-	*return_value = *ret;
-	FREE_ZVAL(ret);
-}
-%%
-override gtk_widget_get_child_requisition
-PHP_FUNCTION(gtk_widget_get_child_requisition)
-{   
-	zval *ret;
-    GtkRequisition requisition;
-
-    NOT_STATIC_METHOD();
-
-    if (!php_gtk_parse_args(ZEND_NUM_ARGS(), ""))
-        return;
-
-    gtk_widget_get_child_requisition(GTK_WIDGET(PHP_GTK_GET(this_ptr)), &requisition);
-
-	ret = php_gtk_requisition_new(&requisition);
-	*return_value = *ret;
-	FREE_ZVAL(ret);
-}
-%%
-override gtk_widget_intersect
-PHP_FUNCTION(gtk_widget_intersect)
-{
-	zval *php_area;
-	GdkRectangle area, intersection;
-	
-	NOT_STATIC_METHOD();
-
-	if (!php_gtk_parse_args(ZEND_NUM_ARGS(), "O", &php_area, gdk_rectangle_ce))
-		return;
-
-	php_gdk_rectangle_get(php_area, &area);
-	if (gtk_widget_intersect(GTK_WIDGET(PHP_GTK_GET(this_ptr)), &area, &intersection)) {
-		zval *ret;
-
-		ret= php_gdk_rectangle_new(&intersection);
-		*return_value = *ret;
-		FREE_ZVAL(ret);
-	} else {
-		RETURN_FALSE;
-	}
-}
-%%
-override gtk_font_selection_dialog_set_filter
-PHP_FUNCTION(gtk_font_selection_dialog_set_filter)
-{
-	set_filter(INTERNAL_FUNCTION_PARAM_PASSTHRU, 0);
-}
-%%
-override gtk_font_selection_set_filter
-/* Convert a ZVAL to an array of gchar strings terminated with NULL */
-int php_gtk_array_to_gchar_array(zval *zvalue, gchar ***gchar_array)
-{
-	TSRMLS_FETCH();
-	/* If either no value was passed or its the PHP NULL value, return NULL
-	 * too. This is not an error but just an empty gchar array. */
-	if (zvalue == NULL || Z_TYPE_P(zvalue) == IS_NULL) {
-		*gchar_array = NULL;
-		return 1;
-	}
-
-	/* Even when a normal string is passed we create an array with just one
-	 * entry so you don't have to write array('string') just for one entry. */
-	if (Z_TYPE_P(zvalue) == IS_STRING) {
-		*gchar_array = emalloc(sizeof(gchar *) * 2);
-		(*gchar_array)[0] = estrndup(Z_STRVAL_P(zvalue), Z_STRLEN_P(zvalue));
-		(*gchar_array)[1] = NULL;
-		return 1;
-	/* If the array is empty, just return NULL (see above for NULL value).
-	 * Else reset the internal array pointer and iterate through its element,
-	 * separate and convert them to strings and finally build the gchar array. */
-	} else if (Z_TYPE_P(zvalue) == IS_ARRAY) {
-		HashTable *array;
-		zval **temp_text;
-		int i = 0;
-
-		array = HASH_OF(zvalue);
-		if (zend_hash_num_elements(array) == 0) {
-			*gchar_array = NULL;
-			return 1;
-		}
-		*gchar_array = emalloc(sizeof(gchar *) * (zend_hash_num_elements(array) + 1));
-		i = 0;
-		zend_hash_internal_pointer_reset(array);
-		while (zend_hash_get_current_data(array, (void**)&temp_text) == SUCCESS) {
-			convert_to_string_ex(temp_text);
-			(*gchar_array)[i++] = estrndup(Z_STRVAL_PP(temp_text), Z_STRLEN_PP(temp_text));
-			zend_hash_move_forward(array);
-		}
-		(*gchar_array)[i] = NULL;
-		return 1;
-	}
-	/* Error indication */
-	return 0;
-}
-
-/* Free a NULL terminated list of gchar pointers */
-void php_gtk_free_gchar_array(gchar **gchar_array)
-{
-	int i = 0;
-	while (gchar_array[i]) {
-		efree(gchar_array[i++]);
-	}
-}
-
-/* Simply traverse the array and free what is available. If you know you haven't allocated
- * all of the entries you can pass the actual number of entries allocated; else just
- * pass the maximum size (but be sure to have proper initialized the array to 0 first). */
-void php_gtk_free_gchar_ptr_array(gchar ***gchar_ptr_array, int num_elements)
-{
-	int i;
-
-	for (i = 0; i < num_elements; i++) {
-		if (gchar_ptr_array[i]) {
-			php_gtk_free_gchar_array(gchar_ptr_array[i]);
-			efree(gchar_ptr_array[i]);
-		}
-	}
-	efree(gchar_ptr_array);
-}
-
-static void set_filter(INTERNAL_FUNCTION_PARAMETERS, int which)
-{
-	zval *php_filter_type,					/* ZVAL of the GTK+ enum; must be ZVAL so it can
-											   be passed to php_gtk_get_enum_value */
-		 *php_font_type = NULL,				/* The same as above; but since its optional we
-											   default it to NULL and check for this later */
-		 *php_args[6];						/* The rest of the parameters passed to the method,
-											   stored in an array for loop traversion */
-	GtkFontFilterType filter_type;			/* The real filer type we get back from php_gtk_get_enum_value
-											   and pass to the real GTK+ function */
-	GtkFontType font_type = GTK_FONT_ALL;	/* Again, the same, but with a default value so we don't need
-											   to specify it if we don't explicetely need it */
-	gchar ***parameters;					/* The parameters we build during runtime to be passed to
-											   the real GTK+ function */
-	int i, num_parameters = 6;				/* The number of parameters; could be a constant */
-
-	NOT_STATIC_METHOD();
-
-	parameters = ecalloc(sizeof(gchar *), num_parameters);	/* Allocate the memory for the parameters
-															   we build and initialize the memory to 0 */
-	memset(php_args, 0, sizeof(zval *) * num_parameters);	/* The same is true for the ZVAL array */
-
-	if (!php_gtk_parse_args(ZEND_NUM_ARGS(), "V|VVVVVVV", &php_filter_type, &php_font_type,
-							&(php_args[0]), &(php_args[1]), &(php_args[2]),
-							&(php_args[3]), &(php_args[4]), &(php_args[5]))) {
-		return;
-	}
-
-	/* See if we got a valid enum value */
-	if (!php_gtk_get_enum_value(GTK_TYPE_FONT_FILTER_TYPE, php_filter_type, (gint *)&filter_type)) {
-		return;
-	}
-
-	/* See if we got a valid enum value; this one is optional and has a
-	 * default value */
-	if (php_font_type && !php_gtk_get_enum_value(GTK_TYPE_FONT_TYPE, php_font_type, (gint *)&font_type)) {
-		return;
-	}
-
-	/* Process each parameter passe after the two enums and see if we can
-	 * build a list of char pointers of it. Single strings are converted to an
-	 * array too. NULL is also valid, in which case we just set the parameter
-	 * to NULL. */
-	for (i = 0; i < num_parameters; i++) {
-		if (!php_gtk_array_to_gchar_array(php_args[i], &(parameters[i]))) {
-			php_error(E_WARNING, "%s() expected argument %d to be NULL, string or array of strings; %s given",
-					  get_active_function_name(TSRMLS_C), 3 + i, php_gtk_zval_type_name(php_args[i]));
-			php_gtk_free_gchar_ptr_array(parameters, i - 1);
-			return;
-		}
-	}
-
-	/* Call the GTK+ function */
-	switch( which) {
-		case 0:
-			gtk_font_selection_dialog_set_filter(GTK_FONT_SELECTION_DIALOG(PHP_GTK_GET(this_ptr)),
-												 filter_type, font_type, 
-												 parameters[0], parameters[1], parameters[2],
-												 parameters[3], parameters[4], parameters[5]);
-			break;
-		case 1:
-			gtk_font_selection_set_filter(GTK_FONT_SELECTION(PHP_GTK_GET(this_ptr)),
-										  filter_type, font_type, 
-										  parameters[0], parameters[1], parameters[2],
-										  parameters[3], parameters[4], parameters[5]);
-			break;
-		default:
-			php_error(E_WARNING, "%s() internal error, don't know which subfunction (%d) to call",
-					  get_active_function_name(TSRMLS_C), which);
-			/* return missing intentionally */
-	}
-
-	/* Free the parameters we previously allocated */
-	php_gtk_free_gchar_ptr_array(parameters, num_parameters);
-}
-
-PHP_FUNCTION(gtk_font_selection_set_filter)
-{
-	set_filter(INTERNAL_FUNCTION_PARAM_PASSTHRU, 1);
-}
-%%
-override gtk_button_box_get_child_size_default
-PHP_FUNCTION(gtk_button_box_get_child_size_default)
-{
-	gint min_width, min_height;
-
-	if (!php_gtk_parse_args(ZEND_NUM_ARGS(), "")) {
-		return;
-	}
-
-	gtk_button_box_get_child_size_default(&min_width, &min_height);
-	array_init(return_value);
-	add_next_index_long(return_value, min_width);
-	add_next_index_long(return_value, min_height);
-}
-%%
-override gtk_button_box_get_child_ipadding_default
-PHP_FUNCTION(gtk_button_box_get_child_ipadding_default)
-{
-	gint ipad_x, ipad_y;
-
-	if (!php_gtk_parse_args(ZEND_NUM_ARGS(), "")) {
-		return;
-	}
-
-	gtk_button_box_get_child_ipadding_default(&ipad_x, &ipad_y);
-	array_init(return_value);
-	add_next_index_long(return_value, ipad_x);
-	add_next_index_long(return_value, ipad_y);
-}
-%%
-override gtk_widget_get_pointer
-PHP_FUNCTION(gtk_widget_get_pointer)
-{
-	gint x, y;
-
-	NOT_STATIC_METHOD();
-
-	if (!php_gtk_parse_args(ZEND_NUM_ARGS(), "")) {
-		return;
-	}
-
-	gtk_widget_get_pointer(GTK_WIDGET(PHP_GTK_GET(this_ptr)), &x, &y);
-	array_init(return_value);
-	add_next_index_long(return_value, x);
-	add_next_index_long(return_value, y);
-}
-
-%%
-ignore
-  gtk_drag_source_handle_event gtk_drag_dest_handle_event
-  gtk_selection_request gtk_selection_notify gtk_selection_property_notify
-  gtk_selection_incr_event
-%% }}}
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.