major
minor
defect
major
minor
Symptom
Die Funktion flowClickTarget (Reaktion auf Klicks in der Flow-Chart-Grafikkomponente) kann mit dem Boolean-Parameter "doubleClick" so konfiguriert werden, dass sie auf Doppelklicks reagiert. Der Doppelklick wird nicht immer zuverlässig erkannt; insbesondere bei höherer Netzwerklatenz reagiert das System teilweise nicht.
Ursache
Ein Doppelklick auf eine Fläche, die zugleich per Einfachklick selektierbar ist (SelectableBox), löst durch den ersten Klick clientseitig eine Selektionsänderung aus. Diese wird über JSDiagramControl.onChange -> sendUpdate an den Server synchronisiert. Dieser Update-Request wurde mit aktivierter Wartescheibe (useWaitPane=true) gesendet, wodurch die eingabesperrende Wartescheibe (#waitPane) die Grafikkomponente während des Server-Roundtrips überdeckt.
Bei höherer Latenz ist die Wartescheibe noch sichtbar, wenn der zweite Klick des Doppelklicks eintrifft. Dieser trifft dann die Overlay-Fläche statt des SVG-Elements; der Browser bildet keinen dblclick, und der Doppelklick-Handler wird nicht ausgelöst. (Bei geringer Latenz ist die Wartescheibe vor dem zweiten Klick bereits wieder ausgeblendet, deshalb tritt das Problem nur sporadisch/latenzabhängig auf.)
Das erklärt auch, dass das Problem selbst dann auftritt, wenn die Fläche bereits selektiert ist: Der erneute Klick ruft setSelection(...) auf, dessen Setter afterChanged bedingungslos auslöst, sodass trotzdem ein Update mit Wartescheibe gesendet wird.
Lösung
Die Synchronisation der (clientseitig bereits angewandten) Selektionsänderung erfolgt ohne eingabesperrende Wartescheibe (useWaitPane=false in JSDiagramControl.sendUpdate). Die Selektion ist im Client bereits sichtbar; der Roundtrip muss die Eingabe nicht blockieren, und ein schnell folgender zweiter Klick wird nicht mehr verschluckt.
Die React-Variante (FlowDiagramClientControl) ist nicht betroffen, da sie Kommandos ohne Wartescheibe über ReactBridge.sendCommand (fetch) sendet.