Don't fire tree expand/collapse event with null item
Item could be disposed, when expand/collapse notify operation is
processed in GridOperationHandler.
Drop expand/collapse event if item is null (already disposed).
diff --git a/bundles/org.eclipse.rap.nebula.widgets.grid/src/org/eclipse/nebula/widgets/grid/internal/gridkit/GridOperationHandler.java b/bundles/org.eclipse.rap.nebula.widgets.grid/src/org/eclipse/nebula/widgets/grid/internal/gridkit/GridOperationHandler.java
index 70b7aa5..ed20655 100644
--- a/bundles/org.eclipse.rap.nebula.widgets.grid/src/org/eclipse/nebula/widgets/grid/internal/gridkit/GridOperationHandler.java
+++ b/bundles/org.eclipse.rap.nebula.widgets.grid/src/org/eclipse/nebula/widgets/grid/internal/gridkit/GridOperationHandler.java
@@ -24,8 +24,8 @@
import org.eclipse.rap.json.JsonArray;
import org.eclipse.rap.json.JsonObject;
import org.eclipse.rap.json.JsonValue;
-import org.eclipse.rap.rwt.internal.protocol.ControlOperationHandler;
import org.eclipse.rap.rwt.internal.lifecycle.WidgetUtil;
+import org.eclipse.rap.rwt.internal.protocol.ControlOperationHandler;
import org.eclipse.swt.SWT;
import org.eclipse.swt.internal.widgets.CellToolTipUtil;
import org.eclipse.swt.internal.widgets.ICellToolTipAdapter;
@@ -196,7 +196,7 @@
public void handleNotifyDefaultSelection( Grid grid, JsonObject properties ) {
GridItem item = getItem( grid, properties.get( EVENT_PARAM_ITEM ).asString() );
if( item != null ) {
- Event event = createSelectionEvent( SWT.Selection, properties );
+ Event event = createSelectionEvent( SWT.DefaultSelection, properties );
event.item = item;
grid.notifyListeners( SWT.DefaultSelection, event );
}
@@ -208,9 +208,12 @@
* @param item (string) id of expanded item
*/
public void handleNotifyExpand( Grid grid, JsonObject properties ) {
- Event event = new Event();
- event.item = getItem( grid, properties.get( EVENT_PARAM_ITEM ).asString() );
- grid.notifyListeners( SWT.Expand, event );
+ GridItem item = getItem( grid, properties.get( EVENT_PARAM_ITEM ).asString() );
+ if( item != null ) {
+ Event event = new Event();
+ event.item = item;
+ grid.notifyListeners( SWT.Expand, event );
+ }
}
/*
@@ -219,9 +222,12 @@
* @param item (string) id of collapsed item
*/
public void handleNotifyCollapse( Grid grid, JsonObject properties ) {
- Event event = new Event();
- event.item = getItem( grid, properties.get( EVENT_PARAM_ITEM ).asString() );
- grid.notifyListeners( SWT.Collapse, event );
+ GridItem item = getItem( grid, properties.get( EVENT_PARAM_ITEM ).asString() );
+ if( item != null ) {
+ Event event = new Event();
+ event.item = item;
+ grid.notifyListeners( SWT.Collapse, event );
+ }
}
/*
diff --git a/tests/org.eclipse.rap.nebula.widgets.grid.test/src/org/eclipse/nebula/widgets/grid/internal/gridkit/GridOperationHandler_Test.java b/tests/org.eclipse.rap.nebula.widgets.grid.test/src/org/eclipse/nebula/widgets/grid/internal/gridkit/GridOperationHandler_Test.java
index ee31cf7..bf07661 100644
--- a/tests/org.eclipse.rap.nebula.widgets.grid.test/src/org/eclipse/nebula/widgets/grid/internal/gridkit/GridOperationHandler_Test.java
+++ b/tests/org.eclipse.rap.nebula.widgets.grid.test/src/org/eclipse/nebula/widgets/grid/internal/gridkit/GridOperationHandler_Test.java
@@ -11,12 +11,12 @@
package org.eclipse.nebula.widgets.grid.internal.gridkit;
import static org.eclipse.nebula.widgets.grid.GridTestUtil.createGridItems;
+import static org.eclipse.rap.rwt.internal.lifecycle.WidgetUtil.getId;
import static org.eclipse.rap.rwt.internal.protocol.ClientMessageConst.EVENT_COLLAPSE;
import static org.eclipse.rap.rwt.internal.protocol.ClientMessageConst.EVENT_DEFAULT_SELECTION;
import static org.eclipse.rap.rwt.internal.protocol.ClientMessageConst.EVENT_EXPAND;
import static org.eclipse.rap.rwt.internal.protocol.ClientMessageConst.EVENT_SELECTION;
import static org.eclipse.rap.rwt.internal.protocol.ClientMessageConst.EVENT_SET_DATA;
-import static org.eclipse.rap.rwt.internal.lifecycle.WidgetUtil.getId;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertSame;
import static org.mockito.Matchers.any;
@@ -255,6 +255,19 @@
}
@Test
+ public void testHandleNotifyExpand_withDisposedItem() {
+ Grid spyGrid = spy( grid );
+ handler = new GridOperationHandler( spyGrid );
+ GridItem item = new GridItem( spyGrid, SWT.NONE );
+ item.dispose();
+
+ JsonObject properties = new JsonObject().add( "item", getId( item ) );
+ handler.handleNotify( EVENT_EXPAND, properties );
+
+ verify( spyGrid, never() ).notifyListeners( eq( SWT.Expand ), any( Event.class ) );
+ }
+
+ @Test
public void testHandleNotifyCollapse() {
Grid spyGrid = spy( grid );
handler = new GridOperationHandler( spyGrid );
@@ -269,6 +282,19 @@
}
@Test
+ public void testHandleNotifyCollapse_withDisposedItem() {
+ Grid spyGrid = spy( grid );
+ handler = new GridOperationHandler( spyGrid );
+ GridItem item = new GridItem( spyGrid, SWT.NONE );
+ item.dispose();
+
+ JsonObject properties = new JsonObject().add( "item", getId( item ) );
+ handler.handleNotify( EVENT_COLLAPSE, properties );
+
+ verify( spyGrid, never() ).notifyListeners( eq( SWT.Collapse ), any( Event.class ) );
+ }
+
+ @Test
public void testHandleNotifySetData() {
Grid spyGrid = spy( grid );
handler = new GridOperationHandler( spyGrid );