Bug 581248 - CellVisualUpdateEvent incorrect for header regions when
scrolled
Signed-off-by: Dirk Fauth <dirk.fauth@googlemail.com>
Change-Id: I866d868d36eb105fd8f8d4fe6deb99758276841f
diff --git a/org.eclipse.nebula.widgets.nattable.core/src/org/eclipse/nebula/widgets/nattable/layer/event/CellVisualUpdateEvent.java b/org.eclipse.nebula.widgets.nattable.core/src/org/eclipse/nebula/widgets/nattable/layer/event/CellVisualUpdateEvent.java
index e078f4f..255bcb3 100644
--- a/org.eclipse.nebula.widgets.nattable.core/src/org/eclipse/nebula/widgets/nattable/layer/event/CellVisualUpdateEvent.java
+++ b/org.eclipse.nebula.widgets.nattable.core/src/org/eclipse/nebula/widgets/nattable/layer/event/CellVisualUpdateEvent.java
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2013, 2020 Dirk Fauth and others.
+ * Copyright (c) 2013, 2022 Dirk Fauth and others.
*
* This program and the accompanying materials are made
* available under the terms of the Eclipse Public License 2.0
@@ -15,6 +15,7 @@
import org.eclipse.nebula.widgets.nattable.grid.layer.DimensionallyDependentLayer;
import org.eclipse.nebula.widgets.nattable.layer.ILayer;
import org.eclipse.nebula.widgets.nattable.layer.cell.ILayerCell;
+import org.eclipse.nebula.widgets.nattable.viewport.ViewportLayer;
/**
* Specialization of the CellVisualChangeEvent. The only difference is the
@@ -66,6 +67,17 @@
if (!(localLayer instanceof DimensionallyDependentLayer)) {
columnPos = localLayer.underlyingToLocalColumnPosition(getLayer(), this.columnPosition);
rowPos = localLayer.underlyingToLocalRowPosition(getLayer(), this.rowPosition);
+ } else {
+ DimensionallyDependentLayer ddl = (DimensionallyDependentLayer) localLayer;
+
+ if (ddl.getHorizontalLayerDependency() instanceof ViewportLayer) {
+ int columnIndex = this.layer.getColumnIndexByPosition(this.columnPosition);
+ columnPos = ((ViewportLayer) ddl.getHorizontalLayerDependency()).getColumnPositionByIndex(columnIndex);
+ }
+ if (ddl.getVerticalLayerDependency() instanceof ViewportLayer) {
+ int rowIndex = this.layer.getRowIndexByPosition(this.rowPosition);
+ rowPos = ((ViewportLayer) ddl.getVerticalLayerDependency()).getRowPositionByIndex(rowIndex);
+ }
}
if (columnPos < 0 || rowPos < 0) {