optimize clear() and clearAll()
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 ceb51cf..711c81a 100755
--- 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
@@ -1674,6 +1674,7 @@
item = tvItem.lParam != -1 ? items [(int)/*64*/tvItem.lParam] : null;
}
if (item != null) {
+ if ((style & SWT.VIRTUAL) != 0 && !item.cached) return;
item.clear ();
item.redraw ();
}
@@ -1702,9 +1703,21 @@
checkWidget ();
int /*long*/ hItem = OS.SendMessage (handle, OS.TVM_GETNEXTITEM, OS.TVGN_ROOT, 0);
if (hItem == 0) return;
- TVITEM tvItem = new TVITEM ();
- tvItem.mask = OS.TVIF_HANDLE | OS.TVIF_PARAM;
- clearAll (hItem, tvItem, all);
+ if (all) {
+ boolean redraw = false;
+ for (int i=0; i<items.length; i++) {
+ TreeItem item = items [i];
+ if (item != null && item != currentItem) {
+ item.clear ();
+ redraw = true;
+ }
+ }
+ if (redraw) OS.InvalidateRect (handle, null, true);
+ } else {
+ TVITEM tvItem = new TVITEM ();
+ tvItem.mask = OS.TVIF_HANDLE | OS.TVIF_PARAM;
+ clearAll (hItem, tvItem, all);
+ }
}
void clearAll (int /*long*/ hItem, TVITEM tvItem, boolean all) {