diff --git a/platform/platform-impl/src/com/intellij/openapi/editor/impl/CaretImpl.java b/platform/platform-impl/src/com/intellij/openapi/editor/impl/CaretImpl.java index a3ec5cc88452..fee2cdb6f081 100644 --- a/platform/platform-impl/src/com/intellij/openapi/editor/impl/CaretImpl.java +++ b/platform/platform-impl/src/com/intellij/openapi/editor/impl/CaretImpl.java @@ -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()) { diff --git a/platform/platform-impl/src/com/intellij/openapi/editor/impl/CaretModelImpl.java b/platform/platform-impl/src/com/intellij/openapi/editor/impl/CaretModelImpl.java index bbbf5b3629f8..2b0f4815f0d1 100644 --- a/platform/platform-impl/src/com/intellij/openapi/editor/impl/CaretModelImpl.java +++ b/platform/platform-impl/src/com/intellij/openapi/editor/impl/CaretModelImpl.java @@ -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); }