[anjuta] dir-project: Allow to add and remove source files
- From: Sebastien Granjoux <sgranjoux src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [anjuta] dir-project: Allow to add and remove source files
- Date: Tue, 6 Mar 2012 21:23:39 +0000 (UTC)
commit de44e65383b35042aeadbb63f36bbe15df3373aa
Author: SÃbastien Granjoux <seb sfo free fr>
Date: Tue Mar 6 21:47:15 2012 +0100
dir-project: Allow to add and remove source files
libanjuta/interfaces/libanjuta.idl | 1 +
plugins/dir-project/dir-project.c | 37 ++++++++++++++++++++++++----
plugins/project-manager/plugin.c | 27 +++++++++++++--------
plugins/project-manager/project-chooser.c | 5 +--
4 files changed, 51 insertions(+), 19 deletions(-)
---
diff --git a/libanjuta/interfaces/libanjuta.idl b/libanjuta/interfaces/libanjuta.idl
index 9408cdc..7ea18a9 100644
--- a/libanjuta/interfaces/libanjuta.idl
+++ b/libanjuta/interfaces/libanjuta.idl
@@ -3177,6 +3177,7 @@ interface IAnjutaProject
ERROR_ALREADY_EXISTS,
ERROR_VALIDATION_FAILED,
ERROR_PROJECT_MALFORMED,
+ ERROR_WRONG_PARENT,
ERROR_NOT_SUPPORTED,
ERROR_GENERAL_FAILURE
}
diff --git a/plugins/dir-project/dir-project.c b/plugins/dir-project/dir-project.c
index 5587f95..6d0f165 100644
--- a/plugins/dir-project/dir-project.c
+++ b/plugins/dir-project/dir-project.c
@@ -564,23 +564,23 @@ dir_project_load_directory_callback (GObject *source_object,
g_signal_emit_by_name (data->proj, "node-loaded", data->parent, err);
g_error_free (err);
} else {
- AnjutaProjectNode *node, *remove;
+ AnjutaProjectNode *node, *next;
for (node = anjuta_project_node_first_child (data->parent);
node != NULL;
- node = anjuta_project_node_next_sibling (node))
+ node = next)
{
int state = anjuta_project_node_get_state (node);
+
+ next = anjuta_project_node_next_sibling (node);
if (state & ANJUTA_PROJECT_LOADING)
{
/* these nodes are no longer necessary */
gchar *uri = g_file_get_uri (node->file);
- remove = node;
- node = anjuta_project_node_prev_sibling (node);
g_hash_table_remove (data->proj->groups, uri);
g_free (uri);
- anjuta_project_node_remove (remove);
- removed = g_list_prepend (removed, remove);
+ anjuta_project_node_remove (node);
+ removed = g_list_prepend (removed, node);
}
}
g_signal_emit_by_name (data->proj, "node-loaded", data->parent, NULL);
@@ -770,9 +770,11 @@ foreach_node_save (AnjutaProjectNode *node,
gpointer data)
{
gint state = anjuta_project_node_get_state (node);
+ AnjutaProjectNode *parent;
GError *err = NULL;
gboolean ret;
+
if (state & ANJUTA_PROJECT_MODIFIED)
{
switch (anjuta_project_node_get_node_type (node))
@@ -780,6 +782,27 @@ foreach_node_save (AnjutaProjectNode *node,
case ANJUTA_PROJECT_GROUP:
g_file_make_directory_with_parents (anjuta_project_node_get_file (node), NULL, NULL);
break;
+ case ANJUTA_PROJECT_SOURCE:
+ for (parent = node;
+ (parent != NULL) && (anjuta_project_node_get_node_type (parent) != ANJUTA_PROJECT_GROUP) && (anjuta_project_node_get_node_type (parent) != ANJUTA_PROJECT_ROOT);
+ parent = anjuta_project_node_parent (parent));
+ if (parent != NULL)
+ {
+ GFile *file = anjuta_project_node_get_file (node);
+ gchar *basename = g_file_get_basename (file);
+ GFile *dest = g_file_get_child (anjuta_project_node_get_file (parent), basename);
+
+ g_free (basename);
+ if (!g_file_equal (dest, file))
+ {
+ g_file_copy_async (file, dest, G_FILE_COPY_BACKUP, G_PRIORITY_DEFAULT, NULL, NULL, NULL, NULL, NULL);
+ node->file = dest;
+ dest = file;
+ }
+
+ g_object_unref (dest);
+ }
+ break;
default:
break;
}
@@ -801,6 +824,8 @@ foreach_node_save (AnjutaProjectNode *node,
break;
}
}
+
+ anjuta_project_node_clear_state (node, ANJUTA_PROJECT_REMOVED | ANJUTA_PROJECT_MODIFIED);
}
AnjutaProjectNode *
diff --git a/plugins/project-manager/plugin.c b/plugins/project-manager/plugin.c
index 430a432..d36c87d 100644
--- a/plugins/project-manager/plugin.c
+++ b/plugins/project-manager/plugin.c
@@ -2150,16 +2150,23 @@ iproject_manager_add_source_quiet (IAnjutaProjectManager *project_manager,
plugin = ANJUTA_PLUGIN_PROJECT_MANAGER (G_OBJECT (project_manager));
- target = gbf_project_view_get_node_from_file (plugin->view, ANJUTA_PROJECT_TARGET, location_file);
- update_operation_begin (plugin);
- source_id = anjuta_pm_project_add_source (plugin->project,
- target,
- NULL,
- source_uri_to_add,
- err);
- update_operation_end (plugin, TRUE);
-
- return get_element_file_from_node (plugin, source_id, IANJUTA_PROJECT_MANAGER_PROJECT_ROOT_URI);
+ target = gbf_project_view_get_node_from_file (plugin->view, ANJUTA_PROJECT_UNKNOWN, location_file);
+ if (target != NULL)
+ {
+ update_operation_begin (plugin);
+ source_id = anjuta_pm_project_add_source (plugin->project,
+ target,
+ NULL,
+ source_uri_to_add,
+ err);
+ update_operation_end (plugin, TRUE);
+
+ return get_element_file_from_node (plugin, source_id, IANJUTA_PROJECT_MANAGER_PROJECT_ROOT_URI);
+ }
+ else
+ {
+ return NULL;
+ }
}
static GList*
diff --git a/plugins/project-manager/project-chooser.c b/plugins/project-manager/project-chooser.c
index 3cd381e..27ae7e7 100644
--- a/plugins/project-manager/project-chooser.c
+++ b/plugins/project-manager/project-chooser.c
@@ -207,7 +207,7 @@ is_project_target_or_group_node (GtkTreeModel *model, GtkTreeIter *iter, gpointe
{
AnjutaProjectNodeType type = anjuta_project_node_get_node_type (node) & ANJUTA_PROJECT_TYPE_MASK;
- return (type == ANJUTA_PROJECT_TARGET) || (type == ANJUTA_PROJECT_GROUP);
+ return (type == ANJUTA_PROJECT_TARGET) || (type == ANJUTA_PROJECT_GROUP) || (type == ANJUTA_PROJECT_ROOT);
}
}
@@ -230,7 +230,7 @@ is_project_group_node (GtkTreeModel *model, GtkTreeIter *iter, gpointer user_dat
{
AnjutaProjectNodeType type = anjuta_project_node_get_node_type (node) & ANJUTA_PROJECT_TYPE_MASK;
- return type == ANJUTA_PROJECT_GROUP;
+ return (type == ANJUTA_PROJECT_GROUP) || (type == ANJUTA_PROJECT_ROOT);
}
}
@@ -432,7 +432,6 @@ anjuta_pm_chooser_button_class_init (AnjutaPmChooserButtonClass * klass)
object_class = (GObjectClass *)klass;
object_class->constructor = anjuta_pm_chooser_button_constructor;
- g_message ("anjuta_pm_chooser_button_class_init");
g_type_class_add_private (klass, sizeof (AnjutaPmChooserButtonPrivate));
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]