summaryrefslogtreecommitdiffstats
path: root/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/TreeItem.java
diff options
context:
space:
mode:
authorFelipe Heidrich <fheidric>2009-04-02 20:23:34 +0000
committerFelipe Heidrich <fheidric>2009-04-02 20:23:34 +0000
commit87a1ac5b2a06bd283b0c41b00b1c4487449dea98 (patch)
treec64d134389080d080abd77775637b197f1277184 /bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/TreeItem.java
parent904df56644c9070d336843631d767da03676b792 (diff)
downloadeclipse.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.java30
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);
}