Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPaul D'Pong2020-06-01 19:54:11 +0000
committerAndrey Loskutov2020-06-09 16:19:07 +0000
commitf0e5443edc48b0e62dc70d93b75a95c62a611e9b (patch)
tree2d73f0f8318c9ffac61a58db47aab5bbe3f35648
parent64d974b6b5b9a62b9914615dd447387f2d8e78cd (diff)
downloadeclipse.platform.swt-f0e5443edc48b0e62dc70d93b75a95c62a611e9b.tar.gz
eclipse.platform.swt-f0e5443edc48b0e62dc70d93b75a95c62a611e9b.tar.xz
eclipse.platform.swt-f0e5443edc48b0e62dc70d93b75a95c62a611e9b.zip
Bug 563393 - [GTK] Crash on selection in Tree
Reverted change from Bug 411452. Moved releasing of the tree items until after the view model is cleared. Verified that reverting would not cause the bug again + fixed crashing on selection of Tree. Change-Id: I076f83849327828c05f811f750610cec38f49ff3 Signed-off-by: Paul D'Pong <sdamrong@redhat.com>
-rw-r--r--bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Tree.java22
1 files changed, 10 insertions, 12 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 7adccf7cef..59b2c64ddd 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
@@ -2912,30 +2912,28 @@ void remove (long parentIter, int start, int end) {
public void removeAll () {
checkWidget ();
checkSetDataInProcessBeforeRemoval();
- for (int i=0; i<items.length; i++) {
- TreeItem item = items [i];
- if (item != null && !item.isDisposed ()) item.release (false);
- }
- items = new TreeItem[4];
+
long selection = GTK.gtk_tree_view_get_selection (handle);
OS.g_signal_handlers_block_matched (selection, OS.G_SIGNAL_MATCH_DATA, 0, 0, 0, 0, CHANGED);
+
if (fixAccessibility ()) {
ignoreAccessibility = true;
}
- /**
- * Hack for GTK3 in order to not get cellDataFunc while clearing as it calls it for each row-deleted
- * and this causes AAIOB in getId as items are already cleared but the model is not yet.
- * By disconnecting the model from the handle while clearing no intermediate signals are emitted.
- */
- GTK.gtk_tree_view_set_model(handle, 0);
+
GTK.gtk_tree_store_clear (modelHandle);
- GTK.gtk_tree_view_set_model(handle, modelHandle);
+
if (fixAccessibility ()) {
ignoreAccessibility = false;
OS.g_object_notify (handle, OS.model);
}
OS.g_signal_handlers_unblock_matched (selection, OS.G_SIGNAL_MATCH_DATA, 0, 0, 0, 0, CHANGED);
+ for (int i=0; i<items.length; i++) {
+ TreeItem item = items [i];
+ if (item != null && !item.isDisposed ()) item.release (false);
+ }
+ items = new TreeItem[4];
+
if (!searchEnabled ()) {
GTK.gtk_tree_view_set_search_column (handle, -1);
} else {

Back to the top