CHE-5206. Fix focus position at editor state restoring

Signed-off-by: Roman Nikitenko <rnikiten@redhat.com>
6.19.x
Roman Nikitenko 2017-07-15 19:25:12 +03:00 committed by RomanNikitenko
parent 4e41a2ab3b
commit cbc65ad469
1 changed files with 35 additions and 33 deletions

View File

@ -17,7 +17,6 @@ import elemental.util.ArrayOf;
import com.google.gwt.user.client.rpc.AsyncCallback;
import com.google.inject.Inject;
import com.google.inject.Provider;
import com.google.inject.Singleton;
import com.google.web.bindery.event.shared.EventBus;
@ -58,7 +57,6 @@ import org.eclipse.che.ide.api.parts.EditorMultiPartStackState;
import org.eclipse.che.ide.api.parts.EditorPartStack;
import org.eclipse.che.ide.api.parts.EditorTab;
import org.eclipse.che.ide.api.parts.PartPresenter;
import org.eclipse.che.ide.api.parts.PropertyListener;
import org.eclipse.che.ide.api.parts.WorkspaceAgent;
import org.eclipse.che.ide.api.preferences.PreferencesManager;
import org.eclipse.che.ide.api.resources.Resource;
@ -106,7 +104,7 @@ public class EditorAgentImpl implements EditorAgent,
private final List<EditorPartPresenter> openedEditors;
private final Map<EditorPartPresenter, String> openedEditorsToProviders;
private final Provider<EditorContentSynchronizer> editorContentSynchronizerProvider;
private final EditorContentSynchronizer editorContentSynchronizer;
private final PromiseProvider promiseProvider;
private final ResourceProvider resourceProvider;
private List<EditorPartPresenter> dirtyEditors;
@ -121,7 +119,7 @@ public class EditorAgentImpl implements EditorAgent,
WorkspaceAgent workspaceAgent,
CoreLocalizationConstant coreLocalizationConstant,
EditorMultiPartStackPresenter editorMultiPartStack,
Provider<EditorContentSynchronizer> editorContentSynchronizerProvider,
EditorContentSynchronizer editorContentSynchronizer,
PromiseProvider promiseProvider,
ResourceProvider resourceProvider) {
this.eventBus = eventBus;
@ -131,7 +129,7 @@ public class EditorAgentImpl implements EditorAgent,
this.workspaceAgent = workspaceAgent;
this.coreLocalizationConstant = coreLocalizationConstant;
this.editorMultiPartStack = editorMultiPartStack;
this.editorContentSynchronizerProvider = editorContentSynchronizerProvider;
this.editorContentSynchronizer = editorContentSynchronizer;
this.promiseProvider = promiseProvider;
this.resourceProvider = resourceProvider;
this.openedEditors = newArrayList();
@ -236,7 +234,7 @@ public class EditorAgentImpl implements EditorAgent,
editor.close(false);
if (editor instanceof TextEditor) {
editorContentSynchronizerProvider.get().unTrackEditor(editor);
editorContentSynchronizer.unTrackEditor(editor);
}
if (activeEditor != null && activeEditor == editor) {
@ -291,28 +289,31 @@ public class EditorAgentImpl implements EditorAgent,
finalizeInit(file, callback, editor, editorProvider);
}
private void finalizeInit(final VirtualFile file, final OpenEditorCallback callback, final EditorPartPresenter editor,
EditorProvider editorProvider) {
openedEditors.add(editor);
openedEditorsToProviders.put(editor, editorProvider.getId());
private Promise<Void> finalizeInit(final VirtualFile file,
final OpenEditorCallback openEditorCallback,
final EditorPartPresenter editor,
EditorProvider editorProvider) {
return AsyncPromiseHelper.createFromAsyncRequest(promiseCallback -> {
openedEditors.add(editor);
openedEditorsToProviders.put(editor, editorProvider.getId());
workspaceAgent.setActivePart(editor);
editor.addPropertyListener(new PropertyListener() {
@Override
public void propertyChanged(PartPresenter source, int propId) {
workspaceAgent.setActivePart(editor);
editor.addPropertyListener((source, propId) -> {
if (propId == EditorPartPresenter.PROP_INPUT) {
promiseCallback.onSuccess(null);
if (editor instanceof HasReadOnlyProperty) {
((HasReadOnlyProperty)editor).setReadOnly(file.isReadOnly());
}
if (editor instanceof TextEditor) {
editorContentSynchronizerProvider.get().trackEditor(editor);
editorContentSynchronizer.trackEditor(editor);
}
callback.onEditorOpened(editor);
openEditorCallback.onEditorOpened(editor);
eventBus.fireEvent(FileEvent.createFileOpenedEvent(file));
eventBus.fireEvent(new EditorOpenedEvent(file, editor));
}
}
});
});
}
@ -557,34 +558,35 @@ public class EditorAgentImpl implements EditorAgent,
final EditorProvider provider = editorRegistry.findEditorProviderById(providerId);
if (provider instanceof AsyncEditorProvider) {
((AsyncEditorProvider)provider).createEditor(resourceFile).then(new Operation<EditorPartPresenter>() {
@Override
public void apply(EditorPartPresenter arg) throws OperationException {
restoreInitEditor(resourceFile, callback, fileTypeRegistry.getFileTypeByFile(resourceFile), arg, provider,
editorPartStack);
((AsyncEditorProvider)provider).createEditor(resourceFile).then(editor -> {
restoreInitEditor(resourceFile, callback, fileTypeRegistry.getFileTypeByFile(resourceFile), editor, provider,
editorPartStack).then(arg -> {
if (active) {
activeEditors.put(arg, editorPartStack);
activeEditors.put(editor, editorPartStack);
}
}
openCallback.onSuccess(null);
});
});
} else {
EditorPartPresenter editor = provider.getEditor();
restoreInitEditor(resourceFile, callback, fileTypeRegistry.getFileTypeByFile(resourceFile), editor, provider, editorPartStack);
if (active) {
activeEditors.put(editor, editorPartStack);
}
restoreInitEditor(resourceFile, callback, fileTypeRegistry.getFileTypeByFile(resourceFile), editor, provider, editorPartStack)
.then(arg -> {
if (active) {
activeEditors.put(editor, editorPartStack);
}
openCallback.onSuccess(null);
});
}
openCallback.onSuccess(null);
}
private void restoreInitEditor(final VirtualFile file, final OpenEditorCallback callback, FileType fileType,
final EditorPartPresenter editor, EditorProvider editorProvider, EditorPartStack editorPartStack) {
private Promise<Void> restoreInitEditor(final VirtualFile file, final OpenEditorCallback callback, FileType fileType,
final EditorPartPresenter editor, EditorProvider editorProvider,
EditorPartStack editorPartStack) {
editor.init(new EditorInputImpl(fileType, file), callback);
editor.addCloseHandler(this);
editorPartStack.addPart(editor);
finalizeInit(file, callback, editor, editorProvider);
return finalizeInit(file, callback, editor, editorProvider);
}
@Override