[gnome-builder] project-tree: use IdeProject::file-renamed
- From: Christian Hergert <chergert src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-builder] project-tree: use IdeProject::file-renamed
- Date: Tue, 26 Apr 2016 04:31:33 +0000 (UTC)
commit 63c2133fae7df640f434f82cdfc1422e43dd19fe
Author: Christian Hergert <christian hergert me>
Date: Mon Apr 25 21:30:56 2016 -0700
project-tree: use IdeProject::file-renamed
This avoids doing the work in the project tree actions and instead relies
on GbProjectTree to respond to file-renamed events from the project.
plugins/project-tree/gb-project-tree-actions.c | 47 +-----------------------
plugins/project-tree/gb-project-tree.c | 24 ++++++++++++
2 files changed, 25 insertions(+), 46 deletions(-)
---
diff --git a/plugins/project-tree/gb-project-tree-actions.c b/plugins/project-tree/gb-project-tree-actions.c
index 3fb560a..b84fda6 100644
--- a/plugins/project-tree/gb-project-tree-actions.c
+++ b/plugins/project-tree/gb-project-tree-actions.c
@@ -559,24 +559,6 @@ gb_project_tree_actions_new_file (GSimpleAction *action,
gb_project_tree_actions_new (self, G_FILE_TYPE_REGULAR);
}
-static gboolean
-find_child_node (IdeTree *tree,
- IdeTreeNode *parent,
- IdeTreeNode *child,
- gpointer user_data)
-{
- GObject *item = ide_tree_node_get_item (child);
- GFile *target = user_data;
- GFile *child_file;
-
- if (GB_IS_PROJECT_FILE (item) &&
- (child_file = gb_project_file_get_file (GB_PROJECT_FILE (item))) &&
- g_file_equal (child_file, target))
- return TRUE;
-
- return FALSE;
-}
-
static void
gb_project_tree_actions__project_rename_file_cb (GObject *object,
GAsyncResult *result,
@@ -585,10 +567,6 @@ gb_project_tree_actions__project_rename_file_cb (GObject *object,
IdeProject *project = (IdeProject *)object;
g_autoptr(GbRenameFilePopover) popover = user_data;
g_autoptr(GError) error = NULL;
- IdeTreeNode *node;
- IdeTreeNode *parent;
- GFile *file;
- IdeTree *tree;
g_assert (IDE_IS_PROJECT (project));
g_assert (GB_IS_RENAME_FILE_POPOVER (popover));
@@ -600,29 +578,6 @@ gb_project_tree_actions__project_rename_file_cb (GObject *object,
return;
}
- file = g_object_get_data (G_OBJECT (popover), "G_FILE");
- tree = IDE_TREE (gtk_popover_get_relative_to (GTK_POPOVER (popover)));
-
- g_assert (G_IS_FILE (file));
- g_assert (IDE_IS_TREE (tree));
-
- node = ide_tree_get_selected (tree);
- if (node == NULL)
- goto cleanup;
-
- parent = ide_tree_node_get_parent (node);
-
- ide_tree_node_invalidate (parent);
- ide_tree_node_expand (parent, FALSE);
-
- node = ide_tree_find_child_node (tree, parent, find_child_node, file);
-
- if (node != NULL)
- ide_tree_node_select (node);
- else
- ide_tree_node_select (parent);
-
-cleanup:
gtk_widget_hide (GTK_WIDGET (popover));
gtk_widget_destroy (GTK_WIDGET (popover));
}
@@ -646,7 +601,7 @@ gb_project_tree_actions__rename_file_cb (GbProjectTree *self,
context = ide_workbench_get_context (workbench);
project = ide_context_get_project (context);
- /* todo: set busy spinner in popover */
+ /* TODO: set busy spinner in popover */
g_object_set_data_full (G_OBJECT (popover),
"G_FILE",
diff --git a/plugins/project-tree/gb-project-tree.c b/plugins/project-tree/gb-project-tree.c
index a788e67..cf3ca7b 100644
--- a/plugins/project-tree/gb-project-tree.c
+++ b/plugins/project-tree/gb-project-tree.c
@@ -58,6 +58,21 @@ gb_project_tree_get_context (GbProjectTree *self)
return NULL;
}
+static void
+gb_project_tree_project_file_renamed (GbProjectTree *self,
+ GFile *src_file,
+ GFile *dst_file,
+ IdeProject *project)
+{
+ g_assert (GB_IS_PROJECT_TREE (self));
+ g_assert (G_IS_FILE (src_file));
+ g_assert (G_IS_FILE (dst_file));
+ g_assert (IDE_IS_PROJECT (project));
+
+ ide_tree_rebuild (IDE_TREE (self));
+ gb_project_tree_reveal (self, dst_file);
+}
+
void
gb_project_tree_set_context (GbProjectTree *self,
IdeContext *context)
@@ -65,10 +80,19 @@ gb_project_tree_set_context (GbProjectTree *self,
GtkTreeModel *model;
GtkTreeIter iter;
IdeTreeNode *root;
+ IdeProject *project;
g_return_if_fail (GB_IS_PROJECT_TREE (self));
g_return_if_fail (!context || IDE_IS_CONTEXT (context));
+ 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);
+
model = gtk_tree_view_get_model (GTK_TREE_VIEW (self));
root = ide_tree_node_new ();
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]