diff dwt/widgets/Widget.d @ 28:10acbb123580

Widget and TypedListener
author Frank Benoit <benoit@tionex.de>
date Wed, 09 Jan 2008 02:59:32 +0100
parents ffa3c27c4328
children ffffd0cd3b59
line wrap: on
line diff
--- a/dwt/widgets/Widget.d	Wed Jan 09 01:08:22 2008 +0100
+++ b/dwt/widgets/Widget.d	Wed Jan 09 02:59:32 2008 +0100
@@ -10,10 +10,25 @@
  *******************************************************************************/
 module dwt.widgets.Widget;
 
+import dwt.SWT;
+import dwt.dwthelper.utils;
 import dwt.internal.gtk.c.gtktypes;
 import dwt.internal.gtk.c.gdktypes;
+
+import dwt.events.DisposeListener;
+import dwt.internal.Converter;
+import dwt.internal.SWTEventListener;
+import dwt.internal.gtk.OS;
+import dwt.widgets.Display;
 import dwt.widgets.Event;
+import dwt.widgets.EventTable;
+import dwt.widgets.Listener;
+import dwt.widgets.TypedListener;
 
+import tango.stdc.stringz;
+import tango.stdc.string;
+
+/+
 class Widget{
 int /*long*/ windowProc (GtkWidget* handle, int /*long*/ user_data) ;
 int /*long*/ windowProc (GtkWidget* handle, int /*long*/ arg0, int /*long*/ user_data) ;
@@ -133,11 +148,7 @@
     static const int LAST_SIGNAL = 62;
 }
 
-/++
-import dwt.SWT;
-import dwt.internal.*;
-import dwt.internal.gtk.*;
-import dwt.events.*;
++/
 
 /**
  * This class is the abstract superclass of all user interface objects.
@@ -176,7 +187,7 @@
 	 * platforms and should never be accessed from application code.
 	 * </p>
 	 */
-	public int /*long*/ handle;
+	public GtkWidget* handle;
 	int style, state;
 	Display display;
 	EventTable eventTable;
@@ -287,7 +298,7 @@
 /**
  * Prevents uninitialized instances from being created outside the package.
  */
-Widget () {}
+this () {}
 
 /**
  * Constructs a new instance of this class given its parent
@@ -318,7 +329,7 @@
  * @see #checkSubclass
  * @see #getStyle
  */
-public Widget (Widget parent, int style) {
+public this (Widget parent, int style) {
 	checkSubclass ();
 	checkParent (parent);
 	this.style = style;
@@ -326,7 +337,7 @@
 }
 
 void _addListener (int eventType, Listener listener) {
-	if (eventTable == null) eventTable = new EventTable ();
+	if (eventTable is null) eventTable = new EventTable ();
 	eventTable.hook (eventType, listener);
 }
 
@@ -355,7 +366,7 @@
  */
 public void addListener (int eventType, Listener listener) {
 	checkWidget ();
-	if (listener == null) error (SWT.ERROR_NULL_ARGUMENT);
+	if (listener is null) error (SWT.ERROR_NULL_ARGUMENT);
 	_addListener (eventType, listener);
 }
 
@@ -380,28 +391,28 @@
  */
 public void addDisposeListener (DisposeListener listener) {
 	checkWidget ();
-	if (listener == null) error (SWT.ERROR_NULL_ARGUMENT);
+	if (listener is null) error (SWT.ERROR_NULL_ARGUMENT);
 	TypedListener typedListener = new TypedListener (listener);
 	addListener (SWT.Dispose, typedListener);
 }
 
-int /*long*/ paintWindow () {
-	return 0;
+GdkWindow* paintWindow () {
+	return null;
 }
 
 static int checkBits (int style, int int0, int int1, int int2, int int3, int int4, int int5) {
 	int mask = int0 | int1 | int2 | int3 | int4 | int5;
-	if ((style & mask) == 0) style |= int0;
-	if ((style & int0) != 0) style = (style & ~mask) | int0;
-	if ((style & int1) != 0) style = (style & ~mask) | int1;
-	if ((style & int2) != 0) style = (style & ~mask) | int2;
-	if ((style & int3) != 0) style = (style & ~mask) | int3;
-	if ((style & int4) != 0) style = (style & ~mask) | int4;
-	if ((style & int5) != 0) style = (style & ~mask) | int5;
+	if ((style & mask) is 0) style |= int0;
+	if ((style & int0) !is 0) style = (style & ~mask) | int0;
+	if ((style & int1) !is 0) style = (style & ~mask) | int1;
+	if ((style & int2) !is 0) style = (style & ~mask) | int2;
+	if ((style & int3) !is 0) style = (style & ~mask) | int3;
+	if ((style & int4) !is 0) style = (style & ~mask) | int4;
+	if ((style & int5) !is 0) style = (style & ~mask) | int5;
 	return style;
 }
 
-int /*long*/ cellDataProc (int /*long*/ tree_column, int /*long*/ cell, int /*long*/ tree_model, int /*long*/ iter, int /*long*/ data) {
+int /*long*/ cellDataProc (int /*long*/ tree_column, int /*long*/ cell, int /*long*/ tree_model, int /*long*/ iter, GtkWidget* data) {
 	return 0;
 }
 
@@ -411,10 +422,10 @@
 
 void checkOrientation (Widget parent) {
 	style &= ~SWT.MIRRORED;
-	if ((style & (SWT.LEFT_TO_RIGHT | SWT.RIGHT_TO_LEFT)) == 0) {
-		if (parent != null) {
-			if ((parent.style & SWT.LEFT_TO_RIGHT) != 0) style |= SWT.LEFT_TO_RIGHT;
-			if ((parent.style & SWT.RIGHT_TO_LEFT) != 0) style |= SWT.RIGHT_TO_LEFT;
+	if ((style & (SWT.LEFT_TO_RIGHT | SWT.RIGHT_TO_LEFT)) is 0) {
+		if (parent !is null) {
+			if ((parent.style & SWT.LEFT_TO_RIGHT) !is 0) style |= SWT.LEFT_TO_RIGHT;
+			if ((parent.style & SWT.RIGHT_TO_LEFT) !is 0) style |= SWT.RIGHT_TO_LEFT;
 		}
 	}
 	style = checkBits (style, SWT.LEFT_TO_RIGHT, SWT.RIGHT_TO_LEFT, 0, 0, 0, 0);
@@ -433,7 +444,7 @@
  * </ul>
  */
 void checkParent (Widget parent) {
-	if (parent == null) error (SWT.ERROR_NULL_ARGUMENT);
+	if (parent is null) error (SWT.ERROR_NULL_ARGUMENT);
 	if (parent.isDisposed ()) error (SWT.ERROR_INVALID_ARGUMENT);
 	parent.checkWidget ();
 	parent.checkOpen ();
@@ -496,9 +507,9 @@
  */
 protected void checkWidget () {
 	Display display = this.display;
-	if (display == null) error (SWT.ERROR_WIDGET_DISPOSED);
-	if (display.thread != Thread.currentThread ()) error (SWT.ERROR_THREAD_INVALID_ACCESS);
-	if ((state & DISPOSED) != 0) error (SWT.ERROR_WIDGET_DISPOSED);
+	if (display is null) error (SWT.ERROR_WIDGET_DISPOSED);
+	if (display.thread !is Thread.getThis ()) error (SWT.ERROR_THREAD_INVALID_ACCESS);
+	if ((state & DISPOSED) !is 0) error (SWT.ERROR_WIDGET_DISPOSED);
 }
 
 void createHandle (int index) {
@@ -512,15 +523,15 @@
 }
 
 void deregister () {
-	if (handle == 0) return;
-	if ((state & HANDLE) != 0) display.removeWidget (handle);
+	if (handle is null) return;
+	if ((state & HANDLE) !is 0) display.removeWidget (handle);
 }
 
 void destroyWidget () {
-	int /*long*/ topHandle = topHandle ();
+	GtkWidget* h = topHandle ();
 	releaseHandle ();
-	if (topHandle != 0 && (state & HANDLE) != 0) {
-		OS.gtk_widget_destroy (topHandle);
+	if (h !is null && (state & HANDLE) !is 0) {
+		OS.gtk_widget_destroy (h);
 	}
 }
 
@@ -585,7 +596,7 @@
  */
 public Object getData () {
 	checkWidget();
-	return (state & KEYED_DATA) != 0 ? ((Object []) data) [0] : data;
+	return (state & KEYED_DATA) !is 0 ? (cast(ArrayWrapperObject)data).array[0] : data;
 }
 /**
  * Returns the application defined property of the receiver
@@ -611,13 +622,13 @@
  *
  * @see #setData(String, Object)
  */
-public Object getData (String key) {
+public Object getData (char[] key) {
 	checkWidget();
-	if (key == null) error (SWT.ERROR_NULL_ARGUMENT);
-	if ((state & KEYED_DATA) != 0) {
-		Object [] table = (Object []) data;
+	if (key is null) error (SWT.ERROR_NULL_ARGUMENT);
+	if ((state & KEYED_DATA) !is 0) {
+		char[][] table = (cast(ArrayWrapperString2) data).array;
 		for (int i=1; i<table.length; i+=2) {
-			if (key.equals (table [i])) return table [i+1];
+			if (key ==/*eq*/ table [i] ) return new ArrayWrapperString( table [i+1] );
 		}
 	}
 	return null;
@@ -640,21 +651,21 @@
  */
 public Display getDisplay () {
 	Display display = this.display;
-	if (display == null) error (SWT.ERROR_WIDGET_DISPOSED);
+	if (display is null) error (SWT.ERROR_WIDGET_DISPOSED);
 	return display;
 }
 
-String getName () {
-//	String string = getClass ().getName ();
-//	int index = string.lastIndexOf ('.');
-//	if (index == -1) return string;
-	String string = getClass ().getName ();
-	int index = string.length ();
-	while ((--index > 0) && (string.charAt (index) != '.')) {}
-	return string.substring (index + 1, string.length ());
+char[] getName () {
+//	char[] str = getClass ().getName ();
+//	int index = str.lastIndexOf ('.');
+//	if (index is -1) return str;
+	char[] str = this.classinfo.name;
+	int index = str.length;
+	while ((--index > 0) && (str[index] !is '.')) {}
+	return str[index + 1 .. $ ];
 }
 
-String getNameText () {
+char[] getNameText () {
 	return "";
 }
 
@@ -684,27 +695,27 @@
 }
 
 
-int /*long*/ gtk_activate (int /*long*/ widget) {
+int /*long*/ gtk_activate (GtkWidget* widget) {
 	return 0;
 }
 
-int /*long*/ gtk_button_press_event (int /*long*/ widget, int /*long*/ event) {
+int /*long*/ gtk_button_press_event (GtkWidget* widget, int /*long*/ event) {
 	return 0;
 }
 
-int /*long*/ gtk_button_release_event (int /*long*/ widget, int /*long*/ event) {
+int /*long*/ gtk_button_release_event (GtkWidget* widget, int /*long*/ event) {
 	return 0;
 }
 
-int /*long*/ gtk_changed (int /*long*/ widget) {
+int /*long*/ gtk_changed (GtkWidget* widget) {
 	return 0;
 }
 
-int /*long*/ gtk_change_value (int /*long*/ widget, int /*long*/ scroll, int /*long*/ value1, int /*long*/ value2) {
+int /*long*/ gtk_change_value (GtkWidget* widget, int /*long*/ scroll, int /*long*/ value1, int /*long*/ value2) {
 	return 0;
 }
 
-int /*long*/ gtk_clicked (int /*long*/ widget) {
+int /*long*/ gtk_clicked (GtkWidget* widget) {
 	return 0;
 }
 
@@ -712,127 +723,123 @@
 	return 0;
 }
 
-int /*long*/ gtk_configure_event (int /*long*/ widget, int /*long*/ event) {
+int /*long*/ gtk_configure_event (GtkWidget* widget, int /*long*/ event) {
 	return 0;
 }
 
-int /*long*/ gtk_day_selected (int /*long*/ widget) {
-	return 0;
-}
-
-int /*long*/ gtk_delete_event (int /*long*/ widget, int /*long*/ event) {
+int /*long*/ gtk_day_selected (GtkWidget* widget) {
 	return 0;
 }
 
-int /*long*/ gtk_delete_range (int /*long*/ widget, int /*long*/ iter1, int /*long*/ iter2) {
+int /*long*/ gtk_delete_event (GtkWidget* widget, int /*long*/ event) {
 	return 0;
 }
 
-int /*long*/ gtk_delete_text (int /*long*/ widget, int /*long*/ start_pos, int /*long*/ end_pos) {
+int /*long*/ gtk_delete_range (GtkWidget* widget, int /*long*/ iter1, int /*long*/ iter2) {
 	return 0;
 }
 
-int /*long*/ gtk_enter_notify_event (int /*long*/ widget, int /*long*/ event) {
+int /*long*/ gtk_delete_text (GtkWidget* widget, int /*long*/ start_pos, int /*long*/ end_pos) {
 	return 0;
 }
 
-int /*long*/ gtk_event (int /*long*/ widget, int /*long*/ event) {
+int /*long*/ gtk_enter_notify_event (GtkWidget* widget, int /*long*/ event) {
 	return 0;
 }
 
-int /*long*/ gtk_event_after (int /*long*/ widget, int /*long*/ event) {
+int /*long*/ gtk_event (GtkWidget* widget, int /*long*/ event) {
 	return 0;
 }
 
-int /*long*/ gtk_expand_collapse_cursor_row (int /*long*/ widget, int /*long*/ logical, int /*long*/ expand, int /*long*/ open_all) {
+int /*long*/ gtk_event_after (GtkWidget* widget, int /*long*/ event) {
 	return 0;
 }
 
-int /*long*/ gtk_expose_event (int /*long*/ widget, int /*long*/ event) {
+int /*long*/ gtk_expand_collapse_cursor_row (GtkWidget* widget, int /*long*/ logical, int /*long*/ expand, int /*long*/ open_all) {
 	return 0;
 }
 
-int /*long*/ gtk_focus (int /*long*/ widget, int /*long*/ event) {
+int /*long*/ gtk_expose_event (GtkWidget* widget, int /*long*/ event) {
 	return 0;
 }
 
-int /*long*/ gtk_focus_in_event (int /*long*/ widget, int /*long*/ event) {
+int /*long*/ gtk_focus (GtkWidget* widget, int /*long*/ event) {
 	return 0;
 }
 
-int /*long*/ gtk_focus_out_event (int /*long*/ widget, int /*long*/ event) {
+int /*long*/ gtk_focus_in_event (GtkWidget* widget, int /*long*/ event) {
 	return 0;
 }
 
-int /*long*/ gtk_grab_focus (int /*long*/ widget) {
+int /*long*/ gtk_focus_out_event (GtkWidget* widget, int /*long*/ event) {
 	return 0;
 }
 
-int /*long*/ gtk_hide (int /*long*/ widget) {
+int /*long*/ gtk_grab_focus (GtkWidget* widget) {
 	return 0;
 }
 
-int /*long*/ gtk_input (int /*long*/ widget, int /*long*/ arg1) {
+int /*long*/ gtk_hide (GtkWidget* widget) {
 	return 0;
 }
 
-int /*long*/ gtk_insert_text (int /*long*/ widget, int /*long*/ new_text, int /*long*/ new_text_length, int /*long*/ position) {
+int /*long*/ gtk_input (GtkWidget* widget, int /*long*/ arg1) {
+	return 0;
+}
+
+int /*long*/ gtk_insert_text (GtkWidget* widget, int /*long*/ new_text, int /*long*/ new_text_length, int /*long*/ position) {
 	return 0;
 }
 
-int /*long*/ gtk_key_press_event (int /*long*/ widget, int /*long*/ event) {
-	GdkEventKey gdkEvent = new GdkEventKey ();
-	OS.memmove (gdkEvent, event, GdkEventKey.sizeof);
-	return sendKeyEvent (SWT.KeyDown, gdkEvent) ? 0 : 1;
+int /*long*/ gtk_key_press_event (GtkWidget* widget, GdkEventKey* event) {
+	return sendKeyEvent (SWT.KeyDown, event) ? 0 : 1;
 }
 
-int /*long*/ gtk_key_release_event (int /*long*/ widget, int /*long*/ event) {
-	GdkEventKey gdkEvent = new GdkEventKey ();
-	OS.memmove (gdkEvent, event, GdkEventKey.sizeof);
-	return sendKeyEvent (SWT.KeyUp, gdkEvent) ? 0 : 1;
+int /*long*/ gtk_key_release_event (GtkWidget* widget, GdkEventKey* event) {
+	return sendKeyEvent (SWT.KeyUp, event) ? 0 : 1;
 }
 
-int /*long*/ gtk_leave_notify_event (int /*long*/ widget, int /*long*/ event) {
+int /*long*/ gtk_leave_notify_event (GtkWidget* widget, int /*long*/ event) {
 	return 0;
 }
 
-int /*long*/ gtk_map (int /*long*/ widget) {
+int /*long*/ gtk_map (GtkWidget* widget) {
 	return 0;
 }
 
-int /*long*/ gtk_map_event (int /*long*/ widget, int /*long*/ event) {
+int /*long*/ gtk_map_event (GtkWidget* widget, int /*long*/ event) {
 	return 0;
 }
 
-int /*long*/ gtk_mnemonic_activate (int /*long*/ widget, int /*long*/ arg1) {
+int /*long*/ gtk_mnemonic_activate (GtkWidget* widget, int /*long*/ arg1) {
 	return 0;
 }
 
-int /*long*/ gtk_month_changed (int /*long*/ widget) {
+int /*long*/ gtk_month_changed (GtkWidget* widget) {
 	return 0;
 }
 
-int /*long*/ gtk_motion_notify_event (int /*long*/ widget, int /*long*/ event) {
+int /*long*/ gtk_motion_notify_event (GtkWidget* widget, int /*long*/ event) {
 	return 0;
 }
 
-int /*long*/ gtk_move_focus (int /*long*/ widget, int /*long*/ event) {
+int /*long*/ gtk_move_focus (GtkWidget* widget, int /*long*/ event) {
 	return 0;
 }
 
-int /*long*/ gtk_output (int /*long*/ widget) {
+int /*long*/ gtk_output (GtkWidget* widget) {
 	return 0;
 }
 
-int /*long*/ gtk_popup_menu (int /*long*/ widget) {
+int /*long*/ gtk_popup_menu (GtkWidget* widget) {
 	return 0;
 }
 
-int /*long*/ gtk_preedit_changed (int /*long*/ imcontext) {
+int /*long*/ gtk_preedit_changed (GtkWidget* imcontext) {
 	return 0;
 }
 
-int /*long*/ gtk_realize (int /*long*/ widget) {
+int /*long*/ gtk_realize (GtkWidget* widget) {
 	return 0;
 }
 
@@ -840,11 +847,11 @@
 	return 0;
 }
 
-int /*long*/ gtk_scroll_child (int /*long*/ widget, int /*long*/ scrollType, int /*long*/ horizontal) {
+int /*long*/ gtk_scroll_child (GtkWidget* widget, int /*long*/ scrollType, int /*long*/ horizontal) {
 	return 0;
 }
 
-int /*long*/ gtk_scroll_event (int /*long*/ widget, int /*long*/ event) {
+int /*long*/ gtk_scroll_event (GtkWidget* widget, int /*long*/ event) {
 	return 0;
 }
 
@@ -852,23 +859,23 @@
 	return 0;
 }
 
-int /*long*/ gtk_show (int /*long*/ widget) {
+int /*long*/ gtk_show (GtkWidget* widget) {
 	return 0;
 }
 
-int /*long*/ gtk_show_help (int /*long*/ widget, int /*long*/ helpType) {
+int /*long*/ gtk_show_help (GtkWidget* widget, int /*long*/ helpType) {
 	return 0;
 }
 
-int /*long*/ gtk_size_allocate (int /*long*/ widget, int /*long*/ allocation) {
+int /*long*/ gtk_size_allocate (GtkWidget* widget, int /*long*/ allocation) {
 	return 0;
 }
 
-int /*long*/ gtk_style_set (int /*long*/ widget, int /*long*/ previousStyle) {
+int /*long*/ gtk_style_set (GtkWidget* widget, int /*long*/ previousStyle) {
 	return 0;
 }
 
-int /*long*/ gtk_switch_page (int /*long*/ widget, int /*long*/ page, int /*long*/ page_num) {
+int /*long*/ gtk_switch_page (GtkWidget* widget, int /*long*/ page, int /*long*/ page_num) {
 	return 0;
 }
 
@@ -880,7 +887,7 @@
 	return 0;
 }
 
-int /*long*/ gtk_text_buffer_insert_text (int /*long*/ widget, int /*long*/ iter, int /*long*/ text, int /*long*/ length) {
+int /*long*/ gtk_text_buffer_insert_text (GtkWidget* widget, int /*long*/ iter, int /*long*/ text, int /*long*/ length) {
 	return 0;
 }
 
@@ -892,15 +899,15 @@
 	return 0;
 }
 
-int /*long*/ gtk_unmap (int /*long*/ widget) {
+int /*long*/ gtk_unmap (GtkWidget* widget) {
 	return 0;
 }
 
-int /*long*/ gtk_unmap_event (int /*long*/ widget, int /*long*/ event) {
+int /*long*/ gtk_unmap_event (GtkWidget* widget, int /*long*/ event) {
 	return 0;
 }
 
-int /*long*/ gtk_unrealize (int /*long*/ widget) {
+int /*long*/ gtk_unrealize (GtkWidget* widget) {
 	return 0;
 }
 
@@ -908,46 +915,46 @@
 	return 0;
 }
 
-int /*long*/ gtk_visibility_notify_event (int /*long*/ widget, int /*long*/ event) {
+int /*long*/ gtk_visibility_notify_event (GtkWidget* widget, int /*long*/ event) {
 	return 0;
 }
 
-int /*long*/ gtk_window_state_event (int /*long*/ widget, int /*long*/ event) {
+int /*long*/ gtk_window_state_event (GtkWidget* widget, int /*long*/ event) {
 	return 0;
 }
 
-int fontHeight (int /*long*/ font, int /*long*/ widgetHandle) {
-	int /*long*/ context = OS.gtk_widget_get_pango_context (widgetHandle);
-	int /*long*/ lang = OS.pango_context_get_language (context);
-	int /*long*/ metrics = OS.pango_context_get_metrics (context, font, lang);
+int fontHeight ( PangoFontDescription* font, GtkWidget* widgetHandle ) {
+	auto context = OS.gtk_widget_get_pango_context (widgetHandle);
+	auto lang = OS.pango_context_get_language (context);
+	auto metrics = OS.pango_context_get_metrics (context, font, lang);
 	int ascent = OS.pango_font_metrics_get_ascent (metrics);
 	int descent = OS.pango_font_metrics_get_descent (metrics);
 	OS.pango_font_metrics_unref (metrics);
 	return OS.PANGO_PIXELS (ascent + descent);
 }
 
-int /*long*/ filterProc(int /*long*/ xEvent, int /*long*/ gdkEvent, int /*long*/ data2) {
-	return 0;
+GdkFilterReturn filterProc (GdkXEvent* xEvent, GdkEvent* gdkEvent, void* data) {
+	return cast(GdkFilterReturn)0;
 }
 
-boolean filters (int eventType) {
+bool filters (int eventType) {
 	return display.filters (eventType);
 }
 
-int /*long*/ fixedMapProc (int /*long*/ widget) {
+int /*long*/ fixedMapProc (GtkWidget* widget) {
 	return 0;
 }
 
-char [] fixMnemonic (String string) {
-	int length = string.length ();
-	char [] text = new char [length];
-	string.getChars (0, length, text, 0);
+char [] fixMnemonic (char[] str) {
+	int len = str.length;
+	char [] text = new char [len];
+	text = str[0 .. len];
 	int i = 0, j = 0;
-	char [] result = new char [length * 2];
-	while (i < length) {
+	char [] result = new char [len * 2];
+	while (i < len) {
 		switch (text [i]) {
 			case '&':
-				if (i + 1 < length && text [i + 1] == '&') {
+				if (i + 1 < len && text [i + 1] is '&') {
 					i++;
 				} else {
 					text [i] = '_';
@@ -973,8 +980,8 @@
  *
  * @return <code>true</code> when the widget is disposed and <code>false</code> otherwise
  */
-public boolean isDisposed () {
-	return (state & DISPOSED) != 0;
+public bool isDisposed () {
+	return (state & DISPOSED) !is 0;
 }
 
 /**
@@ -993,17 +1000,17 @@
  *
  * @see SWT
  */
-public boolean isListening (int eventType) {
+public bool isListening (int eventType) {
 	checkWidget ();
 	return hooks (eventType);
 }
 
-boolean isValidThread () {
+bool isValidThread () {
 	return getDisplay ().isValidThread ();
 }
 
-boolean isValidSubclass() {
-	return Display.isValidClass(getClass());
+bool isValidSubclass() {
+	return true;//Display.isValidClass(getClass());
 }
 
 void hookEvents () {
@@ -1022,31 +1029,31 @@
  *
  * @see #isListening
  */
-boolean hooks (int eventType) {
-	if (eventTable == null) return false;
+bool hooks (int eventType) {
+	if (eventTable is null) return false;
 	return eventTable.hooks (eventType);
 }
 
-int /*long*/ hoverProc (int /*long*/ widget) {
+int /*long*/ hoverProc (GtkWidget* widget) {
 	return 0;
 }
 
-int /*long*/ menuPositionProc (int /*long*/ menu, int /*long*/ x, int /*long*/ y, int /*long*/ push_in, int /*long*/ user_data) {
+int /*long*/ menuPositionProc (GtkWidget * menu, int /*long*/ x, int /*long*/ y, int /*long*/ push_in, int /*long*/ user_data) {
 	return 0;
 }
 
-boolean mnemonicHit (int /*long*/ mnemonicHandle, char key) {
+bool mnemonicHit (int /*long*/ mnemonicHandle, char key) {
 	if (!mnemonicMatch (mnemonicHandle, key)) return false;
-	OS.g_signal_handlers_block_matched (mnemonicHandle, OS.G_SIGNAL_MATCH_DATA, 0, 0, 0, 0, MNEMONIC_ACTIVATE);
-	boolean result = OS.gtk_widget_mnemonic_activate (mnemonicHandle, false);
-	OS.g_signal_handlers_unblock_matched (mnemonicHandle, OS.G_SIGNAL_MATCH_DATA, 0, 0, 0, 0, MNEMONIC_ACTIVATE);
+	OS.g_signal_handlers_block_matched ( cast(void*)mnemonicHandle, cast(GSignalMatchType)OS.G_SIGNAL_MATCH_DATA, 0, 0, null, null, cast(void*)MNEMONIC_ACTIVATE);
+	bool result = cast(bool)OS.gtk_widget_mnemonic_activate (cast(GtkWidget*)mnemonicHandle, false);
+	OS.g_signal_handlers_unblock_matched (cast(void*)mnemonicHandle, cast(GSignalMatchType)OS.G_SIGNAL_MATCH_DATA, 0, 0, null, null, cast(void*)MNEMONIC_ACTIVATE);
 	return result;
 }
 
-boolean mnemonicMatch (int /*long*/ mnemonicHandle, char key) {
+bool mnemonicMatch (int /*long*/ mnemonicHandle, char key) {
 	int keyval1 = OS.gdk_keyval_to_lower (OS.gdk_unicode_to_keyval (key));
-	int keyval2 = OS.gdk_keyval_to_lower (OS.gtk_label_get_mnemonic_keyval (mnemonicHandle));
-	return keyval1 == keyval2;
+	int keyval2 = OS.gdk_keyval_to_lower (OS.gtk_label_get_mnemonic_keyval (cast(GtkLabel*)mnemonicHandle));
+	return keyval1 is keyval2;
 }
 
 /**
@@ -1070,7 +1077,7 @@
  */
 public void notifyListeners (int eventType, Event event) {
 	checkWidget();
-	if (event == null) event = new Event ();
+	if (event is null) event = new Event ();
 	sendEvent (eventType, event);
 }
 
@@ -1083,19 +1090,19 @@
 }
 
 void register () {
-	if (handle == 0) return;
-	if ((state & HANDLE) != 0) display.addWidget (handle, this);
+	if (handle is null) return;
+	if ((state & HANDLE) !is 0) display.addWidget (handle, this);
 }
 
-void release (boolean destroy) {
-	if ((state & DISPOSE_SENT) == 0) {
+void release (bool destroy) {
+	if ((state & DISPOSE_SENT) is 0) {
 		state |= DISPOSE_SENT;
 		sendEvent (SWT.Dispose);
 	}
-	if ((state & DISPOSED) == 0) {
+	if ((state & DISPOSED) is 0) {
 		releaseChildren (destroy);
 	}
-	if ((state & RELEASED) == 0) {
+	if ((state & RELEASED) is 0) {
 		state |= RELEASED;
 		if (destroy) {
 			releaseParent ();
@@ -1108,11 +1115,11 @@
 	}
 }
 
-void releaseChildren (boolean destroy) {
+void releaseChildren (bool destroy) {
 }
 
 void releaseHandle () {
-	handle = 0;
+	handle = null;
 	state |= DISPOSED;
 	display = null;
 }
@@ -1150,8 +1157,8 @@
  */
 public void removeListener (int eventType, Listener handler) {
 	checkWidget ();
-	if (handler == null) error (SWT.ERROR_NULL_ARGUMENT);
-	if (eventTable == null) return;
+	if (handler is null) error (SWT.ERROR_NULL_ARGUMENT);
+	if (eventTable is null) return;
 	eventTable.unhook (eventType, handler);
 }
 
@@ -1181,16 +1188,16 @@
  */
 protected void removeListener (int eventType, SWTEventListener handler) {
 	checkWidget ();
-	if (handler == null) error (SWT.ERROR_NULL_ARGUMENT);
-	if (eventTable == null) return;
+	if (handler is null) error (SWT.ERROR_NULL_ARGUMENT);
+	if (eventTable is null) return;
 	eventTable.unhook (eventType, handler);
 }
 
-int /*long*/ rendererGetSizeProc (int /*long*/ cell, int /*long*/ handle, int /*long*/ cell_area, int /*long*/ x_offset, int /*long*/ y_offset, int /*long*/ width, int /*long*/ height) {
+void rendererGetSizeProc(GtkCellRenderer *cell, GtkWidget *handle, GdkRectangle *cell_area, int *x_offset, int *y_offset, int *width, int *height) {
 	return 0;
 }
 
-int /*long*/ rendererRenderProc (int /*long*/ cell, int /*long*/ window, int /*long*/ handle, int /*long*/ background_area, int /*long*/ cell_area, int /*long*/ expose_area, int /*long*/ flags) {
+void rendererRenderProc (GtkCellRenderer * cell, GdkDrawable * window, GtkWidget * handle, GdkRectangle *background_area, GdkRectangle *cell_area, GdkRectangle *expose_area, int flags){
 	return 0;
 }
 
@@ -1213,15 +1220,15 @@
  */
 public void removeDisposeListener (DisposeListener listener) {
 	checkWidget ();
-	if (listener == null) error (SWT.ERROR_NULL_ARGUMENT);
-	if (eventTable == null) return;
+	if (listener is null) error (SWT.ERROR_NULL_ARGUMENT);
+	if (eventTable is null) return;
 	eventTable.unhook (SWT.Dispose, listener);
 }
 
 void sendEvent (Event event) {
 	Display display = event.display;
 	if (!display.filterEvent (event)) {
-		if (eventTable != null) eventTable.sendEvent (event);
+		if (eventTable !is null) eventTable.sendEvent (event);
 	}
 }
 
@@ -1233,15 +1240,15 @@
 	sendEvent (eventType, event, true);
 }
 
-void sendEvent (int eventType, Event event, boolean send) {
-	if (eventTable == null && !display.filters (eventType)) {
+void sendEvent (int eventType, Event event, bool send) {
+	if (eventTable is null && !display.filters (eventType)) {
 		return;
 	}
-	if (event == null) event = new Event ();
+	if (event is null) event = new Event ();
 	event.type = eventType;
 	event.display = display;
 	event.widget = this;
-	if (event.time == 0) {
+	if (event.time is 0) {
 		event.time = display.getLastEventTime ();
 	}
 	if (send) {
@@ -1251,9 +1258,9 @@
 	}
 }
 
-boolean sendKeyEvent (int type, GdkEventKey keyEvent) {
-	int length = keyEvent.length;
-	if (keyEvent.string == 0 || OS.g_utf8_strlen (keyEvent.string, length) <= 1) {
+bool sendKeyEvent (int type, GdkEventKey* keyEvent) {
+	int len = keyEvent.length;
+	if (keyEvent.str is null || OS.g_utf8_strlen (keyEvent.str, len) <= 1) {
 		Event event = new Event ();
 		event.time = keyEvent.time;
 		if (!setKeyState (event, keyEvent)) return true;
@@ -1269,21 +1276,19 @@
 		if (isDisposed ()) return false;
 		return event.doit;
 	}
-	byte [] buffer = new byte [length];
-	OS.memmove (buffer, keyEvent.string, length);
-	char [] chars = Converter.mbcsToWcs (null, buffer);
-	return sendIMKeyEvent (type, keyEvent, chars) != null;
+	char [] chars = fromUtf8z( keyEvent.str );
+	return sendIMKeyEvent (type, keyEvent, chars) !is null;
 }
 
-char [] sendIMKeyEvent (int type, GdkEventKey keyEvent, char  [] chars) {
+char [] sendIMKeyEvent (int type, GdkEventKey* keyEvent, char  [] chars) {
 	int index = 0, count = 0, state = 0;
-	int /*long*/ ptr = 0;
-	if (keyEvent == null) {
+	GdkEvent*  ptr = null;
+	if (keyEvent is null) {
 		ptr = OS.gtk_get_current_event ();
-		if (ptr != 0) {
+		if (ptr !is null) {
 			keyEvent = new GdkEventKey ();
-			OS.memmove (keyEvent, ptr, GdkEventKey.sizeof);
-			switch (keyEvent.type) {
+			memmove (keyEvent, ptr, GdkEventKey.sizeof);
+			switch (cast(int)keyEvent.type) {
 				case OS.GDK_KEY_PRESS:
 				case OS.GDK_KEY_RELEASE:
 					state = keyEvent.state;
@@ -1294,14 +1299,14 @@
 			}
 		}
 	}
-	if (keyEvent == null) {
-		int [] buffer = new int [1];
-		OS.gtk_get_current_event_state (buffer);
-		state = buffer [0];
+	if (keyEvent is null) {
+		GdkModifierType buffer;
+		OS.gtk_get_current_event_state (&buffer);
+		state = buffer;
 	}
 	while (index < chars.length) {
 		Event event = new Event ();
-		if (keyEvent != null && chars.length <= 1) {
+		if (keyEvent !is null && chars.length <= 1) {
 			setKeyState (event, keyEvent);
 		} else {
 			setInputState (event, state);
@@ -1316,15 +1321,15 @@
 		* the key by returning null.
 		*/
 		if (isDisposed ()) {
-			if (ptr != 0) OS.gdk_event_free (ptr);
+			if (ptr !is null) OS.gdk_event_free (ptr);
 			return null;
 		}
 		if (event.doit) chars [count++] = chars [index];
 		index++;
 	}
-	if (ptr != 0) OS.gdk_event_free (ptr);
-	if (count == 0) return null;
-	if (index != count) {
+	if (ptr !is null) OS.gdk_event_free (ptr);
+	if (count is 0) return null;
+	if (index !is count) {
 		char [] result = new char [count];
 		System.arraycopy (chars, 0, result, 0, count);
 		return result;
@@ -1356,8 +1361,8 @@
  */
 public void setData (Object data) {
 	checkWidget();
-	if ((state & KEYED_DATA) != 0) {
-		((Object []) this.data) [0] = data;
+	if ((state & KEYED_DATA) !is 0) {
+		(cast(ArrayWrapperObject) this.data).array[0] = data;
 	} else {
 		this.data = data;
 	}
@@ -1387,94 +1392,100 @@
  *
  * @see #getData(String)
  */
-public void setData (String key, Object value) {
+public void setData (char[] key, Object value) {
 	checkWidget();
-	if (key == null) error (SWT.ERROR_NULL_ARGUMENT);
+	if (key is null) error (SWT.ERROR_NULL_ARGUMENT);
 	int index = 1;
 	Object [] table = null;
-	if ((state & KEYED_DATA) != 0) {
-		table = (Object []) data;
-		while (index < table.length) {
-			if (key.equals (table [index])) break;
+	if ((state & KEYED_DATA) !is 0) {
+		auto arr = (cast(ArrayWrapperString2) data).array;
+        ArrayWrapperString[] strtable;
+        foreach( str; arr ){
+            strtable ~= new ArrayWrapperString( str );
+        }
+		while (index < strtable.length) {
+			if (key ==/*eq*/ strtable [index].array ) break;
 			index += 2;
 		}
+        table = cast(Object[])strtable;
 	}
-	if (value != null) {
-		if ((state & KEYED_DATA) != 0) {
-			if (index == table.length) {
+	if (value !is null) {
+		if ((state & KEYED_DATA) !is 0) {
+			if (index is table.length) {
 				Object [] newTable = new Object [table.length + 2];
 				System.arraycopy (table, 0, newTable, 0, table.length);
-				data = table = newTable;
+                table = newTable;
+                data = new ArrayWrapperObject( table );
 			}
 		} else {
 			table = new Object [3];
 			table [0] = data;
-			data = table;
+            data = new ArrayWrapperObject( table );
 			state |= KEYED_DATA;
 		}
-		table [index] = key;
+		table [index] = new ArrayWrapperString( key );
 		table [index + 1] = value;
 	} else {
-		if ((state & KEYED_DATA) != 0) {
-			if (index != table.length) {
-				int length = table.length - 2;
-				if (length == 1) {
+		if ((state & KEYED_DATA) !is 0) {
+			if (index !is table.length) {
+				int len = table.length - 2;
+				if (len is 1) {
 					data = table [0];
 					state &= ~KEYED_DATA;
 				} else {
-					Object [] newTable = new Object [length];
+					Object [] newTable = new Object [len];
 					System.arraycopy (table, 0, newTable, 0, index);
-					System.arraycopy (table, index + 2, newTable, index, length - index);
-					data = newTable;
+					System.arraycopy (table, index + 2, newTable, index, len - index);
+					data = new ArrayWrapperObject( newTable );
 				}
 			}
 		}
 	}
 }
 
-void setForegroundColor (int /*long*/ handle, GdkColor color) {
-	int /*long*/ style = OS.gtk_widget_get_modifier_style (handle);
+void setForegroundColor (GtkWidget* handle, GdkColor* color) {
+    auto style = OS.gtk_widget_get_modifier_style (handle);
 	OS.gtk_rc_style_set_fg (style, OS.GTK_STATE_NORMAL, color);
 	OS.gtk_rc_style_set_fg (style, OS.GTK_STATE_ACTIVE, color);
 	OS.gtk_rc_style_set_fg (style, OS.GTK_STATE_PRELIGHT, color);
 	int flags = OS.gtk_rc_style_get_color_flags (style, OS.GTK_STATE_NORMAL);
-	flags = (color == null) ? flags & ~OS.GTK_RC_FG: flags | OS.GTK_RC_FG;
+	flags = (color is null) ? flags & ~OS.GTK_RC_FG: flags | OS.GTK_RC_FG;
 	OS.gtk_rc_style_set_color_flags (style, OS.GTK_STATE_NORMAL, flags);
 	flags = OS.gtk_rc_style_get_color_flags (style, OS.GTK_STATE_ACTIVE);
-	flags = (color == null) ? flags & ~OS.GTK_RC_FG: flags | OS.GTK_RC_FG;
+	flags = (color is null) ? flags & ~OS.GTK_RC_FG: flags | OS.GTK_RC_FG;
 	OS.gtk_rc_style_set_color_flags (style, OS.GTK_STATE_ACTIVE, flags);
 	flags = OS.gtk_rc_style_get_color_flags (style, OS.GTK_STATE_PRELIGHT);
-	flags = (color == null) ? flags & ~OS.GTK_RC_FG: flags | OS.GTK_RC_FG;
+	flags = (color is null) ? flags & ~OS.GTK_RC_FG: flags | OS.GTK_RC_FG;
 	OS.gtk_rc_style_set_color_flags (style, OS.GTK_STATE_PRELIGHT, flags);
 
 	OS.gtk_rc_style_set_text (style, OS.GTK_STATE_NORMAL, color);
 	OS.gtk_rc_style_set_text (style, OS.GTK_STATE_ACTIVE, color);
 	OS.gtk_rc_style_set_text (style, OS.GTK_STATE_PRELIGHT, color);
 	flags = OS.gtk_rc_style_get_color_flags (style, OS.GTK_STATE_NORMAL);
-	flags = (color == null) ? flags & ~OS.GTK_RC_TEXT: flags | OS.GTK_RC_TEXT;
+	flags = (color is null) ? flags & ~OS.GTK_RC_TEXT: flags | OS.GTK_RC_TEXT;
 	OS.gtk_rc_style_set_color_flags (style, OS.GTK_STATE_NORMAL, flags);
 	flags = OS.gtk_rc_style_get_color_flags (style, OS.GTK_STATE_PRELIGHT);
-	flags = (color == null) ? flags & ~OS.GTK_RC_TEXT: flags | OS.GTK_RC_TEXT;
+	flags = (color is null) ? flags & ~OS.GTK_RC_TEXT: flags | OS.GTK_RC_TEXT;
 	OS.gtk_rc_style_set_color_flags (style, OS.GTK_STATE_PRELIGHT, flags);
 	flags = OS.gtk_rc_style_get_color_flags (style, OS.GTK_STATE_ACTIVE);
-	flags = (color == null) ? flags & ~OS.GTK_RC_TEXT: flags | OS.GTK_RC_TEXT;
+	flags = (color is null) ? flags & ~OS.GTK_RC_TEXT: flags | OS.GTK_RC_TEXT;
 	OS.gtk_rc_style_set_color_flags (style, OS.GTK_STATE_ACTIVE, flags);
 	OS.gtk_widget_modify_style (handle, style);
 }
 
-boolean setInputState (Event event, int state) {
-	if ((state & OS.GDK_MOD1_MASK) != 0) event.stateMask |= SWT.ALT;
-	if ((state & OS.GDK_SHIFT_MASK) != 0) event.stateMask |= SWT.SHIFT;
-	if ((state & OS.GDK_CONTROL_MASK) != 0) event.stateMask |= SWT.CONTROL;
-	if ((state & OS.GDK_BUTTON1_MASK) != 0) event.stateMask |= SWT.BUTTON1;
-	if ((state & OS.GDK_BUTTON2_MASK) != 0) event.stateMask |= SWT.BUTTON2;
-	if ((state & OS.GDK_BUTTON3_MASK) != 0) event.stateMask |= SWT.BUTTON3;
+bool setInputState (Event event, int state) {
+	if ((state & OS.GDK_MOD1_MASK) !is 0) event.stateMask |= SWT.ALT;
+	if ((state & OS.GDK_SHIFT_MASK) !is 0) event.stateMask |= SWT.SHIFT;
+	if ((state & OS.GDK_CONTROL_MASK) !is 0) event.stateMask |= SWT.CONTROL;
+	if ((state & OS.GDK_BUTTON1_MASK) !is 0) event.stateMask |= SWT.BUTTON1;
+	if ((state & OS.GDK_BUTTON2_MASK) !is 0) event.stateMask |= SWT.BUTTON2;
+	if ((state & OS.GDK_BUTTON3_MASK) !is 0) event.stateMask |= SWT.BUTTON3;
 	return true;
 }
 
-boolean setKeyState (Event event, GdkEventKey keyEvent) {
-	if (keyEvent.string != 0 && OS.g_utf8_strlen (keyEvent.string, keyEvent.length) > 1) return false;
-	boolean isNull = false;
+bool setKeyState (Event event, GdkEventKey* keyEvent) {
+	if (keyEvent.str !is null && OS.g_utf8_strlen (keyEvent.str, keyEvent.length) > 1) return false;
+	bool isNull = false;
 	event.keyCode = Display.translateKey (keyEvent.keyval);
 	switch (keyEvent.keyval) {
 		case OS.GDK_BackSpace:		event.character = SWT.BS; break;
@@ -1487,24 +1498,26 @@
 		case OS.GDK_Tab:
 		case OS.GDK_ISO_Left_Tab: 	event.character = SWT.TAB; break;
 		default: {
-			if (event.keyCode == 0) {
-				int [] keyval = new int [1], effective_group= new int [1], level = new int [1], consumed_modifiers = new int [1];
-				if (OS.gdk_keymap_translate_keyboard_state(OS.gdk_keymap_get_default (), keyEvent.hardware_keycode, 0, keyEvent.group, keyval, effective_group, level, consumed_modifiers)) {
-					event.keyCode = OS.gdk_keyval_to_unicode (keyval [0]);
+			if (event.keyCode is 0) {
+				uint keyval;
+                int effective_group, level;
+                GdkModifierType consumed_modifiers;
+				if (OS.gdk_keymap_translate_keyboard_state(OS.gdk_keymap_get_default (), keyEvent.hardware_keycode, cast(GdkModifierType)0, keyEvent.group, &keyval, &effective_group, &level, &consumed_modifiers)) {
+					event.keyCode = OS.gdk_keyval_to_unicode (keyval );
 				}
 			}
 			int key = keyEvent.keyval;
-			if ((keyEvent.state & OS.GDK_CONTROL_MASK) != 0 && (0 <= key && key <= 0x7F)) {
+			if ((keyEvent.state & OS.GDK_CONTROL_MASK) !is 0 && (0 <= key && key <= 0x7F)) {
 				if ('a'  <= key && key <= 'z') key -= 'a' - 'A';
 				if (64 <= key && key <= 95) key -= 64;
-				event.character = (char) key;
-				isNull = keyEvent.keyval == '@' && key == 0;
+				event.character = cast(char) key;
+				isNull = keyEvent.keyval is '@' && key is 0;
 			} else {
-				event.character = (char) OS.gdk_keyval_to_unicode (key);
+				event.character = cast(char) OS.gdk_keyval_to_unicode (key);
 			}
 		}
 	}
-	if (event.keyCode == 0 && event.character == 0) {
+	if (event.keyCode is 0 && event.character is 0) {
 		if (!isNull) return false;
 	}
 	return setInputState (event, keyEvent.state);
@@ -1531,20 +1544,20 @@
  *
  * @return a string representation of the receiver
  */
-public String toString () {
-	String string = "*Disposed*";
+public char[] toString () {
+	char[] str = "*Disposed*";
 	if (!isDisposed ()) {
-		string = "*Wrong Thread*";
-		if (isValidThread ()) string = getNameText ();
+		str = "*Wrong Thread*";
+		if (isValidThread ()) str = getNameText ();
 	}
-	return getName () + " {" + string + "}";
+	return getName () ~ " {" ~ str ~ "}";
 }
 
-int /*long*/ topHandle () {
+GtkWidget* topHandle () {
 	return handle;
 }
 
-int /*long*/ timerProc (int /*long*/ widget) {
+int /*long*/ timerProc (GtkWidget* widget) {
 	return 0;
 }
 
@@ -1552,12 +1565,12 @@
 	return 0;
 }
 
-boolean translateTraversal (int event) {
+bool translateTraversal (int event) {
 	return false;
 }
 
-int /*long*/ windowProc (int /*long*/ handle, int /*long*/ user_data) {
-	switch ((int)/*64*/user_data) {
+int /*long*/ windowProc (GtkWidget* handle, int /*long*/ user_data) {
+	switch (cast(int)/*64*/user_data) {
 		case ACTIVATE: return gtk_activate (handle);
 		case CHANGED: return gtk_changed (handle);
 		case CLICKED: return gtk_clicked (handle);
@@ -1570,24 +1583,24 @@
 		case POPUP_MENU: return gtk_popup_menu (handle);
 		case PREEDIT_CHANGED: return gtk_preedit_changed (handle);
 		case REALIZE: return gtk_realize (handle);
-		case SELECT: return gtk_select (handle);
+		case SELECT: return gtk_select (cast(int)handle);
 		case SHOW: return gtk_show (handle);
-		case VALUE_CHANGED: return gtk_value_changed (handle);
+		case VALUE_CHANGED: return gtk_value_changed (cast(int)handle);
 		case UNMAP: return gtk_unmap (handle);
 		case UNREALIZE: return gtk_unrealize (handle);
 		default: return 0;
 	}
 }
 
-int /*long*/ windowProc (int /*long*/ handle, int /*long*/ arg0, int /*long*/ user_data) {
-	switch ((int)/*64*/user_data) {
+int /*long*/ windowProc (GtkWidget* handle, int /*long*/ arg0, int /*long*/ user_data) {
+	switch (cast(int)/*64*/user_data) {
 		case EXPOSE_EVENT_INVERSE: {
-			GdkEventExpose gdkEvent = new GdkEventExpose ();
-			OS.memmove (gdkEvent, arg0, GdkEventExpose.sizeof);
-			int /*long*/ paintWindow = paintWindow();
-			int /*long*/ window = gdkEvent.window;
-			if (window != paintWindow) return 0;
-			return (state & OBSCURED) != 0 ? 1 : 0;
+			GdkEventExpose* gdkEvent = new GdkEventExpose ();
+			memmove (gdkEvent, cast(void*)arg0, GdkEventExpose.sizeof);
+			auto paintWindow = paintWindow();
+			auto window = gdkEvent.window;
+			if (window !is paintWindow) return 0;
+			return (state & OBSCURED) !is 0 ? 1 : 0;
 		}
 		case BUTTON_PRESS_EVENT_INVERSE:
 		case BUTTON_RELEASE_EVENT_INVERSE:
@@ -1596,7 +1609,7 @@
 		}
 		case BUTTON_PRESS_EVENT: return gtk_button_press_event (handle, arg0);
 		case BUTTON_RELEASE_EVENT: return gtk_button_release_event (handle, arg0);
-		case COMMIT: return gtk_commit (handle, arg0);
+		case COMMIT: return gtk_commit (cast(int)handle, arg0);
 		case CONFIGURE_EVENT: return gtk_configure_event (handle, arg0);
 		case DELETE_EVENT: return gtk_delete_event (handle, arg0);
 		case ENTER_NOTIFY_EVENT: return gtk_enter_notify_event (handle, arg0);
@@ -1606,8 +1619,8 @@
 		case FOCUS: return gtk_focus (handle, arg0);
 		case FOCUS_IN_EVENT: return gtk_focus_in_event (handle, arg0);
 		case FOCUS_OUT_EVENT: return gtk_focus_out_event (handle, arg0);
-		case KEY_PRESS_EVENT: return gtk_key_press_event (handle, arg0);
-		case KEY_RELEASE_EVENT: return gtk_key_release_event (handle, arg0);
+		case KEY_PRESS_EVENT: return gtk_key_press_event (handle, cast(GdkEventKey*)arg0);
+		case KEY_RELEASE_EVENT: return gtk_key_release_event (handle, cast(GdkEventKey*)arg0);
 		case INPUT: return gtk_input (handle, arg0);
 		case LEAVE_NOTIFY_EVENT: return gtk_leave_notify_event (handle, arg0);
 		case MAP_EVENT: return gtk_map_event (handle, arg0);
@@ -1618,7 +1631,7 @@
 		case SHOW_HELP: return gtk_show_help (handle, arg0);
 		case SIZE_ALLOCATE: return gtk_size_allocate (handle, arg0);
 		case STYLE_SET: return gtk_style_set (handle, arg0);
-		case TOGGLED: return gtk_toggled (handle, arg0);
+		case TOGGLED: return gtk_toggled (cast(int)handle, arg0);
 		case UNMAP_EVENT: return gtk_unmap_event (handle, arg0);
 		case VISIBILITY_NOTIFY_EVENT: return gtk_visibility_notify_event (handle, arg0);
 		case WINDOW_STATE_EVENT: return gtk_window_state_event (handle, arg0);
@@ -1626,21 +1639,21 @@
 	}
 }
 
-int /*long*/ windowProc (int /*long*/ handle, int /*long*/ arg0, int /*long*/ arg1, int /*long*/ user_data) {
-	switch ((int)/*64*/user_data) {
+int /*long*/ windowProc (GtkWidget* handle, int /*long*/ arg0, int /*long*/ arg1, int /*long*/ user_data) {
+	switch (cast(int)/*64*/user_data) {
 		case DELETE_RANGE: return gtk_delete_range (handle, arg0, arg1);
 		case DELETE_TEXT: return gtk_delete_text (handle, arg0, arg1);
-		case ROW_ACTIVATED: return gtk_row_activated (handle, arg0, arg1);
+		case ROW_ACTIVATED: return gtk_row_activated (cast(int)handle, arg0, arg1);
 		case SCROLL_CHILD: return gtk_scroll_child (handle, arg0, arg1);
 		case SWITCH_PAGE: return gtk_switch_page (handle, arg0, arg1);
-		case TEST_COLLAPSE_ROW: return gtk_test_collapse_row (handle, arg0, arg1);
-		case TEST_EXPAND_ROW: return gtk_test_expand_row(handle, arg0, arg1);
+		case TEST_COLLAPSE_ROW: return gtk_test_collapse_row (cast(int)handle, arg0, arg1);
+		case TEST_EXPAND_ROW: return gtk_test_expand_row(cast(int)handle, arg0, arg1);
 		default: return 0;
 	}
 }
 
-int /*long*/ windowProc (int /*long*/ handle, int /*long*/ arg0, int /*long*/ arg1, int /*long*/ arg2, int /*long*/ user_data) {
-	switch ((int)/*64*/user_data) {
+int /*long*/ windowProc (GtkWidget* handle, int /*long*/ arg0, int /*long*/ arg1, int /*long*/ arg2, int /*long*/ user_data) {
+	switch (cast(int)/*64*/user_data) {
 		case CHANGE_VALUE: return gtk_change_value (handle, arg0, arg1, arg2);
 		case EXPAND_COLLAPSE_CURSOR_ROW: return gtk_expand_collapse_cursor_row (handle, arg0, arg1, arg2);
 		case INSERT_TEXT: return gtk_insert_text (handle, arg0, arg1, arg2);
@@ -1650,4 +1663,3 @@
 }
 
 }
-++/
\ No newline at end of file