Palette DnD - fix bug when the user holds the left mouse button 71/18271/1
Marcos CARDINOT [Mon, 20 Jun 2016 23:52:48 +0000 (00:52 +0100)]
How to reproduce:
- open the palette browser
- select a block (left click)
- select another block BUT don't release the left mouse button
- drag it to the xcos view
[result]-> both blocks are selected and dragged to xcos
[expected]-> only the second block should be selected (except if ctrl is down)

Change-Id: I95727872fb374238b5a9057fda2048bacd9c36a4

scilab/modules/xcos/src/java/org/scilab/modules/xcos/palette/PaletteBlockCtrl.java
scilab/modules/xcos/src/java/org/scilab/modules/xcos/palette/listener/PaletteDragGestureListener.java

index 8fb044e..6a2b718 100644 (file)
@@ -74,7 +74,7 @@ public final class PaletteBlockCtrl {
 
         DragSource dragSource = DragSource.getDefaultDragSource();
         dragSource.createDefaultDragGestureRecognizer(this.getView(),
-                DnDConstants.ACTION_COPY, DRAG_LISTENER);
+                DnDConstants.ACTION_COPY_OR_MOVE, DRAG_LISTENER);
     }
 
     /**
index e519445..420b3e3 100644 (file)
@@ -14,6 +14,7 @@ package org.scilab.modules.xcos.palette.listener;
 
 import java.awt.Point;
 import java.awt.datatransfer.Transferable;
+import java.awt.dnd.DnDConstants;
 import java.awt.dnd.DragGestureEvent;
 import java.awt.dnd.DragGestureListener;
 import java.awt.dnd.InvalidDnDOperationException;
@@ -49,6 +50,11 @@ public final class PaletteDragGestureListener implements DragGestureListener {
         if (paletteCtrl == null) {
             return;
         }
+
+        // ctrl is not down ? clear selections
+        if (e.getDragAction() != DnDConstants.ACTION_COPY) {
+            PaletteCtrl.clearSelections();
+        }
         blockCtrl.setSelected(true);
 
         if (PaletteManagerView.get() == null) {