+static void
+gtk_sctree_change_focus_row_expansion (GtkCTree *ctree,
+ GtkCTreeExpansionType action)
+{
+ GtkCList *clist;
+ GtkCTreeNode *node;
+
+ g_return_if_fail (GTK_IS_CTREE (ctree));
+
+ clist = GTK_CLIST (ctree);
+
+ if (gdk_display_pointer_is_grabbed (gtk_widget_get_display (GTK_WIDGET (ctree))) &&
+ GTK_WIDGET_HAS_GRAB (ctree))
+ return;
+
+ if (!(node =
+ GTK_CTREE_NODE (g_list_nth (clist->row_list, clist->focus_row))) ||
+ GTK_CTREE_ROW (node)->is_leaf || !(GTK_CTREE_ROW (node)->children))
+ return;
+
+ switch (action)
+ {
+ case GTK_CTREE_EXPANSION_EXPAND:
+ gtk_ctree_expand_recursive (ctree, node);
+ break;
+ case GTK_CTREE_EXPANSION_EXPAND_RECURSIVE:
+ gtk_ctree_expand_recursive (ctree, node);
+ break;
+ case GTK_CTREE_EXPANSION_COLLAPSE:
+ gtk_ctree_collapse (ctree, node);
+ break;
+ case GTK_CTREE_EXPANSION_COLLAPSE_RECURSIVE:
+ gtk_ctree_collapse_recursive (ctree, node);
+ break;
+ case GTK_CTREE_EXPANSION_TOGGLE:
+ gtk_ctree_toggle_expansion_recursive (ctree, node);
+ break;
+ case GTK_CTREE_EXPANSION_TOGGLE_RECURSIVE:
+ gtk_ctree_toggle_expansion_recursive (ctree, node);
+ break;
+ }
+}