diff options
author | Sergey Prigogin | 2014-11-13 02:10:38 +0000 |
---|---|---|
committer | Arun Thondapu | 2014-11-17 11:15:12 +0000 |
commit | b8ad17c3d19acc6d7f92ed55bd627bbaa4689df8 (patch) | |
tree | 814d1637652718077e184bdd74b41b1667896154 /bundles | |
parent | ed65caa7f1247cbecd964f259a75226c151b3910 (diff) | |
download | eclipse.platform.swt-b8ad17c3d19acc6d7f92ed55bd627bbaa4689df8.tar.gz eclipse.platform.swt-b8ad17c3d19acc6d7f92ed55bd627bbaa4689df8.tar.xz eclipse.platform.swt-b8ad17c3d19acc6d7f92ed55bd627bbaa4689df8.zip |
Bug 449546 - [responsiveness] No error logged when UI froze during
opening type hierarchy on java.lang.Object on Mac
My previous approach to event filtering turned out to be unreliable
since the original event type is not guaranteed to be preserved after
the event is processed. The new approach is to make the type of the
original event available in the "detail" field of the pre and post
events.
Change-Id: Ia592a754d97bb4654ad71d88a9ad48714e45be7c
Signed-off-by: Sergey Prigogin <eclipse.sprigogin@gmail.com>
Diffstat (limited to 'bundles')
4 files changed, 41 insertions, 39 deletions
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 5510ab5fbb..154b773ba2 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 @@ -4183,11 +4183,12 @@ void sendEvent (EventTable table, Event event) { sendEventCount++; if (!filterEvent (event)) { if (table != null) { - sendPreEvent (event); + int type = event.type; + sendPreEvent (type); try { table.sendEvent (event); } finally { - sendPostEvent (event); + sendPostEvent (type); } } } @@ -4196,25 +4197,25 @@ void sendEvent (EventTable table, Event event) { } } -void sendPreEvent (Event original) { - if (original != null && original.type != SWT.PreEvent && original.type != SWT.PostEvent - && original.type != SWT.PreExternalEventDispatch - && original.type != SWT.PostExternalEventDispatch) { +void sendPreEvent (int eventType) { + if (eventType != SWT.PreEvent && eventType != SWT.PostEvent + && eventType != SWT.PreExternalEventDispatch + && eventType != SWT.PostExternalEventDispatch) { if (eventTable != null && eventTable.hooks (SWT.PreEvent)) { Event event = new Event (); - event.data = original; + event.detail = eventType; sendEvent (SWT.PreEvent, event); } } } -void sendPostEvent (Event original) { - if (original != null && original.type != SWT.PreEvent && original.type != SWT.PostEvent - && original.type != SWT.PreExternalEventDispatch - && original.type != SWT.PostExternalEventDispatch) { +void sendPostEvent (int eventType) { + if (eventType != SWT.PreEvent && eventType != SWT.PostEvent + && eventType != SWT.PreExternalEventDispatch + && eventType != SWT.PostExternalEventDispatch) { if (eventTable != null && eventTable.hooks (SWT.PostEvent)) { Event event = new Event (); - event.data = original; + event.detail = eventType; sendEvent (SWT.PostEvent, event); } } 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 9b66ddb1eb..493590de58 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 @@ -779,7 +779,7 @@ public class SWT { * {@link #PostExternalEventDispatch} is dispatched. * </p> * <p> - * The data field of the event contains a reference to the following event. + * The detail field of the event contains the type of the following event. * </p> * * @since 3.103 @@ -794,7 +794,7 @@ public class SWT { * {@link #PostExternalEventDispatch} is dispatched. * </p> * <p> - * The data field of the event contains a reference to the prior event. + * The detail field of the event contains the type of 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 0751b112d6..112554bdcd 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 @@ -4459,33 +4459,34 @@ void sendEvent (int eventType, Event event) { } void sendEvent (EventTable eventTable, Event event) { - sendPreEvent (event); + int type = event.type; + sendPreEvent (type); try { eventTable.sendEvent (event); } finally { - sendPostEvent (event); + sendPostEvent (type); } } -void sendPreEvent (Event original) { - if (original != null && original.type != SWT.PreEvent && original.type != SWT.PostEvent - && original.type != SWT.PreExternalEventDispatch - && original.type != SWT.PostExternalEventDispatch) { +void sendPreEvent (int eventType) { + if (eventType != SWT.PreEvent && eventType != SWT.PostEvent + && eventType != SWT.PreExternalEventDispatch + && eventType != SWT.PostExternalEventDispatch) { if (eventTable != null && eventTable.hooks (SWT.PreEvent)) { Event event = new Event (); - event.data = original; + event.detail = eventType; sendEvent (SWT.PreEvent, event); } } } -void sendPostEvent (Event original) { - if (original != null && original.type != SWT.PreEvent && original.type != SWT.PostEvent - && original.type != SWT.PreExternalEventDispatch - && original.type != SWT.PostExternalEventDispatch) { +void sendPostEvent (int eventType) { + if (eventType != SWT.PreEvent && eventType != SWT.PostEvent + && eventType != SWT.PreExternalEventDispatch + && eventType != SWT.PostExternalEventDispatch) { if (eventTable != null && eventTable.hooks (SWT.PostEvent)) { Event event = new Event (); - event.data = original; + event.detail = eventType; sendEvent (SWT.PostEvent, event); } } 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 278f17b6fb..d02ea09742 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 @@ -4348,39 +4348,39 @@ void sendEvent (int eventType, Event event) { } void sendEvent (EventTable eventTable, Event event) { - sendPreEvent (event); + int type = event.type; + sendPreEvent (type); try { eventTable.sendEvent (event); } finally { - sendPostEvent (event); + sendPostEvent (type); } } -void sendPreEvent (Event original) { - if (original != null && original.type != SWT.PreEvent && original.type != SWT.PostEvent - && original.type != SWT.PreExternalEventDispatch - && original.type != SWT.PostExternalEventDispatch) { +void sendPreEvent (int eventType) { + if (eventType != SWT.PreEvent && eventType != SWT.PostEvent + && eventType != SWT.PreExternalEventDispatch + && eventType != SWT.PostExternalEventDispatch) { if (eventTable != null && eventTable.hooks (SWT.PreEvent)) { Event event = new Event (); - event.data = original; + event.detail = eventType; sendEvent (SWT.PreEvent, event); } } } -void sendPostEvent (Event original) { - if (original != null && original.type != SWT.PreEvent && original.type != SWT.PostEvent - && original.type != SWT.PreExternalEventDispatch - && original.type != SWT.PostExternalEventDispatch) { +void sendPostEvent (int eventType) { + if (eventType != SWT.PreEvent && eventType != SWT.PostEvent + && eventType != SWT.PreExternalEventDispatch + && eventType != SWT.PostExternalEventDispatch) { if (eventTable != null && eventTable.hooks (SWT.PostEvent)) { Event event = new Event (); - event.data = original; + event.detail = eventType; sendEvent (SWT.PostEvent, event); } } } - /** * Sends a SWT.PreExternalEventDispatch event. * |