]> gerrit.simantics Code Review - simantics/platform.git/commitdiff
Fixed synchronousness problem in drag event transferable handling 86/2686/1
authorTuukka Lehtonen <tuukka.lehtonen@semantum.fi>
Fri, 28 Sep 2018 06:19:02 +0000 (09:19 +0300)
committerMarko Luukkainen <marko.luukkainen@semantum.fi>
Mon, 25 Feb 2019 10:21:25 +0000 (10:21 +0000)
Previously handleEvent would post the event for asynchronous handling
while handling the drag starting via Transferable requires the drag to
be started synchronously within the AWT drag start event handler.

Added syncHandleEvent to AbstractEventHandler to support this.

gitlab #112

Change-Id: I694844fbfc1be74b9f6b620afc8fc441a0ab4d31
(cherry picked from commit 96ae58fda842dcd8266192eeb1399324b092154a)

bundles/org.simantics.diagram/src/org/simantics/diagram/elements/TextNode.java
bundles/org.simantics.scenegraph/src/org/simantics/scenegraph/g2d/events/adapter/AWTMouseEventAdapter.java
bundles/org.simantics.scenegraph/src/org/simantics/scenegraph/g2d/events/adapter/AbstractEventAdapter.java

index 43653cbd0930abc7da98159406c44a71122ed235..0b33ae3c4f65dda2250adf361cfeb7868d872056 100644 (file)
@@ -62,7 +62,6 @@ import org.simantics.scenegraph.g2d.events.MouseEvent.MouseClickEvent;
 import org.simantics.scenegraph.g2d.events.MouseEvent.MouseDoubleClickedEvent;
 import org.simantics.scenegraph.g2d.events.MouseEvent.MouseDragBegin;
 import org.simantics.scenegraph.g2d.events.MouseEvent.MouseMovedEvent;
-import org.simantics.scenegraph.g2d.events.NodeEventHandler;
 import org.simantics.scenegraph.g2d.events.command.CommandEvent;
 import org.simantics.scenegraph.g2d.events.command.Commands;
 import org.simantics.scenegraph.utils.GeometryUtils;
index e01876c6d0000dfa1049631cf9d766cf8fbc4713..d5b2aac411e4ac48d39b38a343657450d0e805a5 100644 (file)
@@ -317,7 +317,7 @@ public class AWTMouseEventAdapter extends AbstractEventAdapter implements MouseL
                             controlPos,
                             getScreenPosition(e));
 
-                    handleEvent(event);
+                    syncHandleEvent(event);
 
                     if (event.transferable != null) {
                         ds.startDrag(dge, null, event.transferable, null);
index ef718456847e26c59b273c8c82429ba0594ad0c8..a0e0fd47feaecdf4f834db1d24230ac29b535413 100644 (file)
@@ -53,4 +53,13 @@ public abstract class AbstractEventAdapter {
             delegator.handleEvent(e);
     }
 
+    protected void syncHandleEvent(Event e) {
+        if (queue instanceof IEventHandler)
+            ((IEventHandler) queue).handleEvent(e);
+        else if (delegator != null && EventTypes.passes(delegator, e))
+            delegator.handleEvent(e);
+        else
+            throw new UnsupportedOperationException("Cannot handle event synchronously, no handler available: " + e);
+    }
+
 }