void gb_project_tree_set_context (GbProjectTree *self, IdeContext *context) { GtkTreeModel *model; GtkTreeIter iter; IdeTreeNode *root; g_return_if_fail (GB_IS_PROJECT_TREE (self)); g_return_if_fail (!context || IDE_IS_CONTEXT (context)); model = gtk_tree_view_get_model (GTK_TREE_VIEW (self)); root = ide_tree_node_new (); ide_tree_node_set_item (root, G_OBJECT (context)); ide_tree_set_root (IDE_TREE (self), root); /* * If we only have one toplevel item (underneath root), expand it. */ if ((gtk_tree_model_iter_n_children (model, NULL) == 1) && gtk_tree_model_get_iter_first (model, &iter)) { g_autoptr(IdeTreeNode) node = NULL; gtk_tree_model_get (model, &iter, 0, &node, -1); if (node != NULL) ide_tree_node_expand (node, FALSE); } }
static void gb_project_tree_project_file_trashed (GbProjectTree *self, GFile *file, IdeProject *project) { IdeTreeNode *node; IDE_ENTRY; g_assert (GB_IS_PROJECT_TREE (self)); g_assert (G_IS_FILE (file)); g_assert (IDE_IS_PROJECT (project)); node = ide_tree_find_custom (IDE_TREE (self), compare_to_file, file); if (node != NULL) { IdeTreeNode *parent = ide_tree_node_get_parent (node); ide_tree_node_invalidate (parent); ide_tree_node_expand (parent, TRUE); ide_tree_node_select (parent); } IDE_EXIT; }
static void gb_project_tree_actions_refresh (GSimpleAction *action, GVariant *variant, gpointer user_data) { GbProjectTree *self = user_data; IdeTreeNode *selected; GObject *item = NULL; g_assert (GB_IS_PROJECT_TREE (self)); if ((selected = ide_tree_get_selected (IDE_TREE (self)))) { item = ide_tree_node_get_item (selected); if (item != NULL) g_object_ref (item); } ide_tree_rebuild (IDE_TREE (self)); if (item != NULL) { selected = ide_tree_find_item (IDE_TREE (self), item); if (selected != NULL) { ide_tree_node_expand (selected, TRUE); ide_tree_node_select (selected); ide_tree_scroll_to_node (IDE_TREE (self), selected); } g_object_unref (item); } }
void gb_project_tree_set_context (GbProjectTree *self, IdeContext *context) { GtkTreeModel *model; GtkTreeIter iter; IdeTreeNode *root; IdeProject *project; IdeVcs *vcs; g_return_if_fail (GB_IS_PROJECT_TREE (self)); g_return_if_fail (IDE_IS_CONTEXT (context)); vcs = ide_context_get_vcs (context); g_signal_connect_object (vcs, "changed", G_CALLBACK (gb_project_tree_vcs_changed), self, G_CONNECT_SWAPPED); project = ide_context_get_project (context); g_signal_connect_object (project, "file-renamed", G_CALLBACK (gb_project_tree_project_file_renamed), self, G_CONNECT_SWAPPED); g_signal_connect_object (project, "file-trashed", G_CALLBACK (gb_project_tree_project_file_trashed), self, G_CONNECT_SWAPPED); model = gtk_tree_view_get_model (GTK_TREE_VIEW (self)); root = ide_tree_node_new (); ide_tree_node_set_item (root, G_OBJECT (context)); ide_tree_set_root (IDE_TREE (self), root); /* * If we only have one toplevel item (underneath root), expand it. */ if ((gtk_tree_model_iter_n_children (model, NULL) == 1) && gtk_tree_model_get_iter_first (model, &iter)) { g_autoptr(IdeTreeNode) node = NULL; gtk_tree_model_get (model, &iter, 0, &node, -1); if (node != NULL) ide_tree_node_expand (node, FALSE); } }