zxcalc / quantomatic

Quantomatic is a tool for doing automated graph rewriting.
http://quantomatic.github.io
151 stars 22 forks source link

Selection not released in editor #239

Open rossduncan opened 6 years ago

rossduncan commented 6 years ago

This is hard to reproduce, but happens not infrequently. Sometimes when a subgraph is selected in the editor it is impossible to deselect without changing tools. This means that every subsequent mouse-down is interpreted as a drag of the previously selected subgraph. The correct behaviour is that click should deselect the current selection and select the clicked on thing (if any).

Here is the resulting stack trace that spews when this occurs.

[info] 10:21:25: Simproc: basic-simp: Finished 0.076s
[error] Exception in thread "AWT-EventQueue-0" java.lang.IndexOutOfBoundsException: Index -1 out-of-bounds for length 5
[error]     at java.base/jdk.internal.util.Preconditions.outOfBounds(Preconditions.java:64)
[error]     at java.base/jdk.internal.util.Preconditions.outOfBoundsCheckIndex(Preconditions.java:70)
[error]     at java.base/jdk.internal.util.Preconditions.checkIndex(Preconditions.java:248)
[error]     at java.base/java.util.Objects.checkIndex(Objects.java:372)
[error]     at java.base/java.util.ArrayList.get(ArrayList.java:440)
[error]     at java.desktop/javax.swing.JTabbedPane.setTitleAt(JTabbedPane.java:1323)
[error]     at scala.swing.TabbedPane$Page.title_$eq(TabbedPane.scala:42)
[error]     at quanto.gui.ClosablePage.title_$eq(ClosableTabbedPane.scala:22)
[error]     at quanto.gui.DocumentPage$$anonfun$1.applyOrElse(DocumentPage.scala:19)
[error]     at quanto.gui.DocumentPage$$anonfun$1.applyOrElse(DocumentPage.scala:17)
[error]     at scala.runtime.AbstractPartialFunction.apply(AbstractPartialFunction.scala:34)
[error]     at scala.swing.Reactions$Impl.$anonfun$apply$1(Reactions.scala:24)
[error]     at scala.swing.Reactions$Impl.$anonfun$apply$1$adapted(Reactions.scala:24)
[error]     at scala.collection.immutable.List.foreach(List.scala:389)
[error]     at scala.collection.generic.TraversableForwarder.foreach(TraversableForwarder.scala:35)
[error]     at scala.collection.generic.TraversableForwarder.foreach$(TraversableForwarder.scala:35)
[error]     at scala.collection.mutable.ListBuffer.foreach(ListBuffer.scala:44)
[error]     at scala.swing.Reactions$Impl.apply(Reactions.scala:24)
[error]     at scala.swing.Reactions$Impl.apply(Reactions.scala:18)
[error]     at scala.swing.Publisher.$anonfun$publish$1(Publisher.scala:46)
[error]     at scala.swing.Publisher.$anonfun$publish$1$adapted(Publisher.scala:46)
[error]     at scala.collection.Iterator.foreach(Iterator.scala:944)
[error]     at scala.collection.Iterator.foreach$(Iterator.scala:944)
[error]     at scala.swing.SingleRefCollection$$anon$4.foreach(Publisher.scala:108)
[error]     at scala.collection.IterableLike.foreach(IterableLike.scala:71)
[error]     at scala.collection.IterableLike.foreach$(IterableLike.scala:70)
[error]     at scala.swing.RefSet.foreach(Publisher.scala:165)
[error]     at scala.swing.Publisher.publish(Publisher.scala:46)
[error]     at scala.swing.Publisher.publish$(Publisher.scala:46)
[error]     at quanto.gui.Document.publish(Document.scala:25)
[error]     at quanto.gui.Document$$anonfun$1.applyOrElse(Document.scala:254)
[error]     at quanto.gui.Document$$anonfun$1.applyOrElse(Document.scala:252)
[error]     at scala.runtime.AbstractPartialFunction.apply(AbstractPartialFunction.scala:34)
[error]     at scala.swing.Reactions$Impl.$anonfun$apply$1(Reactions.scala:24)
[error]     at scala.swing.Reactions$Impl.$anonfun$apply$1$adapted(Reactions.scala:24)
[error]     at scala.collection.immutable.List.foreach(List.scala:389)
[error]     at scala.collection.generic.TraversableForwarder.foreach(TraversableForwarder.scala:35)
[error]     at scala.collection.generic.TraversableForwarder.foreach$(TraversableForwarder.scala:35)
[error]     at scala.collection.mutable.ListBuffer.foreach(ListBuffer.scala:44)
[error]     at scala.swing.Reactions$Impl.apply(Reactions.scala:24)
[error]     at scala.swing.Reactions$Impl.apply(Reactions.scala:18)
[error]     at scala.swing.Publisher.$anonfun$publish$1(Publisher.scala:46)
[error]     at scala.swing.Publisher.$anonfun$publish$1$adapted(Publisher.scala:46)
[error]     at scala.collection.Iterator.foreach(Iterator.scala:944)
[error]     at scala.collection.Iterator.foreach$(Iterator.scala:944)
[error]     at scala.swing.SingleRefCollection$$anon$4.foreach(Publisher.scala:108)
[error]     at scala.collection.IterableLike.foreach(IterableLike.scala:71)
[error]     at scala.collection.IterableLike.foreach$(IterableLike.scala:70)
[error]     at scala.swing.RefSet.foreach(Publisher.scala:165)
[error]     at scala.swing.Publisher.publish(Publisher.scala:46)
[error]     at scala.swing.Publisher.publish$(Publisher.scala:46)
[error]     at quanto.gui.UndoStack.publish(UndoStack.scala:15)
[error]     at quanto.gui.UndoStack.commit(UndoStack.scala:58)
[error]     at quanto.gui.UndoStack.register(UndoStack.scala:78)
[error]     at quanto.gui.GraphEditController.quanto$gui$GraphEditController$$addBBox(GraphEditController.scala:244)
[error]     at quanto.gui.GraphEditController$$anonfun$2.applyOrElse(GraphEditController.scala:738)
[error]     at quanto.gui.GraphEditController$$anonfun$2.applyOrElse(GraphEditController.scala:493)
[error]     at scala.runtime.AbstractPartialFunction.apply(AbstractPartialFunction.scala:34)
[error]     at scala.swing.Reactions$Impl.$anonfun$apply$1(Reactions.scala:24)
[error]     at scala.swing.Reactions$Impl.$anonfun$apply$1$adapted(Reactions.scala:24)
[error]     at scala.collection.immutable.List.foreach(List.scala:389)
[error]     at scala.collection.generic.TraversableForwarder.foreach(TraversableForwarder.scala:35)
[error]     at scala.collection.generic.TraversableForwarder.foreach$(TraversableForwarder.scala:35)
[error]     at scala.collection.mutable.ListBuffer.foreach(ListBuffer.scala:44)
[error]     at scala.swing.Reactions$Impl.apply(Reactions.scala:24)
[error]     at scala.swing.Reactions$Impl.apply(Reactions.scala:18)
[error]     at scala.swing.Publisher.$anonfun$publish$1(Publisher.scala:46)
[error]     at scala.swing.Publisher.$anonfun$publish$1$adapted(Publisher.scala:46)
[error]     at scala.collection.Iterator.foreach(Iterator.scala:944)
[error]     at scala.collection.Iterator.foreach$(Iterator.scala:944)
[error]     at scala.swing.SingleRefCollection$$anon$4.foreach(Publisher.scala:108)
[error]     at scala.collection.IterableLike.foreach(IterableLike.scala:71)
[error]     at scala.collection.IterableLike.foreach$(IterableLike.scala:70)
[error]     at scala.swing.RefSet.foreach(Publisher.scala:165)
[error]     at scala.swing.Publisher.publish(Publisher.scala:46)
[error]     at scala.swing.Publisher.publish$(Publisher.scala:46)
[error]     at scala.swing.Component$mouse$$anon$3.publish(Component.scala:125)
[error]     at scala.swing.Component$mouse$$anon$3$$anon$6.mouseReleased(Component.scala:136)
[error]     at java.desktop/java.awt.AWTEventMulticaster.mouseReleased(AWTEventMulticaster.java:297)
[error]     at java.desktop/java.awt.Component.processMouseEvent(Component.java:6589)
[error]     at java.desktop/javax.swing.JComponent.processMouseEvent(JComponent.java:3342)
[error]     at java.desktop/java.awt.Component.processEvent(Component.java:6354)
[error]     at java.desktop/java.awt.Container.processEvent(Container.java:2261)
[error]     at java.desktop/java.awt.Component.dispatchEventImpl(Component.java:4966)
[error]     at java.desktop/java.awt.Container.dispatchEventImpl(Container.java:2319)
[error]     at java.desktop/java.awt.Component.dispatchEvent(Component.java:4798)
[error]     at java.desktop/java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4914)
[error]     at java.desktop/java.awt.LightweightDispatcher.processMouseEvent(Container.java:4543)
[error]     at java.desktop/java.awt.LightweightDispatcher.dispatchEvent(Container.java:4484)
[error]     at java.desktop/java.awt.Container.dispatchEventImpl(Container.java:2305)
[error]     at java.desktop/java.awt.Window.dispatchEventImpl(Window.java:2772)
[error]     at java.desktop/java.awt.Component.dispatchEvent(Component.java:4798)
[error]     at java.desktop/java.awt.EventQueue.dispatchEventImpl(EventQueue.java:772)
[error]     at java.desktop/java.awt.EventQueue.access$600(EventQueue.java:97)
[error]     at java.desktop/java.awt.EventQueue$4.run(EventQueue.java:721)
[error]     at java.desktop/java.awt.EventQueue$4.run(EventQueue.java:715)
[error]     at java.base/java.security.AccessController.doPrivileged(Native Method)
[error]     at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:87)
[error]     at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:97)
[error]     at java.desktop/java.awt.EventQueue$5.run(EventQueue.java:745)
[error]     at java.desktop/java.awt.EventQueue$5.run(EventQueue.java:743)
[error]     at java.base/java.security.AccessController.doPrivileged(Native Method)
[error]     at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:87)
[error]     at java.desktop/java.awt.EventQueue.dispatchEvent(EventQueue.java:742)
[error]     at java.desktop/java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:203)
[error]     at java.desktop/java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:124)
[error]     at java.desktop/java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:113)
[error]     at java.desktop/java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:109)
[error]     at java.desktop/java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
[error]     at java.desktop/java.awt.EventDispatchThread.run(EventDispatchThread.java:90)