mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
IDEA-178622 Column selection mode is too slow
avoid unnecessary (intermediate) updates of system selection
This commit is contained in:
@@ -41,15 +41,12 @@ import com.intellij.openapi.util.text.StringUtil;
|
||||
import com.intellij.util.DocumentUtil;
|
||||
import com.intellij.util.diff.FilesTooBigForDiffException;
|
||||
import com.intellij.util.text.CharArrayUtil;
|
||||
import com.intellij.util.ui.EmptyClipboardOwner;
|
||||
import org.jetbrains.annotations.NonNls;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
import org.jetbrains.annotations.TestOnly;
|
||||
|
||||
import java.awt.*;
|
||||
import java.awt.datatransfer.Clipboard;
|
||||
import java.awt.datatransfer.StringSelection;
|
||||
import java.util.List;
|
||||
|
||||
public class CaretImpl extends UserDataHolderBase implements Caret, Dumpable {
|
||||
@@ -1195,20 +1192,11 @@ public class CaretImpl extends UserDataHolderBase implements Caret, Dumpable {
|
||||
}
|
||||
|
||||
if (updateSystemSelection) {
|
||||
updateSystemSelection();
|
||||
myEditor.getCaretModel().updateSystemSelection();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
private void updateSystemSelection() {
|
||||
if (GraphicsEnvironment.isHeadless()) return;
|
||||
|
||||
final Clipboard clip = myEditor.getComponent().getToolkit().getSystemSelection();
|
||||
if (clip != null) {
|
||||
clip.setContents(new StringSelection(myEditor.getSelectionModel().getSelectedText(true)), EmptyClipboardOwner.INSTANCE);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void removeSelection() {
|
||||
if (myEditor.isStickySelection()) {
|
||||
|
||||
@@ -31,14 +31,19 @@ import com.intellij.openapi.editor.markup.TextAttributes;
|
||||
import com.intellij.openapi.util.Disposer;
|
||||
import com.intellij.util.EventDispatcher;
|
||||
import com.intellij.util.containers.ContainerUtil;
|
||||
import com.intellij.util.ui.EmptyClipboardOwner;
|
||||
import gnu.trove.TIntArrayList;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
import org.jetbrains.annotations.TestOnly;
|
||||
|
||||
import java.awt.*;
|
||||
import java.awt.datatransfer.Clipboard;
|
||||
import java.awt.datatransfer.StringSelection;
|
||||
import java.beans.PropertyChangeEvent;
|
||||
import java.beans.PropertyChangeListener;
|
||||
import java.util.*;
|
||||
import java.util.List;
|
||||
|
||||
public class CaretModelImpl implements CaretModel, PrioritizedDocumentListener, Disposable, Dumpable, InlayModel.Listener {
|
||||
private final EditorImpl myEditor;
|
||||
@@ -508,7 +513,7 @@ public class CaretModelImpl implements CaretModel, PrioritizedDocumentListener,
|
||||
myEditor.logicalPositionToOffset(caretState.getSelectionStart()),
|
||||
myEditor.logicalToVisualPosition(caretState.getSelectionEnd()),
|
||||
myEditor.logicalPositionToOffset(caretState.getSelectionEnd()),
|
||||
true, updateSystemSelection, false);
|
||||
true, false, false);
|
||||
selectionStartsAfter.add(caret.getSelectionStart());
|
||||
selectionEndsAfter.add(caret.getSelectionEnd());
|
||||
}
|
||||
@@ -522,6 +527,9 @@ public class CaretModelImpl implements CaretModel, PrioritizedDocumentListener,
|
||||
fireCaretRemoved(caret);
|
||||
Disposer.dispose(caret);
|
||||
}
|
||||
if (updateSystemSelection) {
|
||||
updateSystemSelection();
|
||||
}
|
||||
if (selectionStartsBefore != null) {
|
||||
SelectionEvent event = new SelectionEvent(myEditor, selectionStartsBefore.toNativeArray(), selectionEndsBefore.toNativeArray(),
|
||||
selectionStartsAfter.toNativeArray(), selectionEndsAfter.toNativeArray());
|
||||
@@ -545,6 +553,15 @@ public class CaretModelImpl implements CaretModel, PrioritizedDocumentListener,
|
||||
}
|
||||
}
|
||||
|
||||
void updateSystemSelection() {
|
||||
if (GraphicsEnvironment.isHeadless()) return;
|
||||
|
||||
final Clipboard clip = myEditor.getComponent().getToolkit().getSystemSelection();
|
||||
if (clip != null) {
|
||||
clip.setContents(new StringSelection(myEditor.getSelectionModel().getSelectedText(true)), EmptyClipboardOwner.INSTANCE);
|
||||
}
|
||||
}
|
||||
|
||||
void fireCaretPositionChanged(CaretEvent caretEvent) {
|
||||
myCaretListeners.getMulticaster().caretPositionChanged(caretEvent);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user