82837
diff --git a/bundles/org.eclipse.swt/Eclipse SWT AWT/win32/org/eclipse/swt/awt/SWT_AWT.java b/bundles/org.eclipse.swt/Eclipse SWT AWT/win32/org/eclipse/swt/awt/SWT_AWT.java
index 54345ac..94d3996 100644
--- a/bundles/org.eclipse.swt/Eclipse SWT AWT/win32/org/eclipse/swt/awt/SWT_AWT.java
+++ b/bundles/org.eclipse.swt/Eclipse SWT AWT/win32/org/eclipse/swt/awt/SWT_AWT.java
@@ -49,13 +49,46 @@
 	 */
 	public static String embeddedFrameClass;
 
-	static final boolean JDK1_3;
+	static final int JAVA_VERSION;
 	static boolean loaded, swingInitialized;
 	static Object menuSelectionManager;
 	static Method clearSelectionPath;
 
 static {
-	JDK1_3 = "1.3".equals(System.getProperty("java.specification.version"));
+	JAVA_VERSION = parseVersion(System.getProperty("java.version"));
+}
+
+static int parseVersion(String version) {
+	if (version == null) return 0;
+	int major = 0, minor = 0, micro = 0;
+	int length = version.length(), index = 0, start = 0;
+	while (index < length && Character.isDigit(version.charAt(index))) index++;
+	try {
+		if (start < length) major = Integer.parseInt(version.substring(start, index));
+	} catch (Exception e) {}
+	start = ++index;
+	while (index < length && Character.isDigit(version.charAt(index))) index++;
+	try {
+		if (start < length) minor = Integer.parseInt(version.substring(start, index));
+	} catch (Exception e) {}
+	start = ++index;
+	while (index < length && Character.isDigit(version.charAt(index))) index++;
+	try {
+		if (start < length) micro = Integer.parseInt(version.substring(start, index));
+	} catch (Exception e) {}
+	return JAVA_VERSION(major, minor, micro);
+}
+
+/**
+ * Returns the Java version number as an integer.
+ * 
+ * @param major
+ * @param minor
+ * @param micro
+ * @return the version
+ */
+static int JAVA_VERSION (int major, int minor, int micro) {
+	return (major << 16) + (minor << 8) + micro;
 }
 
 static native final int getAWTHandle (Canvas canvas);
@@ -165,7 +198,7 @@
 		public void handleEvent (Event e) {
 			EventQueue.invokeLater(new Runnable () {
 				public void run () {
-					if (JDK1_3) {
+					if (JAVA_VERSION < JAVA_VERSION(1, 4, 0)) {
 						frame.dispatchEvent (new WindowEvent (frame, WindowEvent.WINDOW_ACTIVATED));
 						frame.dispatchEvent (new FocusEvent (frame, FocusEvent.FOCUS_GAINED));
 					} else {
@@ -180,17 +213,19 @@
 		public void handleEvent (Event e) {
 			EventQueue.invokeLater(new Runnable () {
 				public void run () {
-					if (JDK1_3) {
+					if (JAVA_VERSION < JAVA_VERSION(1, 4, 0)) {
 						frame.dispatchEvent (new WindowEvent (frame, WindowEvent.WINDOW_DEACTIVATED));
 						frame.dispatchEvent (new FocusEvent (frame, FocusEvent.FOCUS_LOST));
 					} else {
 						frame.dispatchEvent (new WindowEvent (frame, WindowEvent.WINDOW_LOST_FOCUS));
 						frame.dispatchEvent (new WindowEvent (frame, WindowEvent.WINDOW_DEACTIVATED));
 					}
-					if (menuSelectionManager != null && clearSelectionPath != null) {
-						try {
-							clearSelectionPath.invoke(menuSelectionManager, new Object[0]);
-						} catch (Throwable e) {}
+					if (JAVA_VERSION >= JAVA_VERSION(1, 4, 2)) {
+						if (menuSelectionManager != null && clearSelectionPath != null) {
+							try {
+								clearSelectionPath.invoke(menuSelectionManager, new Object[0]);
+							} catch (Throwable e) {}
+						}
 					}
 				}
 			});