diff options
Diffstat (limited to 'platform/platform-impl/src/com/intellij/openapi/fileEditor/impl/FileEditorManagerImpl.java')
-rw-r--r-- | platform/platform-impl/src/com/intellij/openapi/fileEditor/impl/FileEditorManagerImpl.java | 69 |
1 files changed, 29 insertions, 40 deletions
diff --git a/platform/platform-impl/src/com/intellij/openapi/fileEditor/impl/FileEditorManagerImpl.java b/platform/platform-impl/src/com/intellij/openapi/fileEditor/impl/FileEditorManagerImpl.java index 65adf52041b9..abf16d54c43d 100644 --- a/platform/platform-impl/src/com/intellij/openapi/fileEditor/impl/FileEditorManagerImpl.java +++ b/platform/platform-impl/src/com/intellij/openapi/fileEditor/impl/FileEditorManagerImpl.java @@ -58,7 +58,6 @@ import com.intellij.openapi.vcs.FileStatusListener; import com.intellij.openapi.vcs.FileStatusManager; import com.intellij.openapi.vfs.*; import com.intellij.openapi.wm.IdeFocusManager; -import com.intellij.openapi.wm.ToolWindowId; import com.intellij.openapi.wm.ToolWindowManager; import com.intellij.openapi.wm.WindowManager; import com.intellij.openapi.wm.ex.StatusBarEx; @@ -91,7 +90,6 @@ import java.beans.PropertyChangeListener; import java.lang.ref.WeakReference; import java.util.*; import java.util.List; -import java.util.concurrent.atomic.AtomicBoolean; /** * @author Anton Katilin @@ -113,7 +111,6 @@ public class FileEditorManagerImpl extends FileEditorManagerEx implements Projec private final Project myProject; private final List<Pair<VirtualFile, EditorWindow>> mySelectionHistory = new ArrayList<Pair<VirtualFile, EditorWindow>>(); private WeakReference<EditorComposite> myLastSelectedComposite = new WeakReference<EditorComposite>(null); - private final AtomicBoolean myPreviewBlocker = new AtomicBoolean(false); private final MergingUpdateQueue myQueue = new MergingUpdateQueue("FileEditorManagerUpdateQueue", 50, true, null); @@ -179,9 +176,9 @@ public class FileEditorManagerImpl extends FileEditorManagerEx implements Projec public Set<EditorsSplitters> getAllSplitters() { HashSet<EditorsSplitters> all = new LinkedHashSet<EditorsSplitters>(); - if (Registry.is("editor.use.preview")) { - initUI(); - all.add(myPreviewPanel.getWindow().getOwner()); + EditorWindow previewWindow = getPreviewWindow(); + if (previewWindow != null) { + all.add(previewWindow.getOwner()); } all.add(getMainSplitters()); Set<DockContainer> dockContainers = myDockManager.getContainers(); @@ -255,16 +252,23 @@ public class FileEditorManagerImpl extends FileEditorManagerEx implements Projec } } } - if (myPreviewPanel == null && Registry.is("editor.use.preview")) { + if (myPreviewPanel == null && PreviewPanel.isAvailable()) { synchronized (myInitLock) { myPreviewPanel = new PreviewPanel(myProject, this, myDockManager); } } } + @Nullable + private EditorWindow getPreviewWindow() { + if (!PreviewPanel.isAvailable()) return null; + initUI(); + return myPreviewPanel.getWindow(); + } + private static class MyBorder implements Border { @Override - public void paintBorder(Component c, Graphics g, int x, int y, int width, int height) { + public void paintBorder(@NotNull Component c, @NotNull Graphics g, int x, int y, int width, int height) { if (UIUtil.isUnderAquaLookAndFeel()) { g.setColor(JBTabsImpl.MAC_AQUA_BG_COLOR); final Insets insets = getBorderInsets(c); @@ -274,6 +278,7 @@ public class FileEditorManagerImpl extends FileEditorManagerEx implements Projec } } + @NotNull @Override public Insets getBorderInsets(Component c) { return JBInsets.NONE; @@ -607,7 +612,7 @@ public class FileEditorManagerImpl extends FileEditorManagerEx implements Projec @Override @NotNull public Pair<FileEditor[], FileEditorProvider[]> openFileWithProviders(@NotNull final VirtualFile file, - final boolean focusEditor, + boolean focusEditor, final boolean searchForSplitter) { if (!file.isValid()) { throw new IllegalArgumentException("file is not valid: " + file); @@ -642,9 +647,10 @@ public class FileEditorManagerImpl extends FileEditorManagerEx implements Projec } if (wndToOpenIn == null || !wndToOpenIn.isFileOpen(file)) { - EditorWindow previewWindow = getPreviewWindow(file, focusEditor, searchForSplitter); + EditorWindow previewWindow = getPreviewWindow(); if (previewWindow != null) { wndToOpenIn = previewWindow; + focusEditor = true; } } @@ -658,31 +664,6 @@ public class FileEditorManagerImpl extends FileEditorManagerEx implements Projec return openFileImpl2(wndToOpenIn, file, focusEditor); } - @Nullable - private EditorWindow getPreviewWindow(@NotNull VirtualFile virtualFile, final boolean focusEditor, final boolean searchForSplitter) { - EditorWindow wndToOpenIn = null; - if (Registry.is("editor.use.preview") && !myPreviewBlocker.get()) { - wndToOpenIn = myPreviewPanel.getWindow(); - if (virtualFile.equals(myPreviewPanel.getCurrentFile())) return wndToOpenIn; - final VirtualFile modifiedFile = myPreviewPanel.closeCurrentFile(); - ToolWindowManager.getInstance(myProject).getToolWindow(ToolWindowId.PREVIEW).activate(null, false); - if (modifiedFile != null) { - CommandProcessor.getInstance().executeCommand(myProject, new Runnable() { - @Override - public void run() { - myPreviewBlocker.set(true); - try { - openFileWithProviders(modifiedFile, focusEditor, searchForSplitter); - } finally { - myPreviewBlocker.set(false); - } - } - }, "", null); - } - } - return wndToOpenIn; - } - public Pair<FileEditor[], FileEditorProvider[]> openFileInNewWindow(@NotNull VirtualFile file) { return ((DockManagerImpl)DockManager.getInstance(getProject())).createNewDockContainerFor(file, this); } @@ -805,7 +786,7 @@ public class FileEditorManagerImpl extends FileEditorManagerEx implements Projec final FileEditorProvider provider = newProviders[i]; LOG.assertTrue(provider != null, "Provider for file "+file+" is null. All providers: "+Arrays.asList(newProviders)); LOG.assertTrue(provider.accept(myProject, file), "Provider " + provider + " doesn't accept file " + file); - if ((provider instanceof AsyncFileEditorProvider)) { + if (provider instanceof AsyncFileEditorProvider) { builders[i] = ((AsyncFileEditorProvider)provider).createEditorAsync(myProject, file); } } @@ -944,7 +925,7 @@ public class FileEditorManagerImpl extends FileEditorManagerEx implements Projec return Pair.create(compositeRef.get().getEditors(), compositeRef.get().getProviders()); } - private void clearWindowIfNeeded(EditorWindow window) { + private static void clearWindowIfNeeded(EditorWindow window) { if (UISettings.getInstance().EDITOR_TAB_PLACEMENT == UISettings.TABS_NONE || UISettings.getInstance().PRESENTATION_MODE) { for (EditorWithProviderComposite composite : window.getEditors()) { Disposer.dispose(composite); @@ -1177,9 +1158,15 @@ public class FileEditorManagerImpl extends FileEditorManagerEx implements Projec @Override public Editor getSelectedTextEditor() { - assertReadAccess(); + return getSelectedTextEditor(false); + } - final EditorWindow currentWindow = getSplitters().getCurrentWindow(); + public Editor getSelectedTextEditor(boolean lockfree) { + if (!lockfree) { + assertDispatchThread(); + } + + final EditorWindow currentWindow = lockfree ? getMainSplitters().getCurrentWindow() : getSplitters().getCurrentWindow(); if (currentWindow != null) { final EditorWithProviderComposite selectedEditor = currentWindow.getSelectedEditor(); if (selectedEditor != null && selectedEditor.getSelectedEditor() instanceof TextEditor) { @@ -1191,6 +1178,7 @@ public class FileEditorManagerImpl extends FileEditorManagerEx implements Projec } + @Override public boolean isFileOpen(@NotNull final VirtualFile file) { return !getEditorComposites(file).isEmpty(); @@ -1760,7 +1748,7 @@ public class FileEditorManagerImpl extends FileEditorManagerEx implements Projec private final class MyEditorPropertyChangeListener implements PropertyChangeListener { @Override - public void propertyChange(final PropertyChangeEvent e) { + public void propertyChange(@NotNull final PropertyChangeEvent e) { assertDispatchThread(); final String propertyName = e.getPropertyName(); @@ -1999,6 +1987,7 @@ public class FileEditorManagerImpl extends FileEditorManagerEx implements Projec mySelectionHistory.remove(Pair.create(file, window)); } + @NotNull @Override public ActionCallback getReady(@NotNull Object requestor) { return myBusyObject.getReady(requestor); |