diff options
author | Felipe Heidrich <fheidric> | 2006-05-24 19:02:17 +0000 |
---|---|---|
committer | Felipe Heidrich <fheidric> | 2006-05-24 19:02:17 +0000 |
commit | 6b4eb74d15e26618fcb4ad17ce13ebce86b30449 (patch) | |
tree | 5a4944825d210dcc9b2d5a33efb21b9d940ca503 | |
parent | 5fda137801f2b3efe3d55523905860f4f4ea39ec (diff) | |
download | eclipse.platform.swt-6b4eb74d15e26618fcb4ad17ce13ebce86b30449.tar.gz eclipse.platform.swt-6b4eb74d15e26618fcb4ad17ce13ebce86b30449.tar.xz eclipse.platform.swt-6b4eb74d15e26618fcb4ad17ce13ebce86b30449.zip |
bug 143236 - setItemCount(0) leaking TreeItems - 3.2 RC6 fix
-rw-r--r-- | bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Tree.java | 15 |
1 files changed, 7 insertions, 8 deletions
diff --git a/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Tree.java b/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Tree.java index 1a4dc6716f..62a529fe72 100644 --- a/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Tree.java +++ b/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Tree.java @@ -2124,7 +2124,6 @@ void releaseWidget () { } void remove (int /*long*/ parentIter, int start, int end) { - checkWidget(); if (start > end) return; int itemCount = OS.gtk_tree_model_iter_n_children (modelHandle, parentIter); if (!(0 <= start && start <= end && end < itemCount)) { @@ -2137,14 +2136,14 @@ void remove (int /*long*/ parentIter, int start, int end) { OS.gtk_tree_model_iter_nth_child (modelHandle, iter, parentIter, index); int[] value = new int[1]; OS.gtk_tree_model_get (modelHandle, iter, ID_COLUMN, value, -1); - if (value [0] != -1) { - TreeItem item = items [value [0]]; - if (item != null && !item.isDisposed ()) item.release (false); - items [value [0]] = null; + TreeItem item = value [0] != -1 ? items [value [0]] : null; + if (item != null && !item.isDisposed ()) { + item.dispose (); + } else { + OS.g_signal_handlers_block_matched (selection, OS.G_SIGNAL_MATCH_DATA, 0, 0, 0, 0, CHANGED); + OS.gtk_tree_store_remove (modelHandle, iter); + OS.g_signal_handlers_unblock_matched (selection, OS.G_SIGNAL_MATCH_DATA, 0, 0, 0, 0, CHANGED); } - OS.g_signal_handlers_block_matched (selection, OS.G_SIGNAL_MATCH_DATA, 0, 0, 0, 0, CHANGED); - OS.gtk_tree_store_remove (modelHandle, iter); - OS.g_signal_handlers_unblock_matched (selection, OS.G_SIGNAL_MATCH_DATA, 0, 0, 0, 0, CHANGED); } OS.g_free (iter); } |