Bug 398711 - NPE in AbstractTreeViewer.getSelection trying to select
non-expanded nodes
diff --git a/bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/widgets/Tree.java b/bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/widgets/Tree.java
index 03ee3b5..71ad922 100644
--- a/bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/widgets/Tree.java
+++ b/bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/widgets/Tree.java
@@ -4317,6 +4317,7 @@
}
return;
}
+ expandToItem(item);
TVITEM tvItem = new TVITEM ();
tvItem.mask = OS.TVIF_HANDLE | OS.TVIF_STATE;
tvItem.stateMask = OS.TVIS_SELECTED;
@@ -4865,6 +4866,7 @@
}
} else {
if (index != selection.length) {
+ expandToItem(_getItem(hItem));
tvItem.state = OS.TVIS_SELECTED;
OS.SendMessage (handle, OS.TVM_SETITEM, 0, tvItem);
}
@@ -5015,6 +5017,7 @@
}
} else {
if (index != length) {
+ expandToItem(item);
tvItem.state = OS.TVIS_SELECTED;
OS.SendMessage (handle, OS.TVM_SETITEM, 0, tvItem);
}
@@ -5025,6 +5028,14 @@
OS.SetWindowLongPtr (handle, OS.GWLP_WNDPROC, oldProc);
}
+void expandToItem(TreeItem item) {
+ TreeItem parentItem = item.getParentItem();
+ if (parentItem != null && !parentItem.getExpanded()) {
+ expandToItem(parentItem);
+ parentItem.setExpanded(true);
+ }
+}
+
/**
* Sets the column used by the sort indicator for the receiver. A null
* value will clear the sort indicator. The current sort column is cleared