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 298447
Collapse All | Expand All

(-)src/org/eclipse/swt/dnd/ByteArrayTransfer.java (-6 / +8 lines)
Lines 150-161 Link Here
150
 * @see Transfer#nativeToJava
150
 * @see Transfer#nativeToJava
151
 */
151
 */
152
public void javaToNative (Object object, TransferData transferData) {
152
public void javaToNative (Object object, TransferData transferData) {
153
	if (!checkByteArray(object) || !isSupportedType(transferData)) {
153
  if( !checkByteArray( object ) || !isSupportedType( transferData ) ) {
154
		DND.error(DND.ERROR_INVALID_DATA);
154
    DND.error( DND.ERROR_INVALID_DATA );
155
	}
155
  }
156
	byte[] data = (byte[])object;
156
  byte[] data = ( byte[] )object;
157
	System.arraycopy( data, 0, transferData.data, 0, data.length );
157
  //fix for Bug 298447
158
	transferData.result = 1;
158
  transferData.data = new byte[ data.length ];
159
  System.arraycopy( data, 0, transferData.data, 0, data.length );
160
  transferData.result = 1;
159
}
161
}
160
162
161
/**
163
/**
(-)src/org/eclipse/swt/internal/widgets/displaykit/DNDSupport_Test.java (+61 lines)
Lines 241-246 Link Here
241
    assertEquals( "Hello World!", dropEvent.data );
241
    assertEquals( "Hello World!", dropEvent.data );
242
  }
242
  }
243
243
244
  // see Bug 298447
245
  public void testByteArrayTransfer() {
246
    ByteArrayTransfer myTransfer = new ByteArrayTransfer(){
247
      protected int[] getTypeIds() {
248
        return new int[]{ 99 };
249
      }
250
      protected String[] getTypeNames() {
251
        return new String[] { "byteTransfer" };
252
      }
253
    };    
254
    final java.util.List log = new ArrayList();
255
    Display display = new Display();
256
    Shell shell = new Shell( display );
257
    Control dragSourceControl = new Label( shell, SWT.NONE );
258
    DragSource dragSource = new DragSource( dragSourceControl, DND.DROP_MOVE );
259
    dragSource.setTransfer( new Transfer[] { myTransfer } );
260
    Control dropTargetControl = new Label( shell, SWT.NONE );
261
    DropTarget dropTarget = new DropTarget( dropTargetControl, DND.DROP_MOVE );
262
    dropTarget.setTransfer( new Transfer[] { myTransfer } );
263
    dropTarget.addDropListener( new DropTargetAdapter() {
264
      public void dropAccept( final DropTargetEvent event ) {
265
        log.add( event );
266
      }
267
      public void drop( final DropTargetEvent event ) {
268
        log.add( event );
269
      }
270
    } );
271
    dragSource.addDragListener( new DragSourceAdapter(){
272
      public void dragSetData( final DragSourceEvent event ) {
273
        log.add( event );
274
        event.data = new byte[]{ 34, 94 };
275
      }
276
    } );
277
    shell.open();
278
    String displayId = DisplayUtil.getId( display );
279
    // Simulate request that sends a drop event
280
    Fixture.fakeResponseWriter();
281
    Fixture.fakeRequestParam( RequestParams.UIROOT, displayId );
282
    int typeId = myTransfer.getSupportedTypes()[ 0 ].type;
283
    createDropTargetEvent( dropTargetControl,
284
                           dragSourceControl,
285
                           "dropAccept",
286
                           1,
287
                           2,
288
                           "move",
289
                           typeId,
290
                           1 );
291
    // run life cycle
292
    Fixture.executeLifeCycleFromServerThread();
293
    assertEquals( 3, log.size() );
294
    DragSourceEvent dragSetDataEvent = ( DragSourceEvent )log.get( 1 );
295
    assertEquals( DragSourceEvent.DRAG_SET_DATA, dragSetDataEvent.getID() );
296
    TransferData dataType = dragSetDataEvent.dataType;
297
    assertTrue( myTransfer.isSupportedType( dataType ) );
298
    DropTargetEvent dropEvent = ( DropTargetEvent )log.get( 2 );
299
    assertEquals( DropTargetEvent.DROP, dropEvent.getID() );
300
    byte[] data = ( byte[] )dropEvent.data;
301
    assertEquals( 34, data[ 0 ] );
302
    assertEquals( 94, data[ 1 ] );
303
  }
304
244
  public void testInvalidDataOnDragSetData() {
305
  public void testInvalidDataOnDragSetData() {
245
    final java.util.List log = new ArrayList();
306
    final java.util.List log = new ArrayList();
246
    Display display = new Display();
307
    Display display = new Display();

Return to bug 298447