View | Details | Raw Unified | Return to bug 165553 | Differences between
and this patch

Collapse All | Expand All

(-)src/org/eclipse/cdt/internal/ui/cview/CView.java (-3 / +4 lines)
Lines 74-79 Link Here
74
import org.eclipse.ui.part.IShowInSource;
74
import org.eclipse.ui.part.IShowInSource;
75
import org.eclipse.ui.part.IShowInTarget;
75
import org.eclipse.ui.part.IShowInTarget;
76
import org.eclipse.ui.part.IShowInTargetList;
76
import org.eclipse.ui.part.IShowInTargetList;
77
import org.eclipse.ui.part.PluginTransfer;
77
import org.eclipse.ui.part.ResourceTransfer;
78
import org.eclipse.ui.part.ResourceTransfer;
78
import org.eclipse.ui.part.ShowInContext;
79
import org.eclipse.ui.part.ShowInContext;
79
import org.eclipse.ui.part.ViewPart;
80
import org.eclipse.ui.part.ViewPart;
Lines 376-382 Link Here
376
		Transfer[] transfers= new Transfer[] {
377
		Transfer[] transfers= new Transfer[] {
377
				LocalSelectionTransfer.getInstance(),
378
				LocalSelectionTransfer.getInstance(),
378
				ResourceTransfer.getInstance(),
379
				ResourceTransfer.getInstance(),
379
				FileTransfer.getInstance()
380
				FileTransfer.getInstance(),
381
				PluginTransfer.getInstance()				
380
		};
382
		};
381
		TransferDragSourceListener[] dragListeners= new TransferDragSourceListener[] {
383
		TransferDragSourceListener[] dragListeners= new TransferDragSourceListener[] {
382
				new SelectionTransferDragAdapter(viewer),
384
				new SelectionTransferDragAdapter(viewer),
Lines 397-404 Link Here
397
			new ResourceTransferDropAdapter(viewer),
399
			new ResourceTransferDropAdapter(viewer),
398
			new FileTransferDropAdapter(viewer)
400
			new FileTransferDropAdapter(viewer)
399
		};
401
		};
400
		viewer.addDropSupport(ops, transfers, new DelegatingDropAdapter(dropListeners));
402
		viewer.addDropSupport(ops, transfers, new DelegatingDropAdapter(viewer, dropListeners));	}
401
	}
402
403
403
	/**
404
	/**
404
	 * Initializes the default preferences
405
	 * Initializes the default preferences
(-)src/org/eclipse/cdt/internal/ui/dnd/DelegatingDropAdapter.java (-7 / +36 lines)
Lines 11-29 Link Here
11
11
12
package org.eclipse.cdt.internal.ui.dnd;
12
package org.eclipse.cdt.internal.ui.dnd;
13
13
14
import org.eclipse.cdt.core.model.ICElement;
15
import org.eclipse.core.resources.IContainer;
14
import org.eclipse.core.runtime.SafeRunner;
16
import org.eclipse.core.runtime.SafeRunner;
15
import org.eclipse.core.runtime.Assert;
17
import org.eclipse.core.runtime.Assert;
16
import org.eclipse.jface.util.SafeRunnable;
18
import org.eclipse.jface.util.SafeRunnable;
19
import org.eclipse.jface.viewers.StructuredViewer;
17
import org.eclipse.swt.dnd.DND;
20
import org.eclipse.swt.dnd.DND;
18
import org.eclipse.swt.dnd.DropTargetEvent;
21
import org.eclipse.swt.dnd.DropTargetEvent;
19
import org.eclipse.swt.dnd.DropTargetListener;
22
import org.eclipse.swt.dnd.DropTargetListener;
20
import org.eclipse.swt.dnd.Transfer;
23
import org.eclipse.swt.dnd.Transfer;
21
import org.eclipse.swt.dnd.TransferData;
24
import org.eclipse.swt.dnd.TransferData;
25
import org.eclipse.ui.part.PluginDropAdapter;
22
26
23
/**
27
/**
24
 * DelegatingDropAdapter
28
 * DelegatingDropAdapter
25
 */
29
 */
26
public class DelegatingDropAdapter implements DropTargetListener {
30
public class DelegatingDropAdapter extends PluginDropAdapter { // implements DropTargetListener {
27
	private TransferDropTargetListener[] fListeners;
31
	private TransferDropTargetListener[] fListeners;
28
	TransferDropTargetListener fCurrentListener;
32
	TransferDropTargetListener fCurrentListener;
29
	private int fOriginalDropType;
33
	private int fOriginalDropType;
Lines 33-39 Link Here
33
	 * 
37
	 * 
34
	 * @param listeners an array of potential listeners
38
	 * @param listeners an array of potential listeners
35
	 */
39
	 */
36
	public DelegatingDropAdapter(TransferDropTargetListener[] listeners) {
40
	public DelegatingDropAdapter(StructuredViewer viewer, TransferDropTargetListener[] listeners) {
41
		super(viewer);
37
		Assert.isNotNull(listeners);
42
		Assert.isNotNull(listeners);
38
		fListeners= listeners;
43
		fListeners= listeners;
39
	}
44
	}
Lines 49-54 Link Here
49
	public void dragEnter(DropTargetEvent event) {
54
	public void dragEnter(DropTargetEvent event) {
50
		fOriginalDropType= event.detail;
55
		fOriginalDropType= event.detail;
51
		updateCurrentListener(event);
56
		updateCurrentListener(event);
57
		super.dragEnter(event);			
52
	}
58
	}
53
59
54
	/**
60
	/**
Lines 85-90 Link Here
85
				}
91
				}
86
			});
92
			});
87
		}
93
		}
94
		super.dragOperationChanged(event);
88
	}
95
	}
89
96
90
	/**
97
	/**
Lines 128-134 Link Here
128
					getCurrentListener().drop(event);
135
					getCurrentListener().drop(event);
129
				}
136
				}
130
			});
137
			});
131
		}
138
		} else
139
			super.drop(event);
132
		setCurrentListener(null, event);
140
		setCurrentListener(null, event);
133
	}
141
	}
134
142
Lines 139-151 Link Here
139
	 * @see DropTargetListener#dropAccept(DropTargetEvent)
147
	 * @see DropTargetListener#dropAccept(DropTargetEvent)
140
	 */
148
	 */
141
	public void dropAccept(final DropTargetEvent event) {
149
	public void dropAccept(final DropTargetEvent event) {
150
		updateCurrentListener(event);
142
		if (getCurrentListener() != null) {
151
		if (getCurrentListener() != null) {
143
			SafeRunner.run(new SafeRunnable() {
152
			SafeRunner.run(new SafeRunnable() {
144
				public void run() throws Exception {
153
				public void run() throws Exception {
145
					getCurrentListener().dropAccept(event);
154
					getCurrentListener().dropAccept(event);
146
				}
155
				}
147
			});
156
			});
148
		}
157
		} else
158
			super.dropAccept(event);
159
		// Copy is the default operation
160
		if(DND.DROP_DEFAULT == event.detail)
161
			event.detail = DND.DROP_COPY;
149
	}
162
	}
150
163
151
	/**
164
	/**
Lines 231-237 Link Here
231
	 * 
244
	 * 
232
	 * @param event the drop target event
245
	 * @param event the drop target event
233
	 */
246
	 */
234
	private void updateCurrentListener(DropTargetEvent event) {
247
	private boolean updateCurrentListener(DropTargetEvent event) {
235
		int originalDetail= event.detail;
248
		int originalDetail= event.detail;
236
		// Revert the detail to the "original" drop type that the User
249
		// Revert the detail to the "original" drop type that the User
237
		// indicated. This is necessary because the previous listener 
250
		// indicated. This is necessary because the previous listener 
Lines 252-264 Link Here
252
					// event detail
265
					// event detail
253
					if (!setCurrentListener(listener, event))
266
					if (!setCurrentListener(listener, event))
254
						event.detail= originalDetail;
267
						event.detail= originalDetail;
255
					return;
268
					return true;
256
				}
269
				}
257
				event.currentDataType= originalDataType;
270
				event.currentDataType= originalDataType;
258
			}
271
			}
259
		}
272
		}
260
		setCurrentListener(null, event);
273
		setCurrentListener(null, event);
261
		event.detail= DND.DROP_NONE;
274
		// event.detail= DND.DROP_NONE;
275
		return false;
276
	}
277
278
	protected Object determineTarget(DropTargetEvent event) {
279
		Object dropTarget = super.determineTarget(event);
280
		if (dropTarget instanceof ICElement)
281
			dropTarget = ((ICElement)dropTarget).getResource();
282
		return dropTarget;
283
	}
284
285
	protected Object getCurrentTarget() {
286
		Object dropTarget =  super.getCurrentTarget();
287
		if (dropTarget instanceof IContainer) {
288
			return dropTarget;
289
		} else
290
			return null;
262
	}
291
	}
263
292
264
}
293
}
(-)src/org/eclipse/cdt/internal/ui/editor/CContentOutlinePage.java (-2 / +2 lines)
Lines 531-538 Link Here
531
		TransferDropTargetListener[] dropListeners= new TransferDropTargetListener[] {
531
		TransferDropTargetListener[] dropListeners= new TransferDropTargetListener[] {
532
			new SelectionTransferDropAdapter(fTreeViewer)
532
			new SelectionTransferDropAdapter(fTreeViewer)
533
		};
533
		};
534
		fTreeViewer.addDropSupport(ops | DND.DROP_DEFAULT, transfers, new DelegatingDropAdapter(dropListeners));
534
		fTreeViewer.addDropSupport(ops | DND.DROP_DEFAULT, transfers, 
535
		
535
				new DelegatingDropAdapter(fTreeViewer, dropListeners));		
536
		// Drag Adapter
536
		// Drag Adapter
537
		TransferDragSourceListener[] dragListeners= new TransferDragSourceListener[] {
537
		TransferDragSourceListener[] dragListeners= new TransferDragSourceListener[] {
538
			new SelectionTransferDragAdapter(fTreeViewer)
538
			new SelectionTransferDragAdapter(fTreeViewer)

Return to bug 165553