39107
diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/gtk/org/eclipse/swt/internal/gtk/OS.java b/bundles/org.eclipse.swt/Eclipse SWT PI/gtk/org/eclipse/swt/internal/gtk/OS.java
index 4153ee7..5793ac9 100644
--- a/bundles/org.eclipse.swt/Eclipse SWT PI/gtk/org/eclipse/swt/internal/gtk/OS.java
+++ b/bundles/org.eclipse.swt/Eclipse SWT PI/gtk/org/eclipse/swt/internal/gtk/OS.java
@@ -240,6 +240,7 @@
 	public static final byte[] event = signal("event");
 	public static final byte[] event_after = signal("event_after");
 	public static final byte[] expose_event = signal("expose_event");
+	public static final byte[] focus = signal("focus");
 	public static final byte[] focus_in_event = signal("focus_in_event");
 	public static final byte[] focus_out_event = signal("focus_out_event");
 	public static final byte[] hide = signal("hide");
diff --git a/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Combo.java b/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Combo.java
index 936365c..2be2396 100644
--- a/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Combo.java
+++ b/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Combo.java
@@ -446,19 +446,20 @@
 		OS.GDK_KEY_PRESS_MASK | OS.GDK_KEY_RELEASE_MASK;
 	int [] handles = new int [] {arrowHandle, entryHandle, listHandle};
 	for (int i=0; i<handles.length; i++) {
-		int handle = handles [i];
-		if (handle != 0) {
-			OS.gtk_widget_add_events (handle, mask);
-			OS.g_signal_connect (handle, OS.popup_menu, windowProc2, POPUP_MENU);
-			OS.g_signal_connect (handle, OS.button_press_event, windowProc3, BUTTON_PRESS_EVENT);
-			OS.g_signal_connect (handle, OS.button_release_event, windowProc3, BUTTON_RELEASE_EVENT);
-			OS.g_signal_connect (handle, OS.motion_notify_event, windowProc3, MOTION_NOTIFY_EVENT);
-			OS.g_signal_connect (handle, OS.key_press_event, windowProc3, KEY_PRESS_EVENT);
-			OS.g_signal_connect (handle, OS.key_release_event, windowProc3, KEY_RELEASE_EVENT);
-			OS.g_signal_connect (handle, OS.show_help, windowProc3, SHOW_HELP);
-			OS.g_signal_connect (handle, OS.focus_in_event, windowProc3, FOCUS_IN_EVENT);
-			OS.g_signal_connect (handle, OS.focus_out_event, windowProc3, FOCUS_OUT_EVENT);
-			OS.g_signal_connect (handle, OS.event_after, windowProc3, EVENT_AFTER);
+		int eventHandle = handles [i];
+		if (eventHandle != 0) {
+			OS.gtk_widget_add_events (eventHandle, mask);
+			OS.g_signal_connect (eventHandle, OS.popup_menu, windowProc2, POPUP_MENU);
+			OS.g_signal_connect (eventHandle, OS.button_press_event, windowProc3, BUTTON_PRESS_EVENT);
+			OS.g_signal_connect (eventHandle, OS.button_release_event, windowProc3, BUTTON_RELEASE_EVENT);
+			OS.g_signal_connect (eventHandle, OS.motion_notify_event, windowProc3, MOTION_NOTIFY_EVENT);
+			OS.g_signal_connect (eventHandle, OS.key_press_event, windowProc3, KEY_PRESS_EVENT);
+			OS.g_signal_connect (eventHandle, OS.key_release_event, windowProc3, KEY_RELEASE_EVENT);
+			OS.g_signal_connect (eventHandle, OS.show_help, windowProc3, SHOW_HELP);
+			OS.g_signal_connect (eventHandle, OS.focus, windowProc3, FOCUS);
+			OS.g_signal_connect (eventHandle, OS.focus_in_event, windowProc3, FOCUS_IN_EVENT);
+			OS.g_signal_connect (eventHandle, OS.focus_out_event, windowProc3, FOCUS_OUT_EVENT);
+			OS.g_signal_connect (eventHandle, OS.event_after, windowProc3, EVENT_AFTER);
 		
 			/*
 			* Feature in GTK.  Events such as mouse move are propagated up
@@ -467,9 +468,9 @@
 			* hook a signal after and stop the propagation using a negative
 			* event number to distinguish this case.
 			*/
-			OS.g_signal_connect_after (handle, OS.button_press_event, windowProc3, -BUTTON_PRESS_EVENT);
-			OS.g_signal_connect_after (handle, OS.button_release_event, windowProc3, -BUTTON_RELEASE_EVENT);
-			OS.g_signal_connect_after (handle, OS.motion_notify_event, windowProc3, -MOTION_NOTIFY_EVENT);
+			OS.g_signal_connect_after (eventHandle, OS.button_press_event, windowProc3, -BUTTON_PRESS_EVENT);
+			OS.g_signal_connect_after (eventHandle, OS.button_release_event, windowProc3, -BUTTON_RELEASE_EVENT);
+			OS.g_signal_connect_after (eventHandle, OS.motion_notify_event, windowProc3, -MOTION_NOTIFY_EVENT);
 		}
 	}
 	int imContext = imContext ();
diff --git a/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Control.java b/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Control.java
index ac769c1..a3abb82 100644
--- a/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Control.java
+++ b/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Control.java
@@ -150,6 +150,7 @@
 	OS.g_signal_connect (eventHandle, OS.motion_notify_event, windowProc3, MOTION_NOTIFY_EVENT);
 	OS.g_signal_connect (eventHandle, OS.key_press_event, windowProc3, KEY_PRESS_EVENT);
 	OS.g_signal_connect (eventHandle, OS.key_release_event, windowProc3, KEY_RELEASE_EVENT);
+	OS.g_signal_connect (eventHandle, OS.focus, windowProc3, FOCUS);
 	OS.g_signal_connect (eventHandle, OS.focus_in_event, windowProc3, FOCUS_IN_EVENT);
 	OS.g_signal_connect (eventHandle, OS.focus_out_event, windowProc3, FOCUS_OUT_EVENT);
 	OS.g_signal_connect (eventHandle, OS.event_after, windowProc3, EVENT_AFTER);
@@ -1658,6 +1659,11 @@
 	return 0;
 }
 
+int gtk_focus (int widget, int event) {
+	/* Stop GTK traversal for every widget */
+	return 1;
+}
+
 int gtk_focus_in_event (int widget, int event) {
 	// widget could be disposed at this point
 	if (handle != 0) {
diff --git a/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Widget.java b/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Widget.java
index 473f53e..9f95050 100644
--- a/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Widget.java
+++ b/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Widget.java
@@ -116,6 +116,7 @@
 	static final int UNMAP_EVENT = 37;
 	static final int UNREALIZE = 38;
 	static final int VALUE_CHANGED = 39;
+	static final int FOCUS = 40;
 
 /**
  * Prevents uninitialized instances from being created outside the package.
@@ -553,6 +554,10 @@
 	return 0;
 }
 
+int gtk_focus (int widget, int event) {
+	return 0;
+}
+
 int gtk_focus_in_event (int widget, int event) {
 	return 0;
 }
@@ -1174,6 +1179,7 @@
 		case EVENT: return gtk_event (handle, arg0);
 		case EVENT_AFTER: return gtk_event_after (handle, arg0);
 		case EXPOSE_EVENT: return gtk_expose_event (handle, arg0);
+		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);