diff --git a/bundles/org.eclipse.swt/Eclipse SWT WebKit/gtk/org/eclipse/swt/browser/WebKit.java b/bundles/org.eclipse.swt/Eclipse SWT WebKit/gtk/org/eclipse/swt/browser/WebKit.java index 7d475d3..bc2d71b 100644 --- a/bundles/org.eclipse.swt/Eclipse SWT WebKit/gtk/org/eclipse/swt/browser/WebKit.java +++ b/bundles/org.eclipse.swt/Eclipse SWT WebKit/gtk/org/eclipse/swt/browser/WebKit.java @@ -1891,13 +1891,23 @@ * You should check 'retObj.swtAsyncTimeout' after making a call to this. */ private static Webkit2AsyncReturnObj execAsyncAndWaitForReturn(Browser browser, Consumer asyncFunc, String additionalErrorInfo) { + class CtxIteration implements Runnable { + boolean eventsDispatched; + + @Override + public void run() { + eventsDispatched = OS.g_main_context_iteration (0, false); + } + } + Webkit2AsyncReturnObj retObj = new Webkit2AsyncReturnObj(); int callbackId = CallBackMap.putObject(retObj); asyncFunc.accept(callbackId); Display display = browser.getDisplay(); final Instant timeOut = Instant.now().plusMillis(ASYNC_EXEC_TIMEOUT_MS); while (!browser.isDisposed()) { - boolean eventsDispatched = OS.g_main_context_iteration (0, false); + CtxIteration ctxIteration = new CtxIteration(); + display.asyncExec(ctxIteration); if (retObj.callbackFinished) break; else if (Instant.now().isAfter(timeOut)) { @@ -1916,7 +1926,7 @@ retObj.swtAsyncTimeout = true; break; } - else if (!eventsDispatched) + else if (!ctxIteration.eventsDispatched) display.sleep(); } CallBackMap.removeObject(callbackId);