Skip to content

Commit cbc65ad

Browse files
CHE-5206. Fix focus position at editor state restoring
Signed-off-by: Roman Nikitenko <rnikiten@redhat.com>
1 parent 4e41a2a commit cbc65ad

1 file changed

Lines changed: 35 additions & 33 deletions

File tree

ide/che-core-ide-app/src/main/java/org/eclipse/che/ide/editor/EditorAgentImpl.java

Lines changed: 35 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,6 @@
1717

1818
import com.google.gwt.user.client.rpc.AsyncCallback;
1919
import com.google.inject.Inject;
20-
import com.google.inject.Provider;
2120
import com.google.inject.Singleton;
2221
import com.google.web.bindery.event.shared.EventBus;
2322

@@ -58,7 +57,6 @@
5857
import org.eclipse.che.ide.api.parts.EditorPartStack;
5958
import org.eclipse.che.ide.api.parts.EditorTab;
6059
import org.eclipse.che.ide.api.parts.PartPresenter;
61-
import org.eclipse.che.ide.api.parts.PropertyListener;
6260
import org.eclipse.che.ide.api.parts.WorkspaceAgent;
6361
import org.eclipse.che.ide.api.preferences.PreferencesManager;
6462
import org.eclipse.che.ide.api.resources.Resource;
@@ -106,7 +104,7 @@ public class EditorAgentImpl implements EditorAgent,
106104

107105
private final List<EditorPartPresenter> openedEditors;
108106
private final Map<EditorPartPresenter, String> openedEditorsToProviders;
109-
private final Provider<EditorContentSynchronizer> editorContentSynchronizerProvider;
107+
private final EditorContentSynchronizer editorContentSynchronizer;
110108
private final PromiseProvider promiseProvider;
111109
private final ResourceProvider resourceProvider;
112110
private List<EditorPartPresenter> dirtyEditors;
@@ -121,7 +119,7 @@ public EditorAgentImpl(EventBus eventBus,
121119
WorkspaceAgent workspaceAgent,
122120
CoreLocalizationConstant coreLocalizationConstant,
123121
EditorMultiPartStackPresenter editorMultiPartStack,
124-
Provider<EditorContentSynchronizer> editorContentSynchronizerProvider,
122+
EditorContentSynchronizer editorContentSynchronizer,
125123
PromiseProvider promiseProvider,
126124
ResourceProvider resourceProvider) {
127125
this.eventBus = eventBus;
@@ -131,7 +129,7 @@ public EditorAgentImpl(EventBus eventBus,
131129
this.workspaceAgent = workspaceAgent;
132130
this.coreLocalizationConstant = coreLocalizationConstant;
133131
this.editorMultiPartStack = editorMultiPartStack;
134-
this.editorContentSynchronizerProvider = editorContentSynchronizerProvider;
132+
this.editorContentSynchronizer = editorContentSynchronizer;
135133
this.promiseProvider = promiseProvider;
136134
this.resourceProvider = resourceProvider;
137135
this.openedEditors = newArrayList();
@@ -236,7 +234,7 @@ private void doCloseEditor(EditorTab tab) {
236234
editor.close(false);
237235

238236
if (editor instanceof TextEditor) {
239-
editorContentSynchronizerProvider.get().unTrackEditor(editor);
237+
editorContentSynchronizer.unTrackEditor(editor);
240238
}
241239

242240
if (activeEditor != null && activeEditor == editor) {
@@ -291,28 +289,31 @@ private void initEditor(final VirtualFile file, final OpenEditorCallback callbac
291289
finalizeInit(file, callback, editor, editorProvider);
292290
}
293291

294-
private void finalizeInit(final VirtualFile file, final OpenEditorCallback callback, final EditorPartPresenter editor,
295-
EditorProvider editorProvider) {
296-
openedEditors.add(editor);
297-
openedEditorsToProviders.put(editor, editorProvider.getId());
292+
private Promise<Void> finalizeInit(final VirtualFile file,
293+
final OpenEditorCallback openEditorCallback,
294+
final EditorPartPresenter editor,
295+
EditorProvider editorProvider) {
296+
return AsyncPromiseHelper.createFromAsyncRequest(promiseCallback -> {
297+
openedEditors.add(editor);
298+
openedEditorsToProviders.put(editor, editorProvider.getId());
298299

299-
workspaceAgent.setActivePart(editor);
300-
editor.addPropertyListener(new PropertyListener() {
301-
@Override
302-
public void propertyChanged(PartPresenter source, int propId) {
300+
workspaceAgent.setActivePart(editor);
301+
editor.addPropertyListener((source, propId) -> {
303302
if (propId == EditorPartPresenter.PROP_INPUT) {
303+
promiseCallback.onSuccess(null);
304+
304305
if (editor instanceof HasReadOnlyProperty) {
305306
((HasReadOnlyProperty)editor).setReadOnly(file.isReadOnly());
306307
}
307308

308309
if (editor instanceof TextEditor) {
309-
editorContentSynchronizerProvider.get().trackEditor(editor);
310+
editorContentSynchronizer.trackEditor(editor);
310311
}
311-
callback.onEditorOpened(editor);
312+
openEditorCallback.onEditorOpened(editor);
312313
eventBus.fireEvent(FileEvent.createFileOpenedEvent(file));
313314
eventBus.fireEvent(new EditorOpenedEvent(file, editor));
314315
}
315-
}
316+
});
316317
});
317318
}
318319

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

558559
final EditorProvider provider = editorRegistry.findEditorProviderById(providerId);
559560
if (provider instanceof AsyncEditorProvider) {
560-
((AsyncEditorProvider)provider).createEditor(resourceFile).then(new Operation<EditorPartPresenter>() {
561-
@Override
562-
public void apply(EditorPartPresenter arg) throws OperationException {
563-
restoreInitEditor(resourceFile, callback, fileTypeRegistry.getFileTypeByFile(resourceFile), arg, provider,
564-
editorPartStack);
561+
((AsyncEditorProvider)provider).createEditor(resourceFile).then(editor -> {
562+
restoreInitEditor(resourceFile, callback, fileTypeRegistry.getFileTypeByFile(resourceFile), editor, provider,
563+
editorPartStack).then(arg -> {
565564
if (active) {
566-
activeEditors.put(arg, editorPartStack);
565+
activeEditors.put(editor, editorPartStack);
567566
}
568-
569-
}
567+
openCallback.onSuccess(null);
568+
});
570569
});
571570
} else {
572571
EditorPartPresenter editor = provider.getEditor();
573-
restoreInitEditor(resourceFile, callback, fileTypeRegistry.getFileTypeByFile(resourceFile), editor, provider, editorPartStack);
574-
if (active) {
575-
activeEditors.put(editor, editorPartStack);
576-
}
572+
restoreInitEditor(resourceFile, callback, fileTypeRegistry.getFileTypeByFile(resourceFile), editor, provider, editorPartStack)
573+
.then(arg -> {
574+
if (active) {
575+
activeEditors.put(editor, editorPartStack);
576+
}
577+
openCallback.onSuccess(null);
578+
});
577579
}
578-
openCallback.onSuccess(null);
579580
}
580581

581-
private void restoreInitEditor(final VirtualFile file, final OpenEditorCallback callback, FileType fileType,
582-
final EditorPartPresenter editor, EditorProvider editorProvider, EditorPartStack editorPartStack) {
582+
private Promise<Void> restoreInitEditor(final VirtualFile file, final OpenEditorCallback callback, FileType fileType,
583+
final EditorPartPresenter editor, EditorProvider editorProvider,
584+
EditorPartStack editorPartStack) {
583585
editor.init(new EditorInputImpl(fileType, file), callback);
584586
editor.addCloseHandler(this);
585587

586588
editorPartStack.addPart(editor);
587-
finalizeInit(file, callback, editor, editorProvider);
589+
return finalizeInit(file, callback, editor, editorProvider);
588590
}
589591

590592
@Override

0 commit comments

Comments
 (0)