Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

CHE-5206. Fix focus position at editor state restoring #5665

Merged
merged 1 commit into from
Jul 17, 2017
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,6 @@

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;

Expand Down Expand Up @@ -58,7 +57,6 @@
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;
Expand Down Expand Up @@ -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;
Expand All @@ -121,7 +119,7 @@ public EditorAgentImpl(EventBus eventBus,
WorkspaceAgent workspaceAgent,
CoreLocalizationConstant coreLocalizationConstant,
EditorMultiPartStackPresenter editorMultiPartStack,
Provider<EditorContentSynchronizer> editorContentSynchronizerProvider,
EditorContentSynchronizer editorContentSynchronizer,
PromiseProvider promiseProvider,
ResourceProvider resourceProvider) {
this.eventBus = eventBus;
Expand All @@ -131,7 +129,7 @@ public EditorAgentImpl(EventBus eventBus,
this.workspaceAgent = workspaceAgent;
this.coreLocalizationConstant = coreLocalizationConstant;
this.editorMultiPartStack = editorMultiPartStack;
this.editorContentSynchronizerProvider = editorContentSynchronizerProvider;
this.editorContentSynchronizer = editorContentSynchronizer;
this.promiseProvider = promiseProvider;
this.resourceProvider = resourceProvider;
this.openedEditors = newArrayList();
Expand Down Expand Up @@ -236,7 +234,7 @@ private void doCloseEditor(EditorTab tab) {
editor.close(false);

if (editor instanceof TextEditor) {
editorContentSynchronizerProvider.get().unTrackEditor(editor);
editorContentSynchronizer.unTrackEditor(editor);
}

if (activeEditor != null && activeEditor == editor) {
Expand Down Expand Up @@ -291,28 +289,31 @@ private void initEditor(final VirtualFile file, final OpenEditorCallback callbac
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));
}
}
});
});
}

Expand Down Expand Up @@ -557,34 +558,35 @@ private void restoreCreateEditor(final VirtualFile resourceFile, JsonObject file

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
Expand Down