From: Tuukka Lehtonen Date: Sat, 10 Nov 2018 10:43:08 +0000 (+0200) Subject: Fixed GraphExplorerImpl to set selection upon keyboard-based selection X-Git-Tag: v1.43.0~136^2~286 X-Git-Url: https://gerrit.simantics.org/r/gitweb?a=commitdiff_plain;h=75dc26dacf421e7027e959643963af1efdf10986;p=simantics%2Fplatform.git Fixed GraphExplorerImpl to set selection upon keyboard-based selection Previously scrolling the selection using the keyboard and then pressing Enter to open the selected resource would result in the wrong resource being opened because the selection hadn't yet propagated through the postSelection event. gitlab #184 Change-Id: Ib1f837b3cb8eb70b32508e4abee36cfa995886ed --- diff --git a/bundles/org.simantics.browsing.ui.swt/src/org/simantics/browsing/ui/swt/GraphExplorerImpl.java b/bundles/org.simantics.browsing.ui.swt/src/org/simantics/browsing/ui/swt/GraphExplorerImpl.java index 0168ad864..df4860d42 100644 --- a/bundles/org.simantics.browsing.ui.swt/src/org/simantics/browsing/ui/swt/GraphExplorerImpl.java +++ b/bundles/org.simantics.browsing.ui.swt/src/org/simantics/browsing/ui/swt/GraphExplorerImpl.java @@ -1552,10 +1552,12 @@ class GraphExplorerImpl extends GraphExplorerImplBase implements Listener, Graph }); OpenStrategy os = new OpenStrategy(tree); + os.addSelectionListener(SelectionListener.widgetSelectedAdapter(e -> { + resetSelectionFromWidget(); + })); os.addPostSelectionListener(SelectionListener.widgetSelectedAdapter(e -> { //System.out.println("OPENSTRATEGY: post selection changed: " + e); - resetSelection(); - selectionProvider.firePostSelection(selectionProvider.getSelection()); + resetSelectionFromWidgetAndFirePostSelection(true); })); // This listener takes care of updating the set of currently selected @@ -1578,12 +1580,32 @@ class GraphExplorerImpl extends GraphExplorerImplBase implements Listener, Graph }); } - private void resetSelection() { - final ISelection selection = getWidgetSelection(); + /** + * @return the new selection if it was different from the old selection in + * {@link #selectionProvider} + */ + private ISelection resetSelectionFromWidget() { + ISelection widgetSelection = getWidgetSelection(); // System.out.println("resetSelection()"); // System.out.println(" provider selection: " + selectionProvider.getSelection()); -// System.out.println(" widget selection: " + selection); - selectionProvider.setAndFireNonEqualSelection(selection); +// System.out.println(" widget selection: " + widgetSelection); + boolean equals = selectionProvider.selectionEquals(widgetSelection); + selectionProvider.setSelectionWithoutFiring(widgetSelection); + return equals ? null : widgetSelection; + } + + /** + * @return the new selection if it was different from the old selection in + * {@link #selectionProvider} + */ + private boolean resetSelectionFromWidgetAndFirePostSelection(boolean force) { + ISelection s = resetSelectionFromWidget(); + boolean fire = s != null || force; + if (fire) { + //System.out.println("FIRING POST-SELECTION: " + selectionProvider.getSelection()); + selectionProvider.firePostSelection(selectionProvider.getSelection()); + } + return fire; } protected void setDefaultProcessors() { @@ -2300,7 +2322,7 @@ class GraphExplorerImpl extends GraphExplorerImplBase implements Listener, Graph // System.out.println("MODCOUNT: " + modCount + " vs. " + count); if (modCount != count) return; - resetSelection(); + resetSelectionFromWidgetAndFirePostSelection(false); } }); }