static void gb_project_tree_actions__project_rename_file_cb (GObject *object, GAsyncResult *result, gpointer user_data) { IdeProject *project = (IdeProject *)object; g_autoptr(GbRenameFilePopover) popover = user_data; g_autoptr(GError) error = NULL; GbTreeNode *node; GFile *file; GbTree *tree; gboolean expanded = FALSE; g_assert (IDE_IS_PROJECT (project)); g_assert (GB_IS_RENAME_FILE_POPOVER (popover)); if (!ide_project_rename_file_finish (project, result, &error)) { /* todo: display error */ g_warning ("%s", error->message); return; } file = g_object_get_data (G_OBJECT (popover), "G_FILE"); tree = GB_TREE (gtk_popover_get_relative_to (GTK_POPOVER (popover))); g_assert (G_IS_FILE (file)); g_assert (GB_IS_TREE (tree)); if ((node = gb_tree_get_selected (tree))) expanded = gb_tree_node_get_expanded (node); gb_tree_rebuild (tree); node = gb_tree_find_custom (tree, (GEqualFunc)project_item_equal_func, file); if (node != NULL) { gb_tree_node_expand (node, TRUE); if (!expanded) gb_tree_node_collapse (node); gb_tree_node_select (node); gb_tree_scroll_to_node (tree, node); } gtk_widget_hide (GTK_WIDGET (popover)); gtk_widget_destroy (GTK_WIDGET (popover)); }
/** * gb_tree_builder_set_tree: * @builder: (in): A #GbTreeBuilder. * @tree: (in): A #GbTree. * * Sets the tree the builder is associated with. * * Returns: None. * Side effects: None. */ static void gb_tree_builder_set_tree (GbTreeBuilder *builder, GbTree *tree) { GbTreeBuilderPrivate *priv; g_return_if_fail(GB_IS_TREE_BUILDER(builder)); g_return_if_fail(builder->priv->tree == NULL); g_return_if_fail(GB_IS_TREE(tree)); priv = builder->priv; if (tree) { priv->tree = tree; g_object_add_weak_pointer(G_OBJECT(priv->tree), (gpointer *)&priv->tree); } }