Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorCarolyn MacLeod2013-01-24 19:28:49 +0000
committerCarolyn MacLeod2013-01-24 19:40:53 +0000
commit06b18b345f96c678515359697c62cd8eef5350d6 (patch)
treee66030b9137e0fec2cacf0e26e6334ce5694dc6d
parenta4d7ec53c56b95b63643bcc5eb962424ffa46e70 (diff)
downloadeclipse.platform.swt-06b18b345f96c678515359697c62cd8eef5350d6.tar.gz
eclipse.platform.swt-06b18b345f96c678515359697c62cd8eef5350d6.tar.xz
eclipse.platform.swt-06b18b345f96c678515359697c62cd8eef5350d6.zip
Bug 398711 - NPE in AbstractTreeViewer.getSelection trying to select
non-expanded nodes
-rw-r--r--bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/widgets/Tree.java11
1 files changed, 11 insertions, 0 deletions
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 d7706a4b31..7177d3288b 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
@@ -4325,6 +4325,7 @@ public void select (TreeItem item) {
}
return;
}
+ expandToItem(item);
TVITEM tvItem = new TVITEM ();
tvItem.mask = OS.TVIF_HANDLE | OS.TVIF_STATE;
tvItem.stateMask = OS.TVIS_SELECTED;
@@ -4873,6 +4874,7 @@ void setSelection (long /*int*/ hItem, TVITEM tvItem, TreeItem [] selection) {
}
} else {
if (index != selection.length) {
+ expandToItem(_getItem(hItem));
tvItem.state = OS.TVIS_SELECTED;
OS.SendMessage (handle, OS.TVM_SETITEM, 0, tvItem);
}
@@ -5025,6 +5027,7 @@ public void setSelection (TreeItem [] items) {
}
} else {
if (index != length) {
+ expandToItem(item);
tvItem.state = OS.TVIS_SELECTED;
OS.SendMessage (handle, OS.TVM_SETITEM, 0, tvItem);
}
@@ -5035,6 +5038,14 @@ public void setSelection (TreeItem [] items) {
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

Back to the top