mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
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:
@@ -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;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user