summaryrefslogtreecommitdiff
path: root/platform/platform-impl/src/com/intellij/openapi/fileEditor
diff options
context:
space:
mode:
Diffstat (limited to 'platform/platform-impl/src/com/intellij/openapi/fileEditor')
-rw-r--r--platform/platform-impl/src/com/intellij/openapi/fileEditor/impl/EditorTabbedContainer.java2
-rw-r--r--platform/platform-impl/src/com/intellij/openapi/fileEditor/impl/EditorWindow.java19
-rw-r--r--platform/platform-impl/src/com/intellij/openapi/fileEditor/impl/FileDocumentManagerImpl.java1
-rw-r--r--platform/platform-impl/src/com/intellij/openapi/fileEditor/impl/FileEditorManagerImpl.java2
-rw-r--r--platform/platform-impl/src/com/intellij/openapi/fileEditor/impl/NonProjectFileWritingAccessProvider.java8
-rw-r--r--platform/platform-impl/src/com/intellij/openapi/fileEditor/impl/TrailingSpacesStripper.java215
-rw-r--r--platform/platform-impl/src/com/intellij/openapi/fileEditor/impl/text/TextEditorProvider.java27
7 files changed, 41 insertions, 233 deletions
diff --git a/platform/platform-impl/src/com/intellij/openapi/fileEditor/impl/EditorTabbedContainer.java b/platform/platform-impl/src/com/intellij/openapi/fileEditor/impl/EditorTabbedContainer.java
index c2353d5db207..03b03faffe03 100644
--- a/platform/platform-impl/src/com/intellij/openapi/fileEditor/impl/EditorTabbedContainer.java
+++ b/platform/platform-impl/src/com/intellij/openapi/fileEditor/impl/EditorTabbedContainer.java
@@ -277,6 +277,8 @@ public final class EditorTabbedContainer implements Disposable, CloseAction.Clos
myTabs.getTabAt(index).setTooltipText(text);
}
+ public boolean isTitleShortened(int index) { return myTabs.getTabAt(index).isTitleShortened(); }
+
public void setBackgroundColorAt(final int index, final Color color) {
myTabs.getTabAt(index).setTabColor(color);
}
diff --git a/platform/platform-impl/src/com/intellij/openapi/fileEditor/impl/EditorWindow.java b/platform/platform-impl/src/com/intellij/openapi/fileEditor/impl/EditorWindow.java
index 3519ab6a1af4..06a3966ade1d 100644
--- a/platform/platform-impl/src/com/intellij/openapi/fileEditor/impl/EditorWindow.java
+++ b/platform/platform-impl/src/com/intellij/openapi/fileEditor/impl/EditorWindow.java
@@ -34,6 +34,7 @@ import com.intellij.openapi.fileEditor.ex.FileEditorManagerEx;
import com.intellij.openapi.fileTypes.FileTypes;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.ui.Splitter;
+import com.intellij.openapi.ui.ThreeComponentsSplitter;
import com.intellij.openapi.util.*;
import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.openapi.vfs.VirtualFileManager;
@@ -319,6 +320,16 @@ public class EditorWindow {
if (disposeIfNeeded && getTabCount() == 0) {
removeFromSplitter();
+ if (UISettings.getInstance().EDITOR_TAB_PLACEMENT == UISettings.TABS_NONE) {
+ final EditorsSplitters owner = getOwner();
+ if (owner != null) {
+ final ThreeComponentsSplitter splitter = UIUtil.getParentOfType(ThreeComponentsSplitter.class, owner);
+ if (splitter != null) {
+ splitter.revalidate();
+ splitter.repaint();
+ }
+ }
+ }
}
else {
myPanel.revalidate();
@@ -453,6 +464,10 @@ public class EditorWindow {
}
}
+ private boolean isTitleShortenedAt(int index) {
+ return myTabbedPane != null && myTabbedPane.isTitleShortened(index);
+ }
+
private void setBackgroundColorAt(final int index, final Color color) {
if (myTabbedPane != null) {
myTabbedPane.setBackgroundColorAt(index, color);
@@ -897,7 +912,9 @@ public class EditorWindow {
final int index = findEditorIndex(findFileComposite(file));
if (index != -1) {
setTitleAt(index, EditorTabbedContainer.calcTabTitle(getManager().getProject(), file));
- setToolTipTextAt(index, UISettings.getInstance().SHOW_TABS_TOOLTIPS ? getManager().getFileTooltipText(file) : null);
+ setToolTipTextAt(index, UISettings.getInstance().SHOW_TABS_TOOLTIPS || isTitleShortenedAt(index)
+ ? getManager().getFileTooltipText(file)
+ : null);
}
}
diff --git a/platform/platform-impl/src/com/intellij/openapi/fileEditor/impl/FileDocumentManagerImpl.java b/platform/platform-impl/src/com/intellij/openapi/fileEditor/impl/FileDocumentManagerImpl.java
index f396b1eed399..091ff1171157 100644
--- a/platform/platform-impl/src/com/intellij/openapi/fileEditor/impl/FileDocumentManagerImpl.java
+++ b/platform/platform-impl/src/com/intellij/openapi/fileEditor/impl/FileDocumentManagerImpl.java
@@ -37,6 +37,7 @@ import com.intellij.openapi.editor.event.DocumentEvent;
import com.intellij.openapi.editor.ex.DocumentEx;
import com.intellij.openapi.editor.ex.EditorSettingsExternalizable;
import com.intellij.openapi.editor.impl.EditorFactoryImpl;
+import com.intellij.openapi.editor.impl.TrailingSpacesStripper;
import com.intellij.openapi.extensions.Extensions;
import com.intellij.openapi.fileEditor.*;
import com.intellij.openapi.fileEditor.impl.text.TextEditorImpl;
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 e36a120d609b..c7fa51f770d1 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
@@ -227,7 +227,7 @@ public class FileEditorManagerImpl extends FileEditorManagerEx implements Projec
fm.doWhenFocusSettlesDown(run);
}
else {
- run.run();
+ UIUtil.invokeAndWaitIfNeeded(run);
}
return result;
diff --git a/platform/platform-impl/src/com/intellij/openapi/fileEditor/impl/NonProjectFileWritingAccessProvider.java b/platform/platform-impl/src/com/intellij/openapi/fileEditor/impl/NonProjectFileWritingAccessProvider.java
index 69a91ec31970..b19b2aa3e943 100644
--- a/platform/platform-impl/src/com/intellij/openapi/fileEditor/impl/NonProjectFileWritingAccessProvider.java
+++ b/platform/platform-impl/src/com/intellij/openapi/fileEditor/impl/NonProjectFileWritingAccessProvider.java
@@ -16,7 +16,6 @@
package com.intellij.openapi.fileEditor.impl;
import com.intellij.ProjectTopics;
-import com.intellij.ide.IdeEventQueue;
import com.intellij.openapi.application.ApplicationManager;
import com.intellij.openapi.components.StorageScheme;
import com.intellij.openapi.components.impl.stores.IProjectStore;
@@ -30,6 +29,7 @@ import com.intellij.openapi.roots.ModuleRootEvent;
import com.intellij.openapi.roots.ProjectFileIndex;
import com.intellij.openapi.util.Key;
import com.intellij.openapi.util.NotNullLazyKey;
+import com.intellij.openapi.util.registry.Registry;
import com.intellij.openapi.vfs.*;
import com.intellij.util.NotNullFunction;
import com.intellij.util.NullableFunction;
@@ -114,9 +114,7 @@ public class NonProjectFileWritingAccessProvider extends WritingAccessProvider {
if (deniedFiles.isEmpty()) return Collections.emptyList();
- final int savedEventCount = IdeEventQueue.getInstance().getEventCount();
UnlockOption unlockOption = askToUnlock(deniedFiles);
- IdeEventQueue.getInstance().setEventCount(savedEventCount);
if (unlockOption == null) return deniedFiles;
@@ -144,7 +142,9 @@ public class NonProjectFileWritingAccessProvider extends WritingAccessProvider {
}
private boolean isProjectFile(@NotNull VirtualFile file) {
- if (ProjectFileIndex.SERVICE.getInstance(myProject).isInContent(file)) return true;
+ ProjectFileIndex fileIndex = ProjectFileIndex.SERVICE.getInstance(myProject);
+ if (fileIndex.isInContent(file)) return true;
+ if (!Registry.is("ide.hide.excluded.files") && fileIndex.isExcluded(file) && !fileIndex.isUnderIgnored(file)) return true;
if (myProject instanceof ProjectEx) {
IProjectStore store = ((ProjectEx)myProject).getStateStore();
diff --git a/platform/platform-impl/src/com/intellij/openapi/fileEditor/impl/TrailingSpacesStripper.java b/platform/platform-impl/src/com/intellij/openapi/fileEditor/impl/TrailingSpacesStripper.java
deleted file mode 100644
index a5c477facfb3..000000000000
--- a/platform/platform-impl/src/com/intellij/openapi/fileEditor/impl/TrailingSpacesStripper.java
+++ /dev/null
@@ -1,215 +0,0 @@
-/*
- * Copyright 2000-2014 JetBrains s.r.o.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package com.intellij.openapi.fileEditor.impl;
-
-import com.intellij.ide.DataManager;
-import com.intellij.injected.editor.DocumentWindow;
-import com.intellij.openapi.actionSystem.CommonDataKeys;
-import com.intellij.openapi.actionSystem.DataContext;
-import com.intellij.openapi.application.ApplicationManager;
-import com.intellij.openapi.command.CommandProcessor;
-import com.intellij.openapi.editor.*;
-import com.intellij.openapi.editor.ex.EditorSettingsExternalizable;
-import com.intellij.openapi.editor.impl.DocumentImpl;
-import com.intellij.openapi.fileEditor.FileDocumentManager;
-import com.intellij.openapi.fileEditor.FileDocumentManagerAdapter;
-import com.intellij.openapi.project.Project;
-import com.intellij.openapi.util.Key;
-import com.intellij.openapi.util.ShutDownTracker;
-import com.intellij.openapi.vfs.VirtualFile;
-import com.intellij.openapi.wm.IdeFocusManager;
-import com.intellij.util.ArrayUtil;
-import com.intellij.util.text.CharArrayUtil;
-import gnu.trove.THashSet;
-import org.jetbrains.annotations.NotNull;
-
-import java.awt.*;
-import java.util.*;
-import java.util.List;
-
-public final class TrailingSpacesStripper extends FileDocumentManagerAdapter {
-
- public static final Key<String> OVERRIDE_STRIP_TRAILING_SPACES_KEY = Key.create("OVERRIDE_TRIM_TRAILING_SPACES_KEY");
- public static final Key<Boolean> OVERRIDE_ENSURE_NEWLINE_KEY = Key.create("OVERRIDE_ENSURE_NEWLINE_KEY");
-
- private final Set<Document> myDocumentsToStripLater = new THashSet<Document>();
-
- @Override
- public void beforeAllDocumentsSaving() {
- Set<Document> documentsToStrip = new THashSet<Document>(myDocumentsToStripLater);
- myDocumentsToStripLater.clear();
- for (Document document : documentsToStrip) {
- strip(document);
- }
- }
-
- @Override
- public void beforeDocumentSaving(@NotNull Document document) {
- strip(document);
- }
-
- private void strip(final Document document) {
- if (!document.isWritable()) return;
- FileDocumentManager fileDocumentManager = FileDocumentManager.getInstance();
- VirtualFile file = fileDocumentManager.getFile(document);
- if (file == null || !file.isValid()) return;
-
- final EditorSettingsExternalizable settings = EditorSettingsExternalizable.getInstance();
- if (settings == null) return;
-
- final String overrideStripTrailingSpacesData = file.getUserData(OVERRIDE_STRIP_TRAILING_SPACES_KEY);
- final Boolean overrideEnsureNewlineData = file.getUserData(OVERRIDE_ENSURE_NEWLINE_KEY);
- final String stripTrailingSpaces = overrideStripTrailingSpacesData != null ? overrideStripTrailingSpacesData : settings.getStripTrailingSpaces();
- final boolean doStrip = !stripTrailingSpaces.equals(EditorSettingsExternalizable.STRIP_TRAILING_SPACES_NONE);
- final boolean ensureEOL = overrideEnsureNewlineData != null ? overrideEnsureNewlineData.booleanValue() : settings.isEnsureNewLineAtEOF();
-
- if (doStrip) {
- final boolean inChangedLinesOnly = !stripTrailingSpaces.equals(EditorSettingsExternalizable.STRIP_TRAILING_SPACES_WHOLE);
- boolean success = stripIfNotCurrentLine(document, inChangedLinesOnly);
- if (!success) {
- myDocumentsToStripLater.add(document);
- }
- }
-
- final int lines = document.getLineCount();
- if (ensureEOL && lines > 0) {
- final int start = document.getLineStartOffset(lines - 1);
- final int end = document.getLineEndOffset(lines - 1);
- if (start != end) {
- final CharSequence content = document.getCharsSequence();
- ApplicationManager.getApplication().runWriteAction(new DocumentRunnable(document, null) {
- @Override
- public void run() {
- CommandProcessor.getInstance().runUndoTransparentAction(new Runnable() {
- @Override
- public void run() {
- if (CharArrayUtil.containsOnlyWhiteSpaces(content.subSequence(start, end)) && doStrip) {
- document.deleteString(start, end);
- }
- else {
- document.insertString(end, "\n");
- }
- }
- });
- }
- });
- }
- }
- }
-
- // clears line modification flags except lines which was not stripped because the caret was in the way
- public void clearLineModificationFlags(@NotNull Document document) {
- if (document instanceof DocumentWindow) {
- document = ((DocumentWindow)document).getDelegate();
- }
- if (!(document instanceof DocumentImpl)) {
- return;
- }
-
- Component focusOwner = IdeFocusManager.getGlobalInstance().getFocusOwner();
- DataContext dataContext = DataManager.getInstance().getDataContext(focusOwner);
- boolean isDisposeInProgress = ApplicationManager.getApplication().isDisposeInProgress(); // ignore caret placing when exiting
- Editor activeEditor = isDisposeInProgress ? null : CommonDataKeys.EDITOR.getData(dataContext);
-
- // when virtual space enabled, we can strip whitespace anywhere
- boolean isVirtualSpaceEnabled = activeEditor == null || activeEditor.getSettings().isVirtualSpace();
-
- final EditorSettingsExternalizable settings = EditorSettingsExternalizable.getInstance();
- if (settings == null) return;
-
- String stripTrailingSpaces = settings.getStripTrailingSpaces();
- final boolean doStrip = !stripTrailingSpaces.equals(EditorSettingsExternalizable.STRIP_TRAILING_SPACES_NONE);
- final boolean inChangedLinesOnly = !stripTrailingSpaces.equals(EditorSettingsExternalizable.STRIP_TRAILING_SPACES_WHOLE);
-
- int[] caretLines;
- if (activeEditor != null && inChangedLinesOnly && doStrip && !isVirtualSpaceEnabled) {
- List<Caret> carets = activeEditor.getCaretModel().getAllCarets();
- caretLines = new int[carets.size()];
- for (int i = 0; i < carets.size(); i++) {
- Caret caret = carets.get(i);
- caretLines[i] = caret.getLogicalPosition().line;
- }
- }
- else {
- caretLines = ArrayUtil.EMPTY_INT_ARRAY;
- }
- ((DocumentImpl)document).clearLineModificationFlagsExcept(caretLines);
- }
-
- public static boolean stripIfNotCurrentLine(Document document, boolean inChangedLinesOnly) {
- if (document instanceof DocumentWindow) {
- document = ((DocumentWindow)document).getDelegate();
- }
- if (!(document instanceof DocumentImpl)) {
- return true;
- }
- DataContext dataContext = DataManager.getInstance().getDataContext(IdeFocusManager.getGlobalInstance().getFocusOwner());
- boolean isDisposeInProgress = ApplicationManager.getApplication().isDisposeInProgress(); // ignore caret placing when exiting
- Editor activeEditor = isDisposeInProgress ? null : CommonDataKeys.EDITOR.getData(dataContext);
-
- // when virtual space enabled, we can strip whitespace anywhere
- boolean isVirtualSpaceEnabled = activeEditor == null || activeEditor.getSettings().isVirtualSpace();
-
- boolean markAsNeedsStrippingLater;
-
- if (activeEditor != null && activeEditor.getCaretModel().supportsMultipleCarets()) {
- List<Caret> carets = activeEditor.getCaretModel().getAllCarets();
- List<VisualPosition> visualCarets = new ArrayList<VisualPosition>(carets.size());
- List<Integer> caretOffsets = new ArrayList<Integer>(carets.size());
- for (Caret caret : carets) {
- visualCarets.add(caret.getVisualPosition());
- caretOffsets.add(caret.getOffset());
- }
-
- markAsNeedsStrippingLater = ((DocumentImpl)document).stripTrailingSpaces(activeEditor.getProject(), inChangedLinesOnly, isVirtualSpaceEnabled, caretOffsets);
-
- if (!ShutDownTracker.isShutdownHookRunning()) {
- final Iterator<VisualPosition> visualCaretIterator = visualCarets.iterator();
- activeEditor.getCaretModel().runForEachCaret(new CaretAction() {
- @Override
- public void perform(Caret caret) {
- if (visualCaretIterator.hasNext()) {
- caret.moveToVisualPosition(visualCaretIterator.next());
- }
- }
- });
- }
- }
- else {
- VisualPosition visualCaret = activeEditor == null ? null : activeEditor.getCaretModel().getVisualPosition();
- int caretLine = activeEditor == null ? -1 : activeEditor.getCaretModel().getLogicalPosition().line;
- int caretOffset = activeEditor == null ? -1 : activeEditor.getCaretModel().getOffset();
-
- final Project project = activeEditor == null ? null : activeEditor.getProject();
- markAsNeedsStrippingLater = ((DocumentImpl)document).stripTrailingSpaces(project, inChangedLinesOnly, isVirtualSpaceEnabled,
- caretLine, caretOffset);
-
- if (!ShutDownTracker.isShutdownHookRunning() && activeEditor != null) {
- activeEditor.getCaretModel().moveToVisualPosition(visualCaret);
- }
- }
- return !markAsNeedsStrippingLater;
- }
-
- public void documentDeleted(@NotNull Document doc) {
- myDocumentsToStripLater.remove(doc);
- }
-
- @Override
- public void unsavedDocumentsDropped() {
- myDocumentsToStripLater.clear();
- }
-}
diff --git a/platform/platform-impl/src/com/intellij/openapi/fileEditor/impl/text/TextEditorProvider.java b/platform/platform-impl/src/com/intellij/openapi/fileEditor/impl/text/TextEditorProvider.java
index 60b42f75c22c..690e7c7d2820 100644
--- a/platform/platform-impl/src/com/intellij/openapi/fileEditor/impl/text/TextEditorProvider.java
+++ b/platform/platform-impl/src/com/intellij/openapi/fileEditor/impl/text/TextEditorProvider.java
@@ -278,19 +278,22 @@ public class TextEditorProvider implements FileEditorProvider, DumbAware {
}
protected void setStateImpl(final Project project, final Editor editor, final TextEditorState state){
- if (editor.getCaretModel().supportsMultipleCarets()) {
- CaretModel caretModel = editor.getCaretModel();
- List<CaretState> states = new ArrayList<CaretState>(state.CARETS.length);
- for (TextEditorState.CaretState caretState : state.CARETS) {
- states.add(new CaretState(new LogicalPosition(caretState.LINE, caretState.COLUMN),
- new LogicalPosition(caretState.SELECTION_START_LINE, caretState.SELECTION_START_COLUMN),
- new LogicalPosition(caretState.SELECTION_END_LINE, caretState.SELECTION_END_COLUMN)));
+ if (state.CARETS != null) {
+ if (editor.getCaretModel().supportsMultipleCarets()) {
+ CaretModel caretModel = editor.getCaretModel();
+ List<CaretState> states = new ArrayList<CaretState>(state.CARETS.length);
+ for (TextEditorState.CaretState caretState : state.CARETS) {
+ states.add(new CaretState(new LogicalPosition(caretState.LINE, caretState.COLUMN),
+ new LogicalPosition(caretState.SELECTION_START_LINE, caretState.SELECTION_START_COLUMN),
+ new LogicalPosition(caretState.SELECTION_END_LINE, caretState.SELECTION_END_COLUMN)));
+ }
+ caretModel.setCaretsAndSelections(states);
+ }
+ else {
+ LogicalPosition pos = new LogicalPosition(state.CARETS[0].LINE, state.CARETS[0].COLUMN);
+ editor.getCaretModel().moveToLogicalPosition(pos);
+ editor.getSelectionModel().removeSelection();
}
- caretModel.setCaretsAndSelections(states);
- } else {
- LogicalPosition pos = new LogicalPosition(state.CARETS[0].LINE, state.CARETS[0].COLUMN);
- editor.getCaretModel().moveToLogicalPosition(pos);
- editor.getSelectionModel().removeSelection();
}
EditorEx editorEx = editor instanceof EditorEx ? (EditorEx)editor : null;
boolean preciselyScrollVertically =