Generator
~~~~~~~~~
* Pointers
* Write handlers for properties
* Make property-based constructors use pre-code generated by arg types
* gunichar arg type
* Fix Boxed_Arg to require explicit CE in php_gtk_parse_args().

Base Functionality
~~~~~~~~~~~~~~~~~~
* Some classes need to be coded in C entirely, see gtk-types.c
* Interfaces
* Implement __gtype, __doc, and other special properties, if possible
* Deal with clone() handler in Zend
* Maybe use zend_call_function() instead of call_user_function_ex() to take
  advantage of function call cache
* Construction of arbitrary GObjects() via argument lists
* Integration with pkg-config
* Fix GdkEventType property handlers to cope with GdkAtom, GdkRegion, GdkNativeWindow and GdkDragContext

Classes and Functions
~~~~~~~~~~~~~~~~~~~~~
* GtkAboutDialog
	method      GtkAboutDialog::get_artists: unknown type 'gchar**'
	method      GtkAboutDialog::get_authors: unknown type 'gchar**'
	method      GtkAboutDialog::get_documenters: unknown type 'gchar**'
	method      GtkAboutDialog::set_artists: unknown type 'gchar**'
	method      GtkAboutDialog::set_authors: unknown type 'gchar**'
	method      GtkAboutDialog::set_documenters: unknown type 'gchar**'
	method      GtkAboutDialog::set_email_hook: unknown type 'GtkAboutDialogActivateLinkFunc'
	method      GtkAboutDialog::set_url_hook: unknown type 'GtkAboutDialogActivateLinkFunc'
	GtkAboutDialog->set_logo_icon_name seems to find no icons at all
		(method is generated, need to test this)
* GtkClipboard
	constructor GtkClipboard::__construct: unknown type 'GdkAtom'
	method      GtkClipboard::request_contents: unknown type 'GdkAtom'
	method      GtkClipboard::request_targets: unknown type 'GtkClipboardTargetsReceivedFunc'
	method      GtkClipboard::request_text: unknown type 'GtkClipboardTextReceivedFunc'
	method      GtkClipboard::set_can_store: unknown type 'const-GtkTargetEntry*'
	method      GtkClipboard::set_with_data: unknown type 'const-GtkTargetEntry*'
	method      GtkClipboard::set_with_owner: unknown type 'const-GtkTargetEntry*'
	method      GtkClipboard::wait_for_contents: unknown type 'GdkAtom'
	method      GtkClipboard::wait_for_targets: unknown type 'GdkAtom**'
	method      GtkClipboard::wait_is_target_available: unknown type 'GdkAtom'
* GtkEntry
	GtkEntry objects can't be var_dumped, probably something missing
* GdkGC
	implement property access (read/write)
* GtkIconTheme
	method      GtkIconTheme::get_icon_sizes: unknown type 'gint*'
	method      GtkIconTheme::get_search_path: unknown type 'gchar**[]'
	method      GtkIconTheme::list_icons: unknown type 'GList*'
	method      GtkIconTheme::set_search_path: unknown type 'const-gchar*[]'
* GtkIconView
	method      GtkIconView::get_selected_items: unknown type 'GList*'
	method      GtkIconView::selected_foreach: unknown type 'GtkIconViewForeachFunc'
* GtkLabel
	Would it be good to call GtkLabel::set_ellipsize(PANGO::ELLIPSIZE_END) as part
	of an override for (left-justifying) GtkLabel::set_width_chars() (optional param)?
* GtkListStore
	method      GtkListStore::insert_with_values: varargs methods not supported
	method      GtkListStore::insert_with_valuesv: unknown type 'gint*'
	method      GtkListStore::reorder: unknown type 'gint*'
	method      GtkListStore::set_column_types: unknown type 'GType*'
	method      GtkListStore::set_value: unknown type 'GValue*'
* GtkTreeModel
	method      GtkTreeModel::get: varargs methods not supported
	method      GtkTreeModel::get_valist: unknown type 'va_list'
	method      GtkTreeModel::rows_reordered: unknown type 'gint*'
* GtkTreeStore
	method      GtkTreeStore::reorder: unknown type 'gint*'
	method      GtkTreeStore::set_column_types: unknown type 'GType*'
	method      GtkTreeStore::set_value: unknown type 'GValue*'
* GtkTreeView
	method      GtkTreeView::enable_model_drag_dest: unknown type 'const-GtkTargetEntry*'
	method      GtkTreeView::enable_model_drag_source: unknown type 'const-GtkTargetEntry*'
	method      GtkTreeView::get_columns: unknown type 'GList*'
	method      GtkTreeView::get_cursor: unknown type 'GtkTreePath**'
	method      GtkTreeView::get_dest_row_at_pos: unknown type 'GtkTreePath**'
	method      GtkTreeView::get_drag_dest_row: unknown type 'GtkTreePath**'
	method      GtkTreeView::get_row_separator_func: unknown type 'GtkTreeViewRowSeparatorFunc'
	method      GtkTreeView::get_search_equal_func: unknown type 'GtkTreeViewSearchEqualFunc'
	method      GtkTreeView::insert_column_with_attributes: varargs methods not supported
	method      GtkTreeView::map_expanded_rows: unknown type 'GtkTreeViewMappingFunc'
	method      GtkTreeView::set_column_drag_function: unknown type 'GtkTreeViewColumnDropFunc'
	method      GtkTreeView::set_destroy_count_func: unknown type 'GtkTreeDestroyCountFunc'
	method      GtkTreeView::set_row_separator_func: unknown type 'GtkTreeViewRowSeparatorFunc'
	method      GtkTreeView::set_search_equal_func: unknown type 'GtkTreeViewSearchEqualFunc'
	method      GtkTreeView::tree_to_widget_coords: unknown type 'gint*'
	method      GtkTreeView::widget_to_tree_coords: unknown type 'gint*'
* GtkTextBuffer
	method      GtkTextBuffer::create_tag: varargs methods not supported
	method      GtkTextBuffer::insert_with_tags: varargs methods not supported
	method      GtkTextBuffer::insert_with_tags_by_name: varargs methods not supported
	GtkTextBuffer::move_mark_by_name('selection_bound', ...) moves both the the
	insert and select_bound marks
		(method is generated, need to test this)
* GtkTextTagTable
	method      GtkTextTagTable::foreach: unknown type 'GtkTextTagTableForeach'
	GtkTextTagTable->lookup() is not implemented
		(method is generated, needs overriding - it's coming out as php_lookup()!)
* GdkPixmap
	constructor	create_from_xpm_d()


Fix
~~~
* StyleHelper does not implement handlers that ZE2 _requires_ right now. Need
  to change either ZE2 or StyleHelper.


Thoughts on reference counting and wrappers
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

1. We should probably not ref the GtkWindow/GtkInvisible after construction.
   It leaves a hanging reference around and the window will not get destroyed by
   Gtk+. The proper way to destroy the toplevel window is via
   gtk_window/widget_destroy(). Calling gtk::main_quit() is not enough.

2. Since we lack a garbage collector, we need to fake it. We need to override
   del_ref handler on the object, which will make sure that our wrapper is
   destroyed only if the referent gobject also has refcount of 1, which we means
   that only we own it. Otherwise, we need to keep our wrapper from being
   destroyed and save a pointer to the wrapper in the gobject with notification
   turned on, so that when gobject is destroyed by Gtk+ our wrapper is destroyed
   as well.

[
  * todo
  - in progress
]
