diff options
author | Carolyn MacLeod <Carolyn_MacLeod@ca.ibm.com> | 2012-10-16 16:17:25 -0400 |
---|---|---|
committer | Carolyn MacLeod <Carolyn_MacLeod@ca.ibm.com> | 2012-10-16 16:17:25 -0400 |
commit | 33011ccbbc0b6a948bfc91856458fefc7ae32f4e (patch) | |
tree | ed86f967751a033b721c6505ed7a2156b5c32cb8 /bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse | |
parent | 4d14d1d7f1ee27438fcb7cae794de91c14605b9e (diff) | |
download | eclipse.platform.swt-33011ccbbc0b6a948bfc91856458fefc7ae32f4e.tar.gz eclipse.platform.swt-33011ccbbc0b6a948bfc91856458fefc7ae32f4e.tar.xz eclipse.platform.swt-33011ccbbc0b6a948bfc91856458fefc7ae32f4e.zip |
Bug 259141 - Tree.getSelection() is extremely slow with SWT.VIRTUAL and
SWT.MULTI
Diffstat (limited to 'bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse')
-rw-r--r-- | bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/widgets/Tree.java | 13 |
1 files changed, 9 insertions, 4 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 822b2212d9..da21aac00e 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 @@ -3350,6 +3350,7 @@ public TreeItem getParentItem () { int getSelection (long /*int*/ hItem, TVITEM tvItem, TreeItem [] selection, int index, int count, boolean bigSelection, boolean all) { while (hItem != 0) { + boolean expanded = true; if (OS.IsWinCE || bigSelection) { tvItem.hItem = hItem; OS.SendMessage (handle, OS.TVM_GETITEM, 0, tvItem); @@ -3359,8 +3360,9 @@ int getSelection (long /*int*/ hItem, TVITEM tvItem, TreeItem [] selection, int } index++; } + expanded = (tvItem.state & OS.TVIS_EXPANDED) != 0; } else { - int state = (int)/*64*/OS.SendMessage (handle, OS.TVM_GETITEMSTATE, hItem, OS.TVIS_SELECTED); + int state = (int)/*64*/OS.SendMessage (handle, OS.TVM_GETITEMSTATE, hItem, OS.TVIS_SELECTED | OS.TVIS_EXPANDED); if ((state & OS.TVIS_SELECTED) != 0) { if (tvItem != null && selection != null && index < selection.length) { tvItem.hItem = hItem; @@ -3369,12 +3371,15 @@ int getSelection (long /*int*/ hItem, TVITEM tvItem, TreeItem [] selection, int } index++; } + expanded = (state & OS.TVIS_EXPANDED) != 0; } if (index == count) break; if (all) { - long /*int*/ hFirstItem = OS.SendMessage (handle, OS.TVM_GETNEXTITEM, OS.TVGN_CHILD, hItem); - if ((index = getSelection (hFirstItem, tvItem, selection, index, count, bigSelection, all)) == count) { - break; + if (expanded) { + long /*int*/ hFirstItem = OS.SendMessage (handle, OS.TVM_GETNEXTITEM, OS.TVGN_CHILD, hItem); + if ((index = getSelection (hFirstItem, tvItem, selection, index, count, bigSelection, all)) == count) { + break; + } } hItem = OS.SendMessage (handle, OS.TVM_GETNEXTITEM, OS.TVGN_NEXT, hItem); } else { |