Some Eclipse Foundation services are deprecated, or will be soon. Please ensure you've read this important communication.
View | Details | Raw Unified | Return to bug 133276
Collapse All | Expand All

(-)Eclipse SWT Drag and Drop/win32/org/eclipse/swt/dnd/DropTarget.java (-1 / +27 lines)
Lines 266-271 Link Here
266
	TransferData[] allowedDataTypes = new TransferData[event.dataTypes.length];
266
	TransferData[] allowedDataTypes = new TransferData[event.dataTypes.length];
267
	System.arraycopy(event.dataTypes, 0, allowedDataTypes, 0, allowedDataTypes.length);
267
	System.arraycopy(event.dataTypes, 0, allowedDataTypes, 0, allowedDataTypes.length);
268
	notifyListeners(DND.DragEnter, event);
268
	notifyListeners(DND.DragEnter, event);
269
	if (control == null || control.isDisposed()) {
270
		OS.MoveMemory(pdwEffect, new int[] {COM.DROPEFFECT_NONE}, 4);
271
		return COM.S_FALSE;
272
	}
273
269
	refresh();
274
	refresh();
270
	if (event.detail == DND.DROP_DEFAULT) {
275
	if (event.detail == DND.DROP_DEFAULT) {
271
		event.detail = (allowedOperations & DND.DROP_MOVE) != 0 ? DND.DROP_MOVE : DND.DROP_NONE;
276
		event.detail = (allowedOperations & DND.DROP_MOVE) != 0 ? DND.DROP_MOVE : DND.DROP_NONE;
Lines 307-313 Link Here
307
	
312
	
308
	iDataObject.Release();
313
	iDataObject.Release();
309
	iDataObject = null;
314
	iDataObject = null;
310
	return COM.S_OK;
315
	
316
	if (control == null || control.isDisposed())
317
		return COM.S_FALSE;
318
	else
319
		return COM.S_OK;
311
}
320
}
312
321
313
int DragOver(int grfKeyState, int pt_x,	int pt_y, int pdwEffect) {
322
int DragOver(int grfKeyState, int pt_x,	int pt_y, int pdwEffect) {
Lines 334-339 Link Here
334
		event.dataType = selectedDataType;
343
		event.dataType = selectedDataType;
335
	}
344
	}
336
	notifyListeners(event.type, event);
345
	notifyListeners(event.type, event);
346
	if (control == null || control.isDisposed()) {
347
		OS.MoveMemory(pdwEffect, new int[] {COM.DROPEFFECT_NONE}, 4);
348
		return COM.S_FALSE;
349
	}
337
	refresh();
350
	refresh();
338
	if (event.detail == DND.DROP_DEFAULT) {
351
	if (event.detail == DND.DROP_DEFAULT) {
339
		event.detail = (allowedOperations & DND.DROP_MOVE) != 0 ? DND.DROP_MOVE : DND.DROP_NONE;
352
		event.detail = (allowedOperations & DND.DROP_MOVE) != 0 ? DND.DROP_MOVE : DND.DROP_NONE;
Lines 369-374 Link Here
369
	event.item = effect.getItem(pt_x, pt_y);
382
	event.item = effect.getItem(pt_x, pt_y);
370
	event.detail = DND.DROP_NONE;
383
	event.detail = DND.DROP_NONE;
371
	notifyListeners(DND.DragLeave, event);
384
	notifyListeners(DND.DragLeave, event);
385
	if (control == null || control.isDisposed()){
386
		OS.MoveMemory(pdwEffect, new int[] {COM.DROPEFFECT_NONE}, 4);	
387
		return COM.S_FALSE;
388
	}
372
	refresh();
389
	refresh();
373
	
390
	
374
	event = new DNDEvent();
391
	event = new DNDEvent();
Lines 385-390 Link Here
385
	event.dataType = selectedDataType;
402
	event.dataType = selectedDataType;
386
	event.detail = selectedOperation;
403
	event.detail = selectedOperation;
387
	notifyListeners(DND.DropAccept,event);
404
	notifyListeners(DND.DropAccept,event);
405
	if (control == null || control.isDisposed()){
406
		OS.MoveMemory(pdwEffect, new int[] {COM.DROPEFFECT_NONE}, 4);	
407
		return COM.S_FALSE;
408
	}
409
	
388
	refresh();
410
	refresh();
389
	
411
	
390
	selectedDataType = null;
412
	selectedDataType = null;
Lines 425-430 Link Here
425
	} finally {
447
	} finally {
426
		OS.ImageList_DragShowNolock(true);
448
		OS.ImageList_DragShowNolock(true);
427
	}
449
	}
450
	if (control == null || control.isDisposed()){
451
		OS.MoveMemory(pdwEffect, new int[] {COM.DROPEFFECT_NONE}, 4);	
452
		return COM.S_FALSE;
453
	}
428
	refresh();
454
	refresh();
429
	selectedOperation = DND.DROP_NONE;
455
	selectedOperation = DND.DROP_NONE;
430
	if ((allowedOperations & event.detail) == event.detail) {
456
	if ((allowedOperations & event.detail) == event.detail) {
(-)Eclipse SWT Drag and Drop/win32/org/eclipse/swt/dnd/DragSource.java (+3 lines)
Lines 319-324 Link Here
319
		image.dispose();
319
		image.dispose();
320
	}
320
	}
321
	display.setData(key, oldValue);
321
	display.setData(key, oldValue);
322
	if (control == null || control.isDisposed()) return;
323
	
322
	int operation = osToOp(pdwEffect[0]);
324
	int operation = osToOp(pdwEffect[0]);
323
	if (dataEffect == DND.DROP_MOVE) {
325
	if (dataEffect == DND.DROP_MOVE) {
324
		operation = (operation == DND.DROP_NONE || operation == DND.DROP_COPY) ? DND.DROP_TARGET_MOVE : DND.DROP_MOVE;
326
		operation = (operation == DND.DROP_NONE || operation == DND.DROP_COPY) ? DND.DROP_TARGET_MOVE : DND.DROP_MOVE;
Lines 452-457 Link Here
452
	event.time = OS.GetMessageTime();
454
	event.time = OS.GetMessageTime();
453
	event.dataType = transferData;
455
	event.dataType = transferData;
454
	notifyListeners(DND.DragSetData,event);
456
	notifyListeners(DND.DragSetData,event);
457
	if (control == null || control.isDisposed()) return COM.E_FAIL;
455
	
458
	
456
	// get matching transfer agent to perform conversion
459
	// get matching transfer agent to perform conversion
457
	Transfer transfer = null;
460
	Transfer transfer = null;
(-)Eclipse SWT Drag and Drop/motif/org/eclipse/swt/dnd/DropTarget.java (+23 lines)
Lines 382-387 Link Here
382
		event.time = callbackData.timeStamp;
382
		event.time = callbackData.timeStamp;
383
		event.detail = DND.DROP_NONE;
383
		event.detail = DND.DROP_NONE;
384
		notifyListeners(DND.DragLeave, event);
384
		notifyListeners(DND.DragLeave, event);
385
		if (control == null || control.isDisposed()) {
386
			callbackData.dropSiteStatus = (byte)OS.XmDROP_SITE_INVALID;
387
			callbackData.operation = opToOsOp(DND.DROP_NONE);
388
			OS.memmove(call_data, callbackData, XmDragProcCallbackStruct.sizeof);
389
		}
385
		return;
390
		return;
386
	}
391
	}
387
	
392
	
Lines 421-426 Link Here
421
	
426
	
422
	updateDragOverHover(DRAGOVER_HYSTERESIS, event);
427
	updateDragOverHover(DRAGOVER_HYSTERESIS, event);
423
	notifyListeners(event.type, event);
428
	notifyListeners(event.type, event);
429
	if (control == null || control.isDisposed()) {
430
		callbackData.dropSiteStatus = (byte)OS.XmDROP_SITE_INVALID;
431
		callbackData.operation = opToOsOp(DND.DROP_NONE);
432
		OS.memmove(call_data, callbackData, XmDragProcCallbackStruct.sizeof);
433
		return;
434
	}
435
424
	if (event.detail == DND.DROP_DEFAULT) {
436
	if (event.detail == DND.DROP_DEFAULT) {
425
		event.detail = (allowedOperations & DND.DROP_MOVE) != 0 ? DND.DROP_MOVE : DND.DROP_NONE;
437
		event.detail = (allowedOperations & DND.DROP_MOVE) != 0 ? DND.DROP_MOVE : DND.DROP_NONE;
426
	}
438
	}
Lines 473-478 Link Here
473
	event.dataType = selectedDataType;
485
	event.dataType = selectedDataType;
474
	event.detail = selectedOperation;
486
	event.detail = selectedOperation;
475
	notifyListeners(DND.DropAccept,event);
487
	notifyListeners(DND.DropAccept,event);
488
	if (control == null || control.isDisposed()) {
489
		// this was not a successful drop
490
		int[] args = new int[] {OS.XmNtransferStatus, OS.XmTRANSFER_FAILURE, OS.XmNnumDropTransfers, 0};
491
		dropTransferObject = OS.XmDropTransferStart(droppedEventData.dragContext, args, args.length / 2);
492
		return;
493
	}
476
	selectedDataType = null;
494
	selectedDataType = null;
477
	if (event.dataType != null) {
495
	if (event.dataType != null) {
478
		for (int i = 0; i < allowedDataTypes.length; i++) {
496
		for (int i = 0; i < allowedDataTypes.length; i++) {
Lines 832-837 Link Here
832
	int xtContext = OS.XtDisplayToApplicationContext (getDisplay().xDisplay);
850
	int xtContext = OS.XtDisplayToApplicationContext (getDisplay().xDisplay);
833
	OS.XtAppSetSelectionTimeout (xtContext, selectionTimeout);
851
	OS.XtAppSetSelectionTimeout (xtContext, selectionTimeout);
834
	
852
	
853
	if (control == null || control.isDisposed()) {
854
		selectedOperation = DND.DROP_NONE;
855
		return;
856
	}
857
	
835
	//notify source of action taken
858
	//notify source of action taken
836
	if ((selectedOperation & DND.DROP_MOVE) == DND.DROP_MOVE) {
859
	if ((selectedOperation & DND.DROP_MOVE) == DND.DROP_MOVE) {
837
		int[] args = new int[]{control.handle, DELETE_TYPE};
860
		int[] args = new int[]{control.handle, DELETE_TYPE};
(-)Eclipse SWT Drag and Drop/motif/org/eclipse/swt/dnd/DragSource.java (+4 lines)
Lines 293-298 Link Here
293
	//event.time = ??;
293
	//event.time = ??;
294
	event.dataType = transferData;
294
	event.dataType = transferData;
295
	notifyListeners(DND.DragSetData,event);
295
	notifyListeners(DND.DragSetData,event);
296
	if (control == null || control.isDisposed()) return 0;
296
297
297
	Transfer transferAgent = null;
298
	Transfer transferAgent = null;
298
	for (int i = 0; i < transferAgents.length; i++){
299
	for (int i = 0; i < transferAgents.length; i++){
Lines 332-337 Link Here
332
	event.doit = true;
333
	event.doit = true;
333
	event.feedback = DND.FEEDBACK_DEFAULT;
334
	event.feedback = DND.FEEDBACK_DEFAULT;
334
	notifyListeners(DND.DragStart, event);
335
	notifyListeners(DND.DragStart, event);
336
	if (control == null || control.isDisposed()) return;
335
	if (!event.doit || transferAgents == null || transferAgents.length == 0) { 
337
	if (!event.doit || transferAgents == null || transferAgents.length == 0) { 
336
		int time = xEvent.time;
338
		int time = xEvent.time;
337
		int dc = OS.XmGetDragContext(control.handle, time);
339
		int dc = OS.XmGetDragContext(control.handle, time);
Lines 397-402 Link Here
397
}
399
}
398
400
399
int dragDropFinishCallback(int widget, int client_data, int call_data) {
401
int dragDropFinishCallback(int widget, int client_data, int call_data) {
402
	if (control == null || control.isDisposed()) return 0;
400
	
403
	
401
	// uncomment the following code when we allow users to specify their own source icons
404
	// uncomment the following code when we allow users to specify their own source icons
402
	// release the pre set source icon 
405
	// release the pre set source icon 
Lines 414-419 Link Here
414
	return 0;
417
	return 0;
415
}
418
}
416
int dropFinishCallback(int widget, int client_data, int call_data) {
419
int dropFinishCallback(int widget, int client_data, int call_data) {
420
	if (control == null || control.isDisposed()) return 0;
417
	XmDropFinishCallbackStruct data = new XmDropFinishCallbackStruct();
421
	XmDropFinishCallbackStruct data = new XmDropFinishCallbackStruct();
418
	OS.memmove(data, call_data, XmDropFinishCallbackStruct.sizeof);
422
	OS.memmove(data, call_data, XmDropFinishCallbackStruct.sizeof);
419
	if (data.dropAction != OS.XmDROP || data.dropSiteStatus != OS.XmDROP_SITE_VALID) {
423
	if (data.dropAction != OS.XmDROP || data.dropSiteStatus != OS.XmDROP_SITE_VALID) {
(-)Eclipse SWT Drag and Drop/gtk/org/eclipse/swt/dnd/DragSource.java (-1 / +2 lines)
Lines 357-363 Link Here
357
	event.time = time; 
357
	event.time = time; 
358
	event.dataType = transferData; 
358
	event.dataType = transferData; 
359
	notifyListeners(DND.DragSetData, event);
359
	notifyListeners(DND.DragSetData, event);
360
		
360
	if (control == null || control.isDisposed()) return;
361
	
361
	Transfer transfer = null;
362
	Transfer transfer = null;
362
	for (int i = 0; i < transferAgents.length; i++) {
363
	for (int i = 0; i < transferAgents.length; i++) {
363
		if (transferAgents[i].isSupportedType(transferData)) {
364
		if (transferAgents[i].isSupportedType(transferData)) {
(-)Eclipse SWT Drag and Drop/gtk/org/eclipse/swt/dnd/DropTarget.java (+7 lines)
Lines 390-395 Link Here
390
	selectedDataType = null;
390
	selectedDataType = null;
391
	selectedOperation = DND.DROP_NONE;
391
	selectedOperation = DND.DROP_NONE;
392
	notifyListeners(DND.DropAccept,event);
392
	notifyListeners(DND.DropAccept,event);
393
	if (control == null || control.isDisposed()) return false;
394
	
393
	if (event.dataType != null) {
395
	if (event.dataType != null) {
394
		for (int i = 0; i < allowedDataTypes.length; i++) {
396
		for (int i = 0; i < allowedDataTypes.length; i++) {
395
			if (allowedDataTypes[i].type == event.dataType.type) {
397
			if (allowedDataTypes[i].type == event.dataType.type) {
Lines 459-464 Link Here
459
	selectedDataType = null;
461
	selectedDataType = null;
460
	selectedOperation = DND.DROP_NONE;
462
	selectedOperation = DND.DROP_NONE;
461
	notifyListeners(event.type, event);	
463
	notifyListeners(event.type, event);	
464
	if (control == null || control.isDisposed()) {
465
		OS.gdk_drag_status(context, 0, time);
466
		return false;
467
	}
468
462
	if (event.detail == DND.DROP_DEFAULT) {
469
	if (event.detail == DND.DROP_DEFAULT) {
463
		event.detail = (allowedOperations & DND.DROP_MOVE) != 0 ? DND.DROP_MOVE : DND.DROP_NONE;
470
		event.detail = (allowedOperations & DND.DROP_MOVE) != 0 ? DND.DROP_MOVE : DND.DROP_NONE;
464
	}
471
	}
(-)Eclipse SWT Drag and Drop/carbon/org/eclipse/swt/dnd/DropTarget.java (-2 / +15 lines)
Lines 338-343 Link Here
338
	event.time = (int)System.currentTimeMillis();
338
	event.time = (int)System.currentTimeMillis();
339
	event.detail = DND.DROP_NONE;
339
	event.detail = DND.DROP_NONE;
340
	notifyListeners(DND.DragLeave, event);
340
	notifyListeners(DND.DragLeave, event);
341
	if (control == null || control.isDisposed()) return OS.dragNotAcceptedErr;	
341
	
342
	
342
	event = new DNDEvent();
343
	event = new DNDEvent();
343
	if (!setEventData(theDrag, event)) {
344
	if (!setEventData(theDrag, event)) {
Lines 354-360 Link Here
354
	selectedDataType = null;
355
	selectedDataType = null;
355
	selectedOperation = DND.DROP_NONE;
356
	selectedOperation = DND.DROP_NONE;
356
	notifyListeners(DND.DropAccept, event);
357
	notifyListeners(DND.DropAccept, event);
357
	
358
	if (control == null || control.isDisposed()) return OS.dragNotAcceptedErr;	
359
358
	if (event.dataType != null) {
360
	if (event.dataType != null) {
359
		for (int i = 0; i < allowedDataTypes.length; i++) {
361
		for (int i = 0; i < allowedDataTypes.length; i++) {
360
			if (allowedDataTypes[i].type == event.dataType.type) {
362
			if (allowedDataTypes[i].type == event.dataType.type) {
Lines 412-417 Link Here
412
	if ((allowedOperations & event.detail) == event.detail) {
414
	if ((allowedOperations & event.detail) == event.detail) {
413
		selectedOperation = event.detail;
415
		selectedOperation = event.detail;
414
	}
416
	}
417
	if (control == null || control.isDisposed()) {
418
		selectedOperation = DND.DROP_NONE;
419
	}
415
	//notify source of action taken
420
	//notify source of action taken
416
	int action = opToOsOp(selectedOperation);
421
	int action = opToOsOp(selectedOperation);
417
	OS.SetDragDropAction(theDrag, action);
422
	OS.SetDragDropAction(theDrag, action);
Lines 432-438 Link Here
432
		event.time = (int)System.currentTimeMillis();
437
		event.time = (int)System.currentTimeMillis();
433
		event.detail = DND.DROP_NONE;
438
		event.detail = DND.DROP_NONE;
434
		notifyListeners(DND.DragLeave, event);
439
		notifyListeners(DND.DragLeave, event);
435
		return OS.noErr;
440
		if (control == null || control.isDisposed()) 
441
			return OS.dragNotAcceptedErr;
442
		else
443
			return OS.noErr;
436
	}
444
	}
437
	
445
	
438
	int oldKeyOperation = keyOperation;
446
	int oldKeyOperation = keyOperation;
Lines 473-478 Link Here
473
	selectedDataType = null;
481
	selectedDataType = null;
474
	selectedOperation = DND.DROP_NONE;
482
	selectedOperation = DND.DROP_NONE;
475
	notifyListeners(event.type, event);
483
	notifyListeners(event.type, event);
484
	if (control == null || control.isDisposed()) {
485
		OS.SetDragDropAction(theDrag, opToOsOp(DND.DROP_NONE));
486
		OS.SetThemeCursor(OS.kThemeNotAllowedCursor);
487
		return OS.dragNotAcceptedErr;		
488
	}
476
489
477
	if (event.detail == DND.DROP_DEFAULT) {
490
	if (event.detail == DND.DROP_DEFAULT) {
478
		event.detail = (allowedOperations & DND.DROP_MOVE) != 0 ? DND.DROP_MOVE : DND.DROP_NONE;
491
		event.detail = (allowedOperations & DND.DROP_MOVE) != 0 ? DND.DROP_MOVE : DND.DROP_NONE;
(-)Eclipse SWT Drag and Drop/carbon/org/eclipse/swt/dnd/DragSource.java (-1 / +3 lines)
Lines 260-265 Link Here
260
	event.doit = true;
260
	event.doit = true;
261
	event.feedback = DND.FEEDBACK_DEFAULT;
261
	event.feedback = DND.FEEDBACK_DEFAULT;
262
	notifyListeners(DND.DragStart, event);
262
	notifyListeners(DND.DragStart, event);
263
	if (control == null || control.isDisposed()) return;
263
	if (!event.doit || transferAgents == null || transferAgents.length == 0) return;
264
	if (!event.doit || transferAgents == null || transferAgents.length == 0) return;
264
	
265
	
265
	int[] theDrag = new int[1];
266
	int[] theDrag = new int[1];
Lines 286-292 Link Here
286
			event.time = (int)System.currentTimeMillis(); 
287
			event.time = (int)System.currentTimeMillis(); 
287
			event.dataType = transferData; 
288
			event.dataType = transferData; 
288
			notifyListeners(DND.DragSetData, event);
289
			notifyListeners(DND.DragSetData, event);
289
			if (event.data == null) return;
290
			if (event.data == null || control == null || control.isDisposed()) return;
290
			Transfer transferAgent = transferAgents[i];
291
			Transfer transferAgent = transferAgents[i];
291
			for (int j = 0; j < types.length; j++) {
292
			for (int j = 0; j < types.length; j++) {
292
				transferData.type = types[j];
293
				transferData.type = types[j];
Lines 363-368 Link Here
363
	event.time = (int)System.currentTimeMillis(); 
364
	event.time = (int)System.currentTimeMillis(); 
364
	event.dataType = transferData; 
365
	event.dataType = transferData; 
365
	notifyListeners(DND.DragSetData, event);
366
	notifyListeners(DND.DragSetData, event);
367
	if (control == null || control.isDisposed()) return OS.badDragFlavorErr;
366
	Transfer transfer = null;
368
	Transfer transfer = null;
367
	for (int i = 0; i < transferAgents.length; i++) {
369
	for (int i = 0; i < transferAgents.length; i++) {
368
		if (transferAgents[i].isSupportedType(transferData)) {
370
		if (transferAgents[i].isSupportedType(transferData)) {

Return to bug 133276