summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorFelipe Heidrich <fheidric>2006-05-24 19:02:17 +0000
committerFelipe Heidrich <fheidric>2006-05-24 19:02:17 +0000
commit6b4eb74d15e26618fcb4ad17ce13ebce86b30449 (patch)
tree5a4944825d210dcc9b2d5a33efb21b9d940ca503
parent5fda137801f2b3efe3d55523905860f4f4ea39ec (diff)
downloadeclipse.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.java15
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);
}