Bug 449546 - [responsiveness] No error logged when UI froze during
opening type hierarchy on java.lang.Object on Mac

This change adds a reference to the original event to PreEvent and
PostEvent. UI Responsiveness Monitoring will use this reference to do
additional filtering.

Change-Id: Ie3d27a9f4a0859aceefe719551445969d90c32e3
Signed-off-by: Sergey Prigogin <eclipse.sprigogin@gmail.com>
diff --git a/bundles/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/Display.java b/bundles/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/Display.java
index 744f498..5510ab5 100644
--- a/bundles/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/Display.java
+++ b/bundles/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/Display.java
@@ -4196,22 +4196,26 @@
 	}
 }
 
-void sendPreEvent (Event event) {
-	if (event == null || (event.type != SWT.PreEvent && event.type != SWT.PostEvent
-			&& event.type != SWT.PreExternalEventDispatch
-			&& event.type != SWT.PostExternalEventDispatch)) {
-		if (this.eventTable != null && this.eventTable.hooks (SWT.PreEvent)) {
-			sendEvent (SWT.PreEvent, null);
+void sendPreEvent (Event original) {
+	if (original != null && original.type != SWT.PreEvent && original.type != SWT.PostEvent
+			&& original.type != SWT.PreExternalEventDispatch
+			&& original.type != SWT.PostExternalEventDispatch) {
+		if (eventTable != null && eventTable.hooks (SWT.PreEvent)) {
+			Event event = new Event ();
+			event.data = original;
+			sendEvent (SWT.PreEvent, event);
 		}
 	}
 }
 
-void sendPostEvent (Event event) {
-	if (event == null || (event.type != SWT.PreEvent && event.type != SWT.PostEvent
-			&& event.type != SWT.PreExternalEventDispatch
-			&& event.type != SWT.PostExternalEventDispatch)) {
-		if (this.eventTable != null && this.eventTable.hooks (SWT.PostEvent)) {
-			sendEvent (SWT.PostEvent, null);
+void sendPostEvent (Event original) {
+	if (original != null && original.type != SWT.PreEvent && original.type != SWT.PostEvent
+			&& original.type != SWT.PreExternalEventDispatch
+			&& original.type != SWT.PostExternalEventDispatch) {
+		if (eventTable != null && eventTable.hooks (SWT.PostEvent)) {
+			Event event = new Event ();
+			event.data = original;
+			sendEvent (SWT.PostEvent, event);
 		}
 	}
 }
@@ -4222,7 +4226,7 @@
  * @noreference This method is not intended to be referenced by clients.
  */
 public void sendPreExternalEventDispatchEvent () {
-	if (this.eventTable != null && this.eventTable.hooks (SWT.PreExternalEventDispatch)) {
+	if (eventTable != null && eventTable.hooks (SWT.PreExternalEventDispatch)) {
 		sendEvent (SWT.PreExternalEventDispatch, null);
 	}
 }
@@ -4233,7 +4237,7 @@
  * @noreference This method is not intended to be referenced by clients.
  */
 public void sendPostExternalEventDispatchEvent () {
-	if (this.eventTable != null && this.eventTable.hooks (SWT.PostExternalEventDispatch)) {
+	if (eventTable != null && eventTable.hooks (SWT.PostExternalEventDispatch)) {
 		sendEvent (SWT.PostExternalEventDispatch, null);
 	}
 }
diff --git a/bundles/org.eclipse.swt/Eclipse SWT/common/org/eclipse/swt/SWT.java b/bundles/org.eclipse.swt/Eclipse SWT/common/org/eclipse/swt/SWT.java
index d196bec..9b66ddb 100644
--- a/bundles/org.eclipse.swt/Eclipse SWT/common/org/eclipse/swt/SWT.java
+++ b/bundles/org.eclipse.swt/Eclipse SWT/common/org/eclipse/swt/SWT.java
@@ -775,7 +775,11 @@
 	 * The PreEvent event type (value is 50).
 	 *
 	 * <p>
-	 * This event is sent before an event other than {@link #Sleep} or {@link #Wakeup} is dispatched.
+	 * This event is sent before an event other than {@link #PreExternalEventDispatch} or
+	 * {@link #PostExternalEventDispatch} is dispatched.
+	 * </p>
+	 * <p>
+	 * The data field of the event contains a reference to the following event.
 	 * </p>
 	 *
 	 * @since 3.103
@@ -786,7 +790,11 @@
 	 * The PostEvent event type (value is 51).
 	 *
 	 * <p>
-	 * This event is sent after an event other than {@link #Sleep} or {@link #Wakeup} is dispatched.
+	 * This event is sent after an event other than {@link #PreExternalEventDispatch} or
+	 * {@link #PostExternalEventDispatch} is dispatched.
+	 * </p>
+	 * <p>
+	 * The data field of the event contains a reference to the prior event.
 	 * </p>
 	 *
 	 * @since 3.103
diff --git a/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Display.java b/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Display.java
index 7315e4e..0751b11 100644
--- a/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Display.java
+++ b/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Display.java
@@ -4467,22 +4467,26 @@
 	}
 }
 
-void sendPreEvent (Event event) {
-	if (event == null || (event.type != SWT.PreEvent && event.type != SWT.PostEvent
-			&& event.type != SWT.PreExternalEventDispatch
-			&& event.type != SWT.PostExternalEventDispatch)) {
-		if (this.eventTable != null && this.eventTable.hooks (SWT.PreEvent)) {
-			sendEvent (SWT.PreEvent, null);
+void sendPreEvent (Event original) {
+	if (original != null && original.type != SWT.PreEvent && original.type != SWT.PostEvent
+			&& original.type != SWT.PreExternalEventDispatch
+			&& original.type != SWT.PostExternalEventDispatch) {
+		if (eventTable != null && eventTable.hooks (SWT.PreEvent)) {
+			Event event = new Event ();
+			event.data = original;
+			sendEvent (SWT.PreEvent, event);
 		}
 	}
 }
 
-void sendPostEvent (Event event) {
-	if (event == null || (event.type != SWT.PreEvent && event.type != SWT.PostEvent
-			&& event.type != SWT.PreExternalEventDispatch
-			&& event.type != SWT.PostExternalEventDispatch)) {
-		if (this.eventTable != null && this.eventTable.hooks (SWT.PostEvent)) {
-			sendEvent (SWT.PostEvent, null);
+void sendPostEvent (Event original) {
+	if (original != null && original.type != SWT.PreEvent && original.type != SWT.PostEvent
+			&& original.type != SWT.PreExternalEventDispatch
+			&& original.type != SWT.PostExternalEventDispatch) {
+		if (eventTable != null && eventTable.hooks (SWT.PostEvent)) {
+			Event event = new Event ();
+			event.data = original;
+			sendEvent (SWT.PostEvent, event);
 		}
 	}
 }
@@ -4493,7 +4497,7 @@
  * @noreference This method is not intended to be referenced by clients.
  */
 public void sendPreExternalEventDispatchEvent () {
-	if (this.eventTable != null && this.eventTable.hooks (SWT.PreExternalEventDispatch)) {
+	if (eventTable != null && eventTable.hooks (SWT.PreExternalEventDispatch)) {
 		sendEvent (SWT.PreExternalEventDispatch, null);
 	}
 }
@@ -4504,7 +4508,7 @@
  * @noreference This method is not intended to be referenced by clients.
  */
 public void sendPostExternalEventDispatchEvent () {
-	if (this.eventTable != null && this.eventTable.hooks (SWT.PostExternalEventDispatch)) {
+	if (eventTable != null && eventTable.hooks (SWT.PostExternalEventDispatch)) {
 		sendEvent (SWT.PostExternalEventDispatch, null);
 	}
 }
diff --git a/bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/widgets/Display.java b/bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/widgets/Display.java
index f2609e2..278f17b 100644
--- a/bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/widgets/Display.java
+++ b/bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/widgets/Display.java
@@ -4356,33 +4356,38 @@
 	}
 }
 
-void sendPreEvent (Event event) {
-	if (event == null || (event.type != SWT.PreEvent && event.type != SWT.PostEvent
-			&& event.type != SWT.PreExternalEventDispatch
-			&& event.type != SWT.PostExternalEventDispatch)) {
-		if (this.eventTable != null && this.eventTable.hooks (SWT.PreEvent)) {
-			sendEvent (SWT.PreEvent, null);
+void sendPreEvent (Event original) {
+	if (original != null && original.type != SWT.PreEvent && original.type != SWT.PostEvent
+			&& original.type != SWT.PreExternalEventDispatch
+			&& original.type != SWT.PostExternalEventDispatch) {
+		if (eventTable != null && eventTable.hooks (SWT.PreEvent)) {
+			Event event = new Event ();
+			event.data = original;
+			sendEvent (SWT.PreEvent, event);
 		}
 	}
 }
 
-void sendPostEvent (Event event) {
-	if (event == null || (event.type != SWT.PreEvent && event.type != SWT.PostEvent
-			&& event.type != SWT.PreExternalEventDispatch
-			&& event.type != SWT.PostExternalEventDispatch)) {
-		if (this.eventTable != null && this.eventTable.hooks (SWT.PostEvent)) {
-			sendEvent (SWT.PostEvent, null);
+void sendPostEvent (Event original) {
+	if (original != null && original.type != SWT.PreEvent && original.type != SWT.PostEvent
+			&& original.type != SWT.PreExternalEventDispatch
+			&& original.type != SWT.PostExternalEventDispatch) {
+		if (eventTable != null && eventTable.hooks (SWT.PostEvent)) {
+			Event event = new Event ();
+			event.data = original;
+			sendEvent (SWT.PostEvent, event);
 		}
 	}
 }
 
+
 /**
  * Sends a SWT.PreExternalEventDispatch event.
  *
  * @noreference This method is not intended to be referenced by clients.
  */
 public void sendPreExternalEventDispatchEvent () {
-	if (this.eventTable != null && this.eventTable.hooks (SWT.PreExternalEventDispatch)) {
+	if (eventTable != null && eventTable.hooks (SWT.PreExternalEventDispatch)) {
 		sendEvent (SWT.PreExternalEventDispatch, null);
 	}
 }
@@ -4393,7 +4398,7 @@
  * @noreference This method is not intended to be referenced by clients.
  */
 public void sendPostExternalEventDispatchEvent () {
-	if (this.eventTable != null && this.eventTable.hooks (SWT.PostExternalEventDispatch)) {
+	if (eventTable != null && eventTable.hooks (SWT.PostExternalEventDispatch)) {
 		sendEvent (SWT.PostExternalEventDispatch, null);
 	}
 }