diff options
author | Xi Yan | 2019-04-01 17:17:47 +0000 |
---|---|---|
committer | Xi Yan | 2019-04-01 17:17:47 +0000 |
commit | 5cd547013e057edf020e3f048738eda50818fdb3 (patch) | |
tree | 3e213e548f4dc95dda1c3f01951b45d955562c7e | |
parent | 5db172a429a6c933259f091ef7e4ddb493a01f31 (diff) | |
download | eclipse.platform.swt-5cd547013e057edf020e3f048738eda50818fdb3.tar.gz eclipse.platform.swt-5cd547013e057edf020e3f048738eda50818fdb3.tar.xz eclipse.platform.swt-5cd547013e057edf020e3f048738eda50818fdb3.zip |
Bug 545994 - [GTK3][Tree] Visible area moved when only expanding element
Fix tree jump regression from bug 489751. Do not set Tree selection to
first item. Keep track of TreeItem parent and deselect GtkTreeSelection
after item is disposed.
Remove /*int*/ cast.
Tested with Bug489751_TreeItemDisposeSelect, Eclipse on X11 and Wayland.
Change-Id: Ice0fbe7d4e656ce63a89cddf2fba5c990c26e085
Signed-off-by: Xi Yan <xixiyan@redhat.com>
3 files changed, 12 insertions, 11 deletions
diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/gtk/library/os.c b/bundles/org.eclipse.swt/Eclipse SWT PI/gtk/library/os.c index c0b33d73db..f2ba212bac 100644 --- a/bundles/org.eclipse.swt/Eclipse SWT PI/gtk/library/os.c +++ b/bundles/org.eclipse.swt/Eclipse SWT PI/gtk/library/os.c @@ -11404,17 +11404,17 @@ JNIEXPORT jlong JNICALL GTK_NATIVE(_1gtk_1tree_1view_1get_1columns) #ifndef NO__1gtk_1tree_1view_1get_1cursor JNIEXPORT void JNICALL GTK_NATIVE(_1gtk_1tree_1view_1get_1cursor) - (JNIEnv *env, jclass that, jlong arg0, jintLongArray arg1, jintLongArray arg2) + (JNIEnv *env, jclass that, jlong arg0, jlongArray arg1, jlongArray arg2) { - jintLong *lparg1=NULL; - jintLong *lparg2=NULL; + jlong *lparg1=NULL; + jlong *lparg2=NULL; GTK_NATIVE_ENTER(env, that, _1gtk_1tree_1view_1get_1cursor_FUNC); - if (arg1) if ((lparg1 = (*env)->GetIntLongArrayElements(env, arg1, NULL)) == NULL) goto fail; - if (arg2) if ((lparg2 = (*env)->GetIntLongArrayElements(env, arg2, NULL)) == NULL) goto fail; + if (arg1) if ((lparg1 = (*env)->GetLongArrayElements(env, arg1, NULL)) == NULL) goto fail; + if (arg2) if ((lparg2 = (*env)->GetLongArrayElements(env, arg2, NULL)) == NULL) goto fail; gtk_tree_view_get_cursor((GtkTreeView *)arg0, (GtkTreePath **)lparg1, (GtkTreeViewColumn **)lparg2); fail: - if (arg2 && lparg2) (*env)->ReleaseIntLongArrayElements(env, arg2, lparg2, 0); - if (arg1 && lparg1) (*env)->ReleaseIntLongArrayElements(env, arg1, lparg1, 0); + if (arg2 && lparg2) (*env)->ReleaseLongArrayElements(env, arg2, lparg2, 0); + if (arg1 && lparg1) (*env)->ReleaseLongArrayElements(env, arg1, lparg1, 0); GTK_NATIVE_EXIT(env, that, _1gtk_1tree_1view_1get_1cursor_FUNC); } #endif diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/gtk/org/eclipse/swt/internal/gtk/GTK.java b/bundles/org.eclipse.swt/Eclipse SWT PI/gtk/org/eclipse/swt/internal/gtk/GTK.java index 250785978c..e45bcb2fc7 100644 --- a/bundles/org.eclipse.swt/Eclipse SWT PI/gtk/org/eclipse/swt/internal/gtk/GTK.java +++ b/bundles/org.eclipse.swt/Eclipse SWT PI/gtk/org/eclipse/swt/internal/gtk/GTK.java @@ -8076,8 +8076,8 @@ public class GTK extends OS { * @param path cast=(GtkTreePath **) * @param focus_column cast=(GtkTreeViewColumn **) */ - public static final native void _gtk_tree_view_get_cursor(long tree_view, long /*int*/[] path, long /*int*/[] focus_column); - public static final void gtk_tree_view_get_cursor(long tree_view, long /*int*/[] path, long /*int*/[] focus_column) { + public static final native void _gtk_tree_view_get_cursor(long tree_view, long [] path, long [] focus_column); + public static final void gtk_tree_view_get_cursor(long tree_view, long [] path, long [] focus_column) { lock.lock(); try { _gtk_tree_view_get_cursor(tree_view, path, focus_column); 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 fd6199efa9..273436bfb3 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 @@ -1094,11 +1094,12 @@ void releaseWidget () { @Override public void dispose () { // Workaround to Bug489751, avoid selecting next node when selected node is disposed. + Tree tmpParent = null; if (parent != null && parent.getItemCount() > 0 && parent.getSelectionCount() == 0) { - parent.setSelection(parent.getItem(0)); - parent.deselectAll(); + tmpParent = parent; } super.dispose(); + if (tmpParent != null) tmpParent.deselectAll(); } /** |