diff options
| author | Carolyn MacLeod | 2013-02-05 21:16:23 +0000 |
|---|---|---|
| committer | Carolyn MacLeod | 2013-02-05 21:16:23 +0000 |
| commit | 1a14ea69ecd8828d401196778d87114e683d18b8 (patch) | |
| tree | 72583da2c1161b4267d2bf5b0139dffa8d4c0a92 | |
| parent | 7c8383f51b93f7d1d47653a4cf70e9ab97bfb48a (diff) | |
| download | eclipse.platform.swt-1a14ea69ecd8828d401196778d87114e683d18b8.tar.gz eclipse.platform.swt-1a14ea69ecd8828d401196778d87114e683d18b8.tar.xz eclipse.platform.swt-1a14ea69ecd8828d401196778d87114e683d18b8.zip | |
Bug 388628 - [Viewers] ILazyTreeContentProvider: NPE when refreshing
viewer while an inner node is selected and using OwnerDrawLabelProvider
| -rw-r--r-- | bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/widgets/Tree.java | 18 |
1 files changed, 15 insertions, 3 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 6deb574d1c..47980b87c4 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 @@ -3364,7 +3364,12 @@ int getSelection (long /*int*/ hItem, TVITEM tvItem, TreeItem [] selection, int OS.SendMessage (handle, OS.TVM_GETITEM, 0, tvItem); if ((tvItem.state & OS.TVIS_SELECTED) != 0) { if (selection != null && index < selection.length) { - selection [index] = _getItem (hItem, (int)/*64*/tvItem.lParam); + TreeItem item = _getItem (hItem, (int)/*64*/tvItem.lParam); + if (item != null) { + selection [index] = item; + } else { + index--; + } } index++; } @@ -3375,7 +3380,12 @@ int getSelection (long /*int*/ hItem, TVITEM tvItem, TreeItem [] selection, int if (tvItem != null && selection != null && index < selection.length) { tvItem.hItem = hItem; OS.SendMessage (handle, OS.TVM_GETITEM, 0, tvItem); - selection [index] = _getItem (hItem, (int)/*64*/tvItem.lParam); + TreeItem item = _getItem (hItem, (int)/*64*/tvItem.lParam); + if (item != null) { + selection [index] = item; + } else { + index--; + } } index++; } @@ -3423,7 +3433,9 @@ public TreeItem [] getSelection () { tvItem.hItem = hItem; OS.SendMessage (handle, OS.TVM_GETITEM, 0, tvItem); if ((tvItem.state & OS.TVIS_SELECTED) == 0) return new TreeItem [0]; - return new TreeItem [] {_getItem (tvItem.hItem, (int)/*64*/tvItem.lParam)}; + TreeItem item = _getItem (tvItem.hItem, (int)/*64*/tvItem.lParam); + if (item == null) return new TreeItem [0]; + return new TreeItem [] {item}; } int count = 0; TreeItem [] guess = new TreeItem [(style & SWT.VIRTUAL) != 0 ? 8 : 1]; |
