diff --git a/platform/platform-api/src/com/intellij/openapi/fileEditor/FileEditorManagerListener.java b/platform/platform-api/src/com/intellij/openapi/fileEditor/FileEditorManagerListener.java index b2043be90788..fb1e589b28df 100644 --- a/platform/platform-api/src/com/intellij/openapi/fileEditor/FileEditorManagerListener.java +++ b/platform/platform-api/src/com/intellij/openapi/fileEditor/FileEditorManagerListener.java @@ -37,4 +37,21 @@ public interface FileEditorManagerListener extends EventListener{ * TODO[vova] write javadoc */ void selectionChanged(FileEditorManagerEvent event); + + interface Before extends EventListener { + Topic FILE_EDITOR_MANAGER = new Topic("file editor before events", Before.class); + + void beforeFileOpened(FileEditorManager source, VirtualFile file); + void beforeFileClosed(FileEditorManager source, VirtualFile file); + + public static class Adapter implements Before { + + public void beforeFileOpened(FileEditorManager source, VirtualFile file) { + } + + public void beforeFileClosed(FileEditorManager source, VirtualFile file) { + } + } + + } } \ No newline at end of file diff --git a/platform/platform-impl/src/com/intellij/openapi/fileEditor/impl/EditorHistoryManager.java b/platform/platform-impl/src/com/intellij/openapi/fileEditor/impl/EditorHistoryManager.java index c79d847c7132..4c034522dac0 100644 --- a/platform/platform-impl/src/com/intellij/openapi/fileEditor/impl/EditorHistoryManager.java +++ b/platform/platform-impl/src/com/intellij/openapi/fileEditor/impl/EditorHistoryManager.java @@ -65,6 +65,8 @@ public final class EditorHistoryManager extends AbstractProjectComponent impleme final MyUISettingsListener myUISettingsListener = new MyUISettingsListener(); fileEditorManager.addFileEditorManagerListener(editorManagerListener, project); + project.getMessageBus().connect().subscribe(FileEditorManagerListener.Before.FILE_EDITOR_MANAGER, new MyEditorManagerBeforeListener()); + uiSettings.addUISettingsListener(myUISettingsListener); Disposer.register(project, new Disposable() { public void dispose() { @@ -314,6 +316,13 @@ public final class EditorHistoryManager extends AbstractProjectComponent impleme } } + private final class MyEditorManagerBeforeListener extends FileEditorManagerListener.Before.Adapter { + @Override + public void beforeFileClosed(FileEditorManager source, VirtualFile file) { + updateHistoryEntry(file, false); + } + } + /** * Cuts/extends history length */ 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 898e93765db0..df1a03e5958b 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 @@ -131,6 +131,11 @@ public class EditorWindow { if (editors.isEmpty()) return; final EditorWithProviderComposite editor = findFileComposite(file); + final FileEditorManagerListener.Before beforePublisher = + editorManager.getProject().getMessageBus().syncPublisher(FileEditorManagerListener.Before.FILE_EDITOR_MANAGER); + + beforePublisher.beforeFileClosed(editorManager, file); + if (myTabbedPane != null) { final int componentIndex = findComponentIndex(editor.getComponent()); if (componentIndex >= 0) { // editor could close itself on decomposition @@ -157,9 +162,10 @@ public class EditorWindow { } } finally { - final FileEditorManagerListener publisher = + final FileEditorManagerListener afterPublisher = editorManager.getProject().getMessageBus().syncPublisher(FileEditorManagerListener.FILE_EDITOR_MANAGER); - publisher.fileClosed(editorManager, file); + + afterPublisher.fileClosed(editorManager, file); } } }); 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 1334fb6d399d..4d01dc9b58d2 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 @@ -491,6 +491,8 @@ public class FileEditorManagerImpl extends FileEditorManagerEx implements Projec } newEditorCreated = true; + getProject().getMessageBus().syncPublisher(FileEditorManagerListener.Before.FILE_EDITOR_MANAGER).beforeFileOpened(this, file); + editors = new FileEditor[providers.length]; for (int i = 0; i < providers.length; i++) { try {