Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to 'core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/editor/CEditor.java')
-rw-r--r--core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/editor/CEditor.java44
1 files changed, 33 insertions, 11 deletions
diff --git a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/editor/CEditor.java b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/editor/CEditor.java
index 2ef264c6417..1cc2baf7554 100644
--- a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/editor/CEditor.java
+++ b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/editor/CEditor.java
@@ -105,8 +105,6 @@ import org.eclipse.swt.custom.StyledText;
import org.eclipse.swt.custom.VerifyKeyListener;
import org.eclipse.swt.dnd.DND;
import org.eclipse.swt.dnd.DragSource;
-import org.eclipse.swt.dnd.DragSourceListener;
-import org.eclipse.swt.dnd.DropTarget;
import org.eclipse.swt.dnd.TextTransfer;
import org.eclipse.swt.dnd.Transfer;
import org.eclipse.swt.events.VerifyEvent;
@@ -125,6 +123,7 @@ import org.eclipse.ui.IWorkbenchWindow;
import org.eclipse.ui.PlatformUI;
import org.eclipse.ui.actions.ActionContext;
import org.eclipse.ui.actions.ActionGroup;
+import org.eclipse.ui.dnd.IDragAndDropService;
import org.eclipse.ui.editors.text.TextEditor;
import org.eclipse.ui.part.EditorActionBarContributor;
import org.eclipse.ui.part.IShowInSource;
@@ -1526,6 +1525,12 @@ public class CEditor extends TextEditor implements ISelectionChangedListener, IR
*/
private SemanticHighlightingManager fSemanticManager;
+ /**
+ * Custom text drag source listener overriding platform implementation.
+ * @since 4.0
+ */
+ private TextViewerDragAdapter fTextViewerDragAdapter;
+
private static final Set angularIntroducers = new HashSet();
static {
angularIntroducers.add("template"); //$NON-NLS-1$
@@ -2422,22 +2427,39 @@ public class CEditor extends TextEditor implements ISelectionChangedListener, IR
}
/*
- * @see org.eclipse.ui.texteditor.AbstractTextEditor#initializeDragAndDrop(org.eclipse.jface.text.source.ISourceViewer)
+ * @see org.eclipse.ui.texteditor.AbstractTextEditor#installTextDragAndDrop(org.eclipse.jface.text.source.ISourceViewer)
*/
- protected void initializeDragAndDrop(ISourceViewer viewer) {
+ protected void installTextDragAndDrop(ISourceViewer viewer) {
+ if (fTextViewerDragAdapter != null) {
+ // already installed, enable it
+ fTextViewerDragAdapter.setEnabled(true);
+ return;
+ }
+ final IDragAndDropService dndService= (IDragAndDropService)getSite().getService(IDragAndDropService.class);
+ if (dndService == null || viewer == null) {
+ return;
+ }
Control control = viewer.getTextWidget();
int operations = DND.DROP_MOVE | DND.DROP_COPY;
- DropTarget dropTarget = new DropTarget(control, operations);
- ITextEditorDropTargetListener dropTargetListener = new TextEditorDropAdapter(viewer, this);
- dropTarget.setTransfer(dropTargetListener.getTransfers());
- dropTarget.addDropListener(dropTargetListener);
-
DragSource dragSource = new DragSource(control, operations);
Transfer[] dragTypes = new Transfer[] { TextTransfer.getInstance() };
dragSource.setTransfer(dragTypes);
- DragSourceListener dragSourceListener = new TextViewerDragAdapter(viewer, this);
- dragSource.addDragListener(dragSourceListener);
+ fTextViewerDragAdapter = new TextViewerDragAdapter(viewer, this);
+ dragSource.addDragListener(fTextViewerDragAdapter);
+
+ ITextEditorDropTargetListener dropTargetListener = new TextEditorDropAdapter(viewer, this);
+ dndService.addMergedDropTarget(control, operations, dropTargetListener.getTransfers(), dropTargetListener);
+ }
+
+ /*
+ * @see org.eclipse.ui.texteditor.AbstractTextEditor#uninstallTextDragAndDrop(org.eclipse.jface.text.source.ISourceViewer)
+ */
+ protected void uninstallTextDragAndDrop(ISourceViewer viewer) {
+ if (fTextViewerDragAdapter != null) {
+ // uninstall not possible, disable instead
+ fTextViewerDragAdapter.setEnabled(false);
+ }
}
/*

Back to the top