diff options
author | Felipe Heidrich <fheidric> | 2009-04-02 20:23:34 +0000 |
---|---|---|
committer | Felipe Heidrich <fheidric> | 2009-04-02 20:23:34 +0000 |
commit | 87a1ac5b2a06bd283b0c41b00b1c4487449dea98 (patch) | |
tree | c64d134389080d080abd77775637b197f1277184 /bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/TreeItem.java | |
parent | 904df56644c9070d336843631d767da03676b792 (diff) | |
download | eclipse.platform.swt-87a1ac5b2a06bd283b0c41b00b1c4487449dea98.tar.gz eclipse.platform.swt-87a1ac5b2a06bd283b0c41b00b1c4487449dea98.tar.xz eclipse.platform.swt-87a1ac5b2a06bd283b0c41b00b1c4487449dea98.zip |
Bug 240033: [Viewers] 'Dialog refresh' has encountered a problem
Diffstat (limited to 'bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/TreeItem.java')
-rw-r--r-- | bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/TreeItem.java | 30 |
1 files changed, 21 insertions, 9 deletions
diff --git a/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/TreeItem.java b/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/TreeItem.java index 4d8eb4b907..8679cad63e 100644 --- a/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/TreeItem.java +++ b/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/TreeItem.java @@ -1135,19 +1135,31 @@ void releaseWidget () { */ public void removeAll () { checkWidget (); - int length = OS.gtk_tree_model_iter_n_children (parent.modelHandle, handle); + int /*long*/ modelHandle = parent.modelHandle; + int length = OS.gtk_tree_model_iter_n_children (modelHandle, handle); if (length == 0) return; int /*long*/ iter = OS.g_malloc (OS.GtkTreeIter_sizeof ()); - int [] index = new int [1]; - while (OS.gtk_tree_model_iter_children (parent.modelHandle, iter, handle)) { - OS.gtk_tree_model_get (parent.modelHandle, iter, Tree.ID_COLUMN, index, -1); - if (index [0] != -1) { - TreeItem item = parent.items [index [0]]; - if (item != null && !item.isDisposed ()) { - item.dispose (); - } + if (iter == 0) error (SWT.ERROR_NO_HANDLES); + if (parent.fixAccessibility ()) { + parent.ignoreAccessibility = true; + } + int /*long*/ selection = OS.gtk_tree_view_get_selection (parent.handle); + int [] value = new int [1]; + while (OS.gtk_tree_model_iter_children (modelHandle, iter, handle)) { + OS.gtk_tree_model_get (modelHandle, iter, Tree.ID_COLUMN, value, -1); + TreeItem item = value [0] != -1 ? parent.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); } } + if (parent.fixAccessibility ()) { + parent.ignoreAccessibility = false; + OS.g_object_notify (parent.handle, OS.model); + } OS.g_free (iter); } |