@@ -151,7 +151,9 @@ public enum Orientation {
151151
152152 private Orientation orientation = Orientation .HORIZONTAL ;
153153
154- private boolean autoResize = false ;
154+ private boolean autoResize = false ;
155+
156+ private boolean isFromClient = false ;
155157
156158 private static <T > ListDataProvider <T > emptyDataProvider () {
157159 return DataProvider .ofCollection (new LinkedHashSet <>());
@@ -233,21 +235,21 @@ public TwinColGrid(String caption, @NonNull Grid<T> availableGrid,
233235 e -> {
234236 List <T > filteredItems = available .getDataProvider ().withConfigurableFilter ()
235237 .fetch (new Query <>()).collect (Collectors .toList ());
236- updateSelection (new LinkedHashSet <>(filteredItems ), new HashSet <>());
238+ updateSelection (new LinkedHashSet <>(filteredItems ), new HashSet <>(), true );
237239 });
238240
239241 addButton .addClickListener (
240242 e ->
241243 updateSelection (
242- new LinkedHashSet <>(getAvailableGrid ().getSelectedItems ()), new HashSet <>()));
244+ new LinkedHashSet <>(getAvailableGrid ().getSelectedItems ()), new HashSet <>(), true ));
243245
244246 removeButton .addClickListener (
245- e -> updateSelection (new HashSet <>(), getSelectionGrid ().getSelectedItems ()));
247+ e -> updateSelection (new HashSet <>(), getSelectionGrid ().getSelectedItems (), true ));
246248
247249 removeAllButton .addClickListener (
248250 e -> {
249251 List <T > filteredItems = selection .getDataProvider ().withConfigurableFilter ().fetch (new Query <>()).collect (Collectors .toList ());
250- updateSelection (new HashSet <>(), new HashSet <>(filteredItems ));
252+ updateSelection (new HashSet <>(), new HashSet <>(filteredItems ), true );
251253 });
252254
253255 getElement ().getStyle ().set ("display" , "flex" );
@@ -460,7 +462,7 @@ public void removeRightGridClassName(String classname) {
460462 }
461463
462464 public void clearAll () {
463- updateSelection (new HashSet <>(), new HashSet <>(selection .getItems ()));
465+ updateSelection (new HashSet <>(), new HashSet <>(selection .getItems ()), false );
464466 }
465467
466468 private void setDataProvider (ListDataProvider <T > dataProvider ) {
@@ -710,7 +712,7 @@ public void setValue(final Set<T> value) {
710712 .collect (Collectors .toCollection (LinkedHashSet ::new ));
711713 final Set <T > oldValues = new LinkedHashSet <>(selection .getItems ());
712714 oldValues .removeAll (newValues );
713- updateSelection (newValues , oldValues );
715+ updateSelection (newValues , oldValues , false );
714716 }
715717
716718 /**
@@ -762,7 +764,7 @@ public Registration addValueChangeListener(
762764 .addDataProviderListener (
763765 e -> {
764766 ComponentValueChangeEvent <TwinColGrid <T >, Set <T >> e2 =
765- new ComponentValueChangeEvent <>(TwinColGrid .this , TwinColGrid .this , null , true );
767+ new ComponentValueChangeEvent <>(TwinColGrid .this , TwinColGrid .this , null , isFromClient );
766768 listener .valueChanged (e2 );
767769 });
768770 }
@@ -792,7 +794,8 @@ public void setRequiredIndicatorVisible(boolean requiredIndicatorVisible) {
792794 getElement ().setAttribute ("required" , requiredIndicatorVisible );
793795 }
794796
795- private void updateSelection (final Set <T > addedItems , final Set <T > removedItems ) {
797+ private void updateSelection (final Set <T > addedItems , final Set <T > removedItems , boolean isFromClient ) {
798+ this .isFromClient = isFromClient ;
796799 available .getItems ().addAll (removedItems );
797800 available .getItems ().removeAll (addedItems );
798801
@@ -850,6 +853,7 @@ private void configDragAndDrop(
850853 targetModel .grid .addDropListener (
851854 event -> {
852855 if (!draggedItems .isEmpty ()) {
856+ isFromClient = true ;
853857 targetModel .droppedInsideGrid = true ;
854858 T dropOverItem = event .getDropTargetItem ().orElse (null );
855859 addItems (targetModel , draggedItems , dropOverItem , event .getDropLocation ());
@@ -862,6 +866,7 @@ private void configDragAndDrop(
862866 && event .getSource () == draggedGrid
863867 && !draggedItems .contains (dropOverItem )
864868 && !draggedItems .isEmpty ()) {
869+ isFromClient = true ;
865870 sourceModel .getItems ().removeAll (draggedItems );
866871 addItems (sourceModel , draggedItems , dropOverItem , event .getDropLocation ());
867872 draggedItems .clear ();
0 commit comments