Revert "[diff] Stop "Go to source" on click on local version in the diff dialog."

This reverts commit e74b321e79.

User requests this functionality to be kept, but with Ctrl/Alt+Click IDEA-101289
The change from Click to Ctrl/Alt+Click will follow.
This commit is contained in:
Kirill Likhodedov
2013-02-18 14:00:26 +04:00
parent b44487dadb
commit 1ee7c413fb
@@ -25,6 +25,10 @@ import com.intellij.openapi.diff.impl.util.LabeledEditor;
import com.intellij.openapi.diff.impl.util.SyncScrollSupport;
import com.intellij.openapi.editor.Editor;
import com.intellij.openapi.editor.colors.EditorColors;
import com.intellij.openapi.editor.event.EditorMouseAdapter;
import com.intellij.openapi.editor.event.EditorMouseEvent;
import com.intellij.openapi.editor.event.EditorMouseEventArea;
import com.intellij.openapi.editor.event.EditorMouseMotionAdapter;
import com.intellij.openapi.editor.ex.EditorEx;
import com.intellij.openapi.editor.highlighter.EditorHighlighter;
import com.intellij.openapi.fileEditor.FileEditor;
@@ -38,8 +42,10 @@ import org.jetbrains.annotations.Nullable;
import javax.swing.*;
import javax.swing.border.Border;
import java.awt.*;
import java.awt.event.FocusAdapter;
import java.awt.event.FocusEvent;
import java.awt.event.MouseEvent;
public class DiffSideView {
private final JComponent MOCK_COMPONENT = new JPanel();
@@ -94,6 +100,7 @@ public class DiffSideView {
editor.getScrollingModel().scrollHorizontally(0);
insertComponent(editor.getComponent());
applyHighlighter();
setMouseListeners(source);
MyEditorFocusListener.install(this);
state.restore();
@@ -122,6 +129,11 @@ public class DiffSideView {
myPanel.updateTitle(myTitle);
}
private void setMouseListeners(EditorSource source) {
DiffContent content = source.getContent();
MouseLineNumberListener.install(content, source, myContainer);
}
public void beSlave() {
myIsMaster = false;
myLineMarker.hide();
@@ -137,6 +149,69 @@ public class DiffSideView {
return content.getOpenFileDescriptor(editor.getCaretModel().getOffset());
}
private static class MouseLineNumberListener {
private static final Cursor HAND__CURSOR = Cursor.getPredefinedCursor(Cursor.HAND_CURSOR);
private final Editor myEditor;
private final DiffSidesContainer myContainer;
private final DiffContent myContent;
private final Project myProject;
private final EditorMouseAdapter myMouseListener = new EditorMouseAdapter() {
public void mouseReleased(EditorMouseEvent e) {
if (e.getMouseEvent().getButton() != MouseEvent.BUTTON1) {
return;
}
if (!isInMyArea(e)) return;
OpenFileDescriptor descriptor = getOpenFileDescriptor(e);
if (descriptor == null) return;
myContainer.showSource(descriptor);
}
};
private OpenFileDescriptor getOpenFileDescriptor(EditorMouseEvent e) {
int offset = myEditor.logicalPositionToOffset(myEditor.xyToLogicalPosition(e.getMouseEvent().getPoint()));
return myContent.getOpenFileDescriptor(offset);
}
private boolean isInMyArea(EditorMouseEvent e) {
return e.getArea() == EditorMouseEventArea.LINE_NUMBERS_AREA;
}
private final EditorMouseMotionAdapter myMouseMotionListener = new EditorMouseMotionAdapter() {
public void mouseMoved(EditorMouseEvent e) {
Editor editor = e.getEditor();
if (editor.getProject() != null && editor.getProject() != myProject && myProject != null/*???*/) return;
if (!isInMyArea(e)) return;
Cursor cursor = getOpenFileDescriptor(e) != null ? HAND__CURSOR : Cursor.getDefaultCursor();
e.getMouseEvent().getComponent().setCursor(cursor);
myEditor.getContentComponent().setCursor(cursor);
}
};
public MouseLineNumberListener(DiffContent content, Editor editor, DiffSidesContainer container, Project project) {
myEditor = editor;
myContainer = container;
myContent = content;
myProject = project;
}
public static void install(DiffContent content, EditorSource source, DiffSidesContainer container) {
final Editor editor = source.getEditor();
Project project = container.getProject();
if (project == null) return;
final MouseLineNumberListener listener = new MouseLineNumberListener(content, editor, container, project);
editor.addEditorMouseListener(listener.myMouseListener);
editor.addEditorMouseMotionListener(listener.myMouseMotionListener);
source.addDisposable(new Disposable() {
public void dispose() {
editor.removeEditorMouseListener(listener.myMouseListener);
editor.removeEditorMouseMotionListener(listener.myMouseMotionListener);
}
});
}
}
private static class MyEditorFocusListener extends FocusAdapter {
private final DiffSideView mySideView;