diff options
author | Carolyn MacLeod | 2013-01-24 19:28:49 +0000 |
---|---|---|
committer | Carolyn MacLeod | 2013-01-24 19:40:53 +0000 |
commit | 06b18b345f96c678515359697c62cd8eef5350d6 (patch) | |
tree | e66030b9137e0fec2cacf0e26e6334ce5694dc6d | |
parent | a4d7ec53c56b95b63643bcc5eb962424ffa46e70 (diff) | |
download | eclipse.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.java | 11 |
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 |