mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
IDEADEV-31082 - Cursor position in file is not saved on closing editor without save
This commit is contained in:
+17
@@ -37,4 +37,21 @@ public interface FileEditorManagerListener extends EventListener{
|
||||
* TODO[vova] write javadoc
|
||||
*/
|
||||
void selectionChanged(FileEditorManagerEvent event);
|
||||
|
||||
interface Before extends EventListener {
|
||||
Topic<Before> FILE_EDITOR_MANAGER = new Topic<Before>("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) {
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
+9
@@ -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
|
||||
*/
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
+2
@@ -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 {
|
||||
|
||||
Reference in New Issue
Block a user