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 80bea87334..ff1575b4d0 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 @@ -535,10 +535,7 @@ public boolean getChecked () { */ public boolean getExpanded () { checkWidget(); - long path = GTK.gtk_tree_model_get_path (parent.modelHandle, handle); - boolean answer = GTK.gtk_tree_view_row_expanded (parent.handle, path); - GTK.gtk_tree_path_free (path); - return answer; + return isExpanded; } /** @@ -1226,7 +1223,8 @@ public void setChecked (boolean checked) { public void setExpanded (boolean expanded) { checkWidget(); long path = GTK.gtk_tree_model_get_path (parent.modelHandle, handle); - if (expanded != GTK.gtk_tree_view_row_expanded (parent.handle, path)) { + // Do nothing when the item is a leaf or already expanded + if (expanded != GTK.gtk_tree_view_row_expanded (parent.handle, path) && GTK.gtk_tree_model_iter_n_children (parent.modelHandle, handle) != 0) { if (expanded) { OS.g_signal_handlers_block_matched (parent.handle, OS.G_SIGNAL_MATCH_DATA, 0, 0, 0, 0, TEST_EXPAND_ROW); GTK.gtk_tree_view_expand_row (parent.handle, path, false); @@ -1237,9 +1235,9 @@ public void setExpanded (boolean expanded) { GTK.gtk_tree_view_collapse_row (parent.handle, path); OS.g_signal_handlers_unblock_matched (parent.handle, OS.G_SIGNAL_MATCH_DATA, 0, 0, 0, 0, TEST_COLLAPSE_ROW); } + isExpanded = expanded; } GTK.gtk_tree_path_free (path); - isExpanded = expanded; } diff --git a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_widgets_TreeItem.java b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_widgets_TreeItem.java index 9b5de77c23..5c3fc1f412 100644 --- a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_widgets_TreeItem.java +++ b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_widgets_TreeItem.java @@ -535,6 +535,9 @@ public void test_getBoundsI() { @Test public void test_getExpanded() { + assertFalse(treeItem.getExpanded()); + // do nothing when the item is a leaf + treeItem.setExpanded(true); assertFalse(treeItem.getExpanded()); // there must be at least one subitem before you can set the treeitem expanded new TreeItem(treeItem, 0); @@ -542,6 +545,12 @@ public void test_getExpanded() { assertTrue(treeItem.getExpanded()); treeItem.setExpanded(false); assertFalse(treeItem.getExpanded()); + treeItem.setExpanded(true); + treeItem.removeAll(); + assertTrue(treeItem.getExpanded()); + // do nothing when the item is a leaf + treeItem.setExpanded(false); + assertTrue(treeItem.getExpanded()); } @Test