Merge pull request #601 from eclipse/CHE-131

CHE-131: Fix losing focus in editor after closing 'File structure' dialog
6.19.x
Dmitry Shnurenko 2016-03-01 17:41:13 +02:00
commit 7b6bb02e92
4 changed files with 45 additions and 8 deletions

View File

@ -58,5 +58,11 @@ interface FileStructure extends View<FileStructure.ActionDelegate> {
* selected member
*/
void actionPerformed(Member member);
/**
* Performs some actions(e.c. set cursor in previous position in active editor) when user click on escape button to close
* file structure dialog.
*/
void onEscapeClicked();
}
}

View File

@ -29,10 +29,10 @@ import org.eclipse.che.ide.ext.java.client.JavaLocalizationConstant;
import org.eclipse.che.ide.ext.java.client.navigation.factory.NodeFactory;
import org.eclipse.che.ide.ext.java.shared.dto.model.CompilationUnit;
import org.eclipse.che.ide.ui.smartTree.KeyboardNavigationHandler;
import org.eclipse.che.ide.ui.smartTree.NodeUniqueKeyProvider;
import org.eclipse.che.ide.ui.smartTree.Tree;
import org.eclipse.che.ide.ui.smartTree.NodeLoader;
import org.eclipse.che.ide.ui.smartTree.NodeStorage;
import org.eclipse.che.ide.ui.smartTree.NodeUniqueKeyProvider;
import org.eclipse.che.ide.ui.smartTree.Tree;
import org.eclipse.che.ide.ui.window.Window;
import javax.validation.constraints.NotNull;
@ -53,16 +53,18 @@ final class FileStructureImpl extends Window implements FileStructure {
private static FileStructureImplUiBinder UI_BINDER = GWT.create(FileStructureImplUiBinder.class);
private final NodeFactory nodeFactory;
private final Tree tree;
private ActionDelegate delegate;
@UiField
DockLayoutPanel treeContainer;
@UiField
Label showInheritedLabel;
private final NodeFactory nodeFactory;
private final JavaLocalizationConstant locale;
private final Tree tree;
private ActionDelegate delegate;
@UiField(provided = true)
final JavaLocalizationConstant locale;
private Predicate<Node> LEAFS = new Predicate<Node>() {
@Override
@ -134,6 +136,13 @@ final class FileStructureImpl extends Window implements FileStructure {
tree.expandAll();
}
/** {@inheritDoc} */
@Override
public void hide() {
super.hide();
delegate.onEscapeClicked();
}
/** {@inheritDoc} */
@Override
public void setDelegate(ActionDelegate delegate) {

View File

@ -57,6 +57,7 @@ public class FileStructurePresenter implements FileStructure.ActionDelegate {
private EmbeddedTextEditorPresenter activeEditor;
private boolean showInheritedMembers;
private int cursorOffset;
@Inject
public FileStructurePresenter(FileStructure view,
@ -91,6 +92,7 @@ public class FileStructurePresenter implements FileStructure.ActionDelegate {
return;
}
activeEditor = ((EmbeddedTextEditorPresenter)editorPartPresenter);
cursorOffset = activeEditor.getCursorOffset();
VirtualFile file = activeEditor.getEditorInput().getFile();
String projectPath = file.getProject().getProjectConfig().getPath();
@ -141,6 +143,12 @@ public class FileStructurePresenter implements FileStructure.ActionDelegate {
showInheritedMembers = false;
}
@Override
public void onEscapeClicked() {
activeEditor.setFocus();
setCursor(activeEditor, cursorOffset);
}
private void openFile(VirtualFile result, final Member member) {
editorAgent.openEditor(result, new EditorAgent.OpenEditorCallback() {
@Override
@ -149,7 +157,8 @@ public class FileStructurePresenter implements FileStructure.ActionDelegate {
}
@Override
public void onEditorActivated(EditorPartPresenter editor) { }
public void onEditorActivated(EditorPartPresenter editor) {
}
});
}

View File

@ -28,6 +28,7 @@ import org.eclipse.che.ide.ext.java.shared.dto.Region;
import org.eclipse.che.ide.ext.java.shared.dto.model.CompilationUnit;
import org.eclipse.che.ide.ext.java.shared.dto.model.Member;
import org.eclipse.che.ide.jseditor.client.document.Document;
import org.eclipse.che.ide.jseditor.client.text.LinearRange;
import org.eclipse.che.ide.jseditor.client.texteditor.EmbeddedTextEditorPresenter;
import org.eclipse.che.ide.part.explorer.project.ProjectExplorerPresenter;
import org.eclipse.che.ide.ui.loaders.request.LoaderFactory;
@ -44,6 +45,7 @@ import org.mockito.runners.MockitoJUnitRunner;
import static org.mockito.Matchers.anyBoolean;
import static org.mockito.Matchers.anyString;
import static org.mockito.Matchers.eq;
import static org.mockito.Mockito.never;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
@ -189,4 +191,15 @@ public class FileStructurePresenterTest {
presenter.show(editorPartPresenter);
}
@Test
public void cursorShouldBeReturnedInPreviousPositionAfterDialogClosingByEscapeButton() {
presenter.show(editorPartPresenter);
presenter.onEscapeClicked();
verify(editorPartPresenter).setFocus();
verify(editorPartPresenter).getDocument();
verify(document).setSelectedRange(Matchers.<LinearRange>anyObject(), eq(true));
}
}