if doWhenFocusSettlesDown can run immediately, execute just the given request

don't run everything else that's queued, because it might lead to unexpected actions being performed in wrong contexts (e.g. EA-97139 - assert: NoSwingUnderWriteAction.a)
This commit is contained in:
peter
2017-03-03 09:16:28 +01:00
parent f3d9a3595c
commit 6ce0bde199
@@ -468,13 +468,14 @@ public class FocusManagerImpl extends IdeFocusManager implements Disposable {
@Override
public void doWhenFocusSettlesDown(@NotNull final Runnable runnable) {
boolean invokedOnEdt = ApplicationManager.getApplication().isDispatchThread();
UIUtil.invokeLaterIfNeeded(() -> {
if (isFlushingIdleRequests()) {
myIdleRequests.add(runnable);
return;
}
if (myRunContext != null) {
if (myRunContext != null || invokedOnEdt && canFlushIdleRequests()) {
flushRequest(runnable);
return;
}