diff options
| author | Paul D'Pong | 2020-06-01 19:54:11 +0000 |
|---|---|---|
| committer | Andrey Loskutov | 2020-06-09 16:19:07 +0000 |
| commit | f0e5443edc48b0e62dc70d93b75a95c62a611e9b (patch) | |
| tree | 2d73f0f8318c9ffac61a58db47aab5bbe3f35648 | |
| parent | 64d974b6b5b9a62b9914615dd447387f2d8e78cd (diff) | |
| download | eclipse.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.java | 22 |
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 { |
