Bug 379590 - Run event loop while Tracker is up
diff --git a/bundles/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/Tracker.java b/bundles/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/Tracker.java
index adc11d4..99e0e40 100644
--- a/bundles/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/Tracker.java
+++ b/bundles/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/Tracker.java
@@ -840,6 +840,9 @@
while (tracking && !cancelled) {
display.addPool();
try {
+ if (parent != null && parent.isDisposed ()) break;
+ display.runSkin ();
+ display.runDeferredLayouts ();
NSEvent event = application.nextEventMatchingMask(0, NSDate.distantFuture(), OS.NSDefaultRunLoopMode, true);
if (event == null) continue;
int type = (int)/*64*/event.type();
@@ -884,6 +887,7 @@
clientCursor.handle.set();
display.lockCursor = true;
}
+ display.runAsyncMessages (false);
} finally {
display.removePool();
}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Tracker.java b/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Tracker.java
index 812ce78..099cbf0 100644
--- a/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Tracker.java
+++ b/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Tracker.java
@@ -709,14 +709,18 @@
/* Tracker behaves like a Dialog with its own OS event loop. */
GdkEvent gdkEvent = new GdkEvent();
+ Display display = this.display;
while (tracking) {
if (parent != null && parent.isDisposed ()) break;
int /*long*/ eventPtr;
while (true) {
+ display.runSkin ();
+ display.runDeferredLayouts ();
eventPtr = OS.gdk_event_get ();
if (eventPtr != 0) {
break;
} else {
+ display.runAsyncMessages (false);
try { Thread.sleep(50); } catch (Exception ex) {}
}
}
@@ -744,6 +748,7 @@
OS.gtk_main_do_event (eventPtr);
}
OS.gdk_event_free (eventPtr);
+ display.runAsyncMessages (false);
}
if (!isDisposed ()) {
update ();
diff --git a/bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/widgets/Tracker.java b/bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/widgets/Tracker.java
index b660abb..a181d6e 100644
--- a/bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/widgets/Tracker.java
+++ b/bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/widgets/Tracker.java
@@ -606,13 +606,13 @@
drawRectangles (rectangles, stippled);
}
}
+ display.runAsyncMessages (false);
}
if (mouseDown) OS.ReleaseCapture ();
if (!isDisposed()) {
update ();
drawRectangles (rectangles, stippled);
}
- display.runAsyncMessages (false);
} finally {
/*
* Cleanup: If a transparent window was created in order to capture events then