diff options
Diffstat (limited to 'server')
-rw-r--r-- | server/src/com/vaadin/ui/Grid.java | 20 |
1 files changed, 16 insertions, 4 deletions
diff --git a/server/src/com/vaadin/ui/Grid.java b/server/src/com/vaadin/ui/Grid.java index f1f17405e8..77a3d28ddf 100644 --- a/server/src/com/vaadin/ui/Grid.java +++ b/server/src/com/vaadin/ui/Grid.java @@ -3694,8 +3694,21 @@ public class Grid extends AbstractComponent implements SelectionNotifier, Object propertyId = getPropertyIdByColumnId(columnIds[i]); order.add(new SortOrder(propertyId, directions[i])); } - setSortOrder(order, userOriginated); + if (!order.equals(getSortOrder())) { + /* + * Actual sort order is not what the client expects. Make + * sure the client gets a state change event by clearing the + * diffstate and marking as dirty + */ + ConnectorTracker connectorTracker = getUI() + .getConnectorTracker(); + JsonObject diffState = connectorTracker + .getDiffState(Grid.this); + diffState.remove("sortColumns"); + diffState.remove("sortDirs"); + markAsDirty(); + } } @Override @@ -5017,9 +5030,6 @@ public class Grid extends AbstractComponent implements SelectionNotifier, cs.sort(propertyIds, directions); - fireEvent(new SortEvent(this, new ArrayList<SortOrder>(sortOrder), - userOriginated)); - if (columns.keySet().containsAll(Arrays.asList(propertyIds))) { String[] columnKeys = new String[items]; for (int i = 0; i < items; ++i) { @@ -5032,6 +5042,8 @@ public class Grid extends AbstractComponent implements SelectionNotifier, getState().sortColumns = new String[] {}; getState(false).sortDirs = new SortDirection[] {}; } + fireEvent(new SortEvent(this, new ArrayList<SortOrder>(sortOrder), + userOriginated)); } else { throw new IllegalStateException( "Container is not sortable (does not implement Container.Sortable)"); |