// Token: 0x060085BF RID: 34239 RVA: 0x0024AB9C File Offset: 0x00248D9C internal void TargetOnDrop(DragEventArgs e) { if (!this.AllowDragDrop(e)) { return; } ITextSelection selection = this._textEditor.Selection; Invariant.Assert(selection != null); if (e.Data == null || e.AllowedEffects == DragDropEffects.None) { e.Effects = DragDropEffects.None; return; } if ((e.KeyStates & DragDropKeyStates.ControlKey) != DragDropKeyStates.None) { e.Effects = DragDropEffects.Copy; } else if (e.Effects != DragDropEffects.Copy) { e.Effects = DragDropEffects.Move; } if (!this._textEditor.TextView.Validate(e.GetPosition(this._textEditor.TextView.RenderScope))) { e.Effects = DragDropEffects.None; return; } ITextPointer dropPosition = this.GetDropPosition(this._textEditor.TextView.RenderScope, e.GetPosition(this._textEditor.TextView.RenderScope)); if (dropPosition != null) { if (this._dragSourceTextRange != null && this._dragSourceTextRange.Start.TextContainer == selection.Start.TextContainer && !selection.IsEmpty && this.IsSelectionContainsDropPosition(selection, dropPosition)) { selection.SetCaretToPosition(dropPosition, LogicalDirection.Backward, false, true); e.Effects = DragDropEffects.None; e.Handled = true; } else { using (selection.DeclareChangeBlock()) { if ((e.Effects & DragDropEffects.Move) != DragDropEffects.None && this._dragSourceTextRange != null && this._dragSourceTextRange.Start.TextContainer == selection.Start.TextContainer) { this._dragSourceTextRange.Text = string.Empty; } selection.SetCaretToPosition(dropPosition, LogicalDirection.Backward, false, true); e.Handled = TextEditorCopyPaste._DoPaste(this._textEditor, e.Data, true); } } if (e.Handled) { this.Win32SetForegroundWindow(); this._textEditor.UiScope.Focus(); return; } e.Effects = DragDropEffects.None; } }
internal static void Paste(TextEditor This) { if (!SecurityHelper.CallerHasAllClipboardPermission()) { return; } if (This.Selection.IsTableCellRange) { return; } TextEditorTyping._FlushPendingInputItems(This); TextEditorTyping._BreakTypingSequence(This); IDataObject dataObject; try { dataObject = Clipboard.GetDataObject(); } catch (ExternalException) { dataObject = null; } bool coversEntireContent = This.Selection.CoversEntireContent; if (dataObject != null) { using (This.Selection.DeclareChangeBlock()) { TextEditorSelection._ClearSuggestedX(This); if (TextEditorCopyPaste._DoPaste(This, dataObject, false)) { This.Selection.SetCaretToPosition(This.Selection.End, LogicalDirection.Backward, false, true); if (This.Selection is TextSelection) { ((TextSelection)This.Selection).ClearSpringloadFormatting(); } } } } if (coversEntireContent) { This.Selection.ValidateLayout(); } }
/// <summary> /// Paste worker. /// </summary> internal static void Paste(TextEditor This) { if (This.Selection.IsTableCellRange) { // We do not support clipboard for table selection so far // Word behavior: When source range is text segment then this segment is pasted // into each table cell overriding its current content. // If source range is table range then it is repeated on target - // cell by cell in circular manner. return; } TextEditorTyping._FlushPendingInputItems(This); TextEditorTyping._BreakTypingSequence(This); // Get DataObject from the Clipboard IDataObject dataObject; try { dataObject = Clipboard.GetDataObject(); } catch (ExternalException) { // Clipboard is failed to get the data object. // One of reason should be the opening fail of Clipboard by the destroyed hwnd. dataObject = null; // must re-throw ??? } bool forceLayoutUpdate = This.Selection.CoversEntireContent; if (dataObject != null) { using (This.Selection.DeclareChangeBlock()) { // Forget previously suggested horizontal position TextEditorSelection._ClearSuggestedX(This); // _DoPaste raises a public event -- could raise recoverable exception. if (TextEditorCopyPaste._DoPaste(This, dataObject, /*isDragDrop:*/ false)) { // Collapse selection to the end // Use backward direction to stay oriented towards pasted content This.Selection.SetCaretToPosition(This.Selection.End, LogicalDirection.Backward, /*allowStopAtLineEnd:*/ false, /*allowStopNearSpace:*/ true); // Clear springload formatting if (This.Selection is TextSelection) { ((TextSelection)This.Selection).ClearSpringloadFormatting(); } } } // PUBLIC EVENT RAISED HERE AS CHANGEBLOCK CLOSES! } // If we replaced the entire document content, background layout will // kick in. Force it to complete now. if (forceLayoutUpdate) { This.Selection.ValidateLayout(); } }
/// <summary> /// Called from an event reporting that the drop happened. /// </summary> internal void TargetOnDrop(DragEventArgs e) { // if (!AllowDragDrop(e)) { return; } ITextSelection selection = _textEditor.Selection; Invariant.Assert(selection != null); if (e.Data == null || e.AllowedEffects == DragDropEffects.None) { e.Effects = DragDropEffects.None; return; } if ((int)(e.KeyStates & DragDropKeyStates.ControlKey) != 0) { e.Effects = DragDropEffects.Copy; } else if (e.Effects != DragDropEffects.Copy) { e.Effects = DragDropEffects.Move; } // Force a layout update on the content so the GetTextPositionFromPoint // call following can succeed. if (!_textEditor.TextView.Validate(e.GetPosition(_textEditor.TextView.RenderScope))) { e.Effects = DragDropEffects.None; return; } // Get the text position from the text target point. ITextPointer dropPosition = GetDropPosition(_textEditor.TextView.RenderScope as Visual, e.GetPosition(_textEditor.TextView.RenderScope)); if (dropPosition != null) { if (_dragSourceTextRange != null && _dragSourceTextRange.Start.TextContainer == selection.Start.TextContainer && !selection.IsEmpty && IsSelectionContainsDropPosition(selection, dropPosition)) { // When we drop inside of selected area, we // should not select dropped content, // otherwise it looks for end user as if // nothing happened. // Set caret to this position. selection.SetCaretToPosition(dropPosition, LogicalDirection.Backward, /*allowStopAtLineEnd:*/ false, /*allowStopNearSpace:*/ true); // Indicate the resulting effect of an action // Note that dropResult may stay equal to DragDropResult.Drop e.Effects = DragDropEffects.None; // Mark the event as handled e.Handled = true; } else { using (selection.DeclareChangeBlock()) { // For MaxLength filter work correctly in case // when we dragdrop within the same TextContainer, // we need to delete dragged content first - // before dropping when filtering will occur. // Note, that this will duplicate operation on // source side, but it will be void deletion action if ((e.Effects & DragDropEffects.Move) != 0 && // _dragSourceTextRange != null && _dragSourceTextRange.Start.TextContainer == selection.Start.TextContainer) { _dragSourceTextRange.Text = String.Empty; } // When we drop outside of selection, // we should ignore current selection and // move ip into dropping point. selection.SetCaretToPosition(dropPosition, LogicalDirection.Backward, /*allowStopAtLineEnd:*/ false, /*allowStopNearSpace:*/ true); // _DoPaste raises a public event -- could raise recoverable exception. e.Handled = TextEditorCopyPaste._DoPaste(_textEditor, e.Data, /*isDragDrop:*/ true); // } } if (e.Handled) { // Set the drop target as the foreground window. Win32SetForegroundWindow(); // Set the focus into the drop target. _textEditor.UiScope.Focus(); } else { // When a target did not handle a drop event, we must // prevent from deleting a content on source end - // otherwise we'll have data loss e.Effects = DragDropEffects.None; } } }
internal static void Paste(TextEditor This) { // Don't try anything if the caller doesn't have the rights to read from the clipboard... if (!SecurityHelper.CallerHasAllClipboardPermission()) { return; } if (This.Selection.IsTableCellRange) { // return; } TextEditorTyping._FlushPendingInputItems(This); TextEditorTyping._BreakTypingSequence(This); // Get DataObject from the Clipboard IDataObject dataObject; try { dataObject = Clipboard.GetDataObject(); } catch (ExternalException) { // Clipboard is failed to get the data object. // One of reason should be the opening fail of Clipboard by the destroyed hwnd. dataObject = null; // } bool forceLayoutUpdate = This.Selection.CoversEntireContent; if (dataObject != null) { using (This.Selection.DeclareChangeBlock()) { // Forget previously suggested horizontal position TextEditorSelection._ClearSuggestedX(This); // _DoPaste raises a public event -- could raise recoverable exception. if (TextEditorCopyPaste._DoPaste(This, dataObject, /*isDragDrop:*/ false)) { // Collapse selection to the end // Use backward direction to stay oriented towards pasted content This.Selection.SetCaretToPosition(This.Selection.End, LogicalDirection.Backward, /*allowStopAtLineEnd:*/ false, /*allowStopNearSpace:*/ true); // Clear springload formatting if (This.Selection is TextSelection) { ((TextSelection)This.Selection).ClearSpringloadFormatting(); } } } // PUBLIC EVENT RAISED HERE AS CHANGEBLOCK CLOSES! } // If we replaced the entire document content, background layout will // kick in. Force it to complete now. if (forceLayoutUpdate) { This.Selection.ValidateLayout(); } }