From 06b18b345f96c678515359697c62cd8eef5350d6 Mon Sep 17 00:00:00 2001 From: Carolyn MacLeod Date: Thu, 24 Jan 2013 14:28:49 -0500 Subject: Bug 398711 - NPE in AbstractTreeViewer.getSelection trying to select non-expanded nodes --- .../Eclipse SWT/win32/org/eclipse/swt/widgets/Tree.java | 11 +++++++++++ 1 file changed, 11 insertions(+) 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 -- cgit