]> gerrit.simantics Code Review - simantics/platform.git/blobdiff - bundles/org.simantics.scenegraph/src/org/simantics/scenegraph/g2d/events/EventQueue.java
Duplicate MouseWheelMovedEvent was not actually fixed
[simantics/platform.git] / bundles / org.simantics.scenegraph / src / org / simantics / scenegraph / g2d / events / EventQueue.java
index b0a9c752b4cbecdad1d38f73574251971eb79502..d3ab613557cc874858b40c36d76d4cf6555e57c3 100644 (file)
@@ -14,6 +14,7 @@ package org.simantics.scenegraph.g2d.events;
 import java.lang.reflect.Method;
 import java.util.LinkedList;
 
+import org.simantics.scenegraph.g2d.events.MouseEvent.MouseWheelMovedEvent;
 import org.simantics.utils.datastructures.ListenerList;
 import org.simantics.utils.threads.IThreadWorkQueue;
 import org.simantics.utils.threads.SyncListenerList;
@@ -41,8 +42,27 @@ public class EventQueue implements IEventQueue, IEventHandler {
         return EventTypes.AnyMask;
     }
 
+    private static final String DISABLE_DUPLICATE_REMOVAL = "org.simantics.scenegraph.g2d.events.disableDuplicateMouseWheelEvent";
+    private static final boolean IGNORE_DUPLICATE = !Boolean.parseBoolean(System.getProperty(DISABLE_DUPLICATE_REMOVAL));
+    
+    private boolean ignoreDuplicateMouseWheelMovedEvent(Event e) {
+        if (IGNORE_DUPLICATE && e instanceof MouseWheelMovedEvent) {
+            MouseWheelMovedEvent event = (MouseWheelMovedEvent) e;
+            // if (e.time > 0 && (lastMouseWheelMovedEvent != null && lastMouseWheelMovedEvent.time < 0)) {
+            // apparently this is a better way to distinguish between SWT & AWT events
+            // SWT based event constructs the scrollAmount to = 0
+            // See org.simantics.g2d.event.adapter.SWTMouseEventAdapter.mouseScrolled(MouseEvent) L171
+            if (event.scrollAmount != MouseWheelMovedEvent.SCROLL_AMOUNT_ZERO) {
+                return true;
+            }
+        }
+        return false;
+    }
+    
     @Override
     public synchronized void queueEvent(Event e) {
+        if (ignoreDuplicateMouseWheelMovedEvent(e))
+            return;
         // coalesce with last
         EventCoalescer[] css = coalescers.getListeners();
         if (css.length > 0 && !queue.isEmpty()) {