IDEA-160978 'Quick Documentation' doesn't work in modal dialogs

This commit is contained in:
peter
2016-09-21 10:50:30 +02:00
parent 5b78b772d1
commit 54fabc098c
4 changed files with 25 additions and 7 deletions
@@ -15,6 +15,7 @@
*/
package com.intellij.psi;
import com.intellij.openapi.application.ModalityState;
import com.intellij.openapi.editor.Document;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.util.Computable;
@@ -249,9 +250,16 @@ public abstract class PsiDocumentManager {
public abstract boolean performWhenAllCommitted(@NotNull Runnable action);
/**
* Schedule the runnable to be executed on Swing thread when all the documents are committed at some later moment.
* Same as {@link #performLaterWhenAllCommitted(Runnable, ModalityState)} using {@link ModalityState#defaultModalityState()}
*/
public abstract void performLaterWhenAllCommitted(@NotNull Runnable runnable);
/**
* Schedule the runnable to be executed on Swing thread when all the documents are committed at some later moment in a given modality state.
* The runnable is guaranteed to be invoked when no write action is running, and not immediately.
* If the project is disposed before such moment, the runnable is not run.
*/
public abstract void performLaterWhenAllCommitted(@NotNull Runnable runnable);
public abstract void performLaterWhenAllCommitted(@NotNull Runnable runnable, ModalityState modalityState);
}
@@ -557,7 +557,11 @@ public abstract class PsiDocumentManagerBase extends PsiDocumentManager implemen
@Override
public void performLaterWhenAllCommitted(@NotNull final Runnable runnable) {
final ModalityState modalityState = ModalityState.defaultModalityState();
performLaterWhenAllCommitted(runnable, ModalityState.defaultModalityState());
}
@Override
public void performLaterWhenAllCommitted(@NotNull final Runnable runnable, final ModalityState modalityState) {
final Runnable whenAllCommitted = new Runnable() {
@Override
public void run() {
@@ -35,6 +35,7 @@ import com.intellij.lang.documentation.*;
import com.intellij.openapi.actionSystem.*;
import com.intellij.openapi.actionSystem.ex.AnActionListener;
import com.intellij.openapi.application.ApplicationManager;
import com.intellij.openapi.application.ModalityState;
import com.intellij.openapi.command.CommandProcessor;
import com.intellij.openapi.components.ServiceManager;
import com.intellij.openapi.diagnostic.Logger;
@@ -63,8 +64,6 @@ import com.intellij.ui.popup.AbstractPopup;
import com.intellij.ui.popup.PopupPositionManager;
import com.intellij.ui.popup.PopupUpdateProcessor;
import com.intellij.util.Alarm;
import com.intellij.util.BooleanFunction;
import com.intellij.util.Consumer;
import com.intellij.util.Processor;
import com.intellij.util.containers.ContainerUtil;
import com.intellij.util.ui.accessibility.AccessibleContextUtil;
@@ -77,7 +76,6 @@ import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.lang.ref.WeakReference;
import java.util.*;
import java.util.List;
@@ -711,6 +709,8 @@ public class DocumentationManager extends DockablePopupManager<DocumentationComp
}
}
ModalityState modality = ModalityState.defaultModalityState();
myUpdateDocAlarm.addRequest(() -> {
if (myProject.isDisposed()) return;
LOG.debug("Started fetching documentation...");
@@ -777,7 +777,7 @@ public class DocumentationManager extends DockablePopupManager<DocumentationComp
// Set panel name so that it is announced by readers when it gets the focus
AccessibleContextUtil.setName(component, getTitle(element, false));
callback.setDone();
});
}, modality);
}, 10);
return callback;
}
@@ -3,6 +3,7 @@
*/
package com.intellij.mock;
import com.intellij.openapi.application.ModalityState;
import com.intellij.openapi.editor.Document;
import com.intellij.openapi.fileEditor.FileDocumentManager;
import com.intellij.openapi.util.Computable;
@@ -139,4 +140,9 @@ public class MockPsiDocumentManager extends PsiDocumentManager {
public void performLaterWhenAllCommitted(@NotNull final Runnable runnable) {
throw new UnsupportedOperationException();
}
@Override
public void performLaterWhenAllCommitted(@NotNull Runnable runnable, ModalityState modalityState) {
throw new UnsupportedOperationException();
}
}