anjuta r4715 - in trunk: . plugins/file-manager plugins/subversion



Author: jhs
Date: Sun Feb  8 22:44:21 2009
New Revision: 4715
URL: http://svn.gnome.org/viewvc/anjuta?rev=4715&view=rev

Log:
2009-02-08  Johannes Schmid  <jhs gnome org>

	* plugins/file-manager/file-model.c (file_model_get_vcs_status):
	* plugins/file-manager/plugin.c (get_vcs_plugin),
	(project_root_added), (file_manager_activate):
	* plugins/subversion/anjuta-subversion.plugin.in:
	
	Only load correct IAnjutaVcs plugin for project

Modified:
   trunk/ChangeLog
   trunk/plugins/file-manager/file-model.c
   trunk/plugins/file-manager/plugin.c
   trunk/plugins/subversion/anjuta-subversion.plugin.in

Modified: trunk/plugins/file-manager/file-model.c
==============================================================================
--- trunk/plugins/file-manager/file-model.c	(original)
+++ trunk/plugins/file-manager/file-model.c	Sun Feb  8 22:44:21 2009
@@ -262,13 +262,7 @@
 	GtkTreePath* path = gtk_tree_model_get_path (GTK_TREE_MODEL(model),
 												 iter);
 	FileModelPrivate* priv = FILE_MODEL_GET_PRIVATE(model);	
-	AnjutaPlugin* plugin = ANJUTA_PLUGIN(g_object_get_data (G_OBJECT(priv->view), "__plugin"));
-	
-	g_return_if_fail (plugin != NULL);
-
-	IAnjutaVcs* ivcs = anjuta_shell_get_interface (plugin->shell,
-												   IAnjutaVcs,
-												   NULL);
+	IAnjutaVcs* ivcs = g_object_get_data (G_OBJECT(priv->view), "__ivcs");
 	if (ivcs)
 	{	
 		VcsData* data = g_new0(VcsData, 1);

Modified: trunk/plugins/file-manager/plugin.c
==============================================================================
--- trunk/plugins/file-manager/plugin.c	(original)
+++ trunk/plugins/file-manager/plugin.c	Sun Feb  8 22:44:21 2009
@@ -30,6 +30,7 @@
 #include <libanjuta/anjuta-preferences.h>
 #include <libanjuta/interfaces/ianjuta-file-loader.h>
 #include <libanjuta/interfaces/ianjuta-file-manager.h>
+#include <libanjuta/interfaces/ianjuta-vcs.h>
 #include <libanjuta/interfaces/ianjuta-project-manager.h>
 #include <libanjuta/interfaces/ianjuta-preferences.h>
 #include "plugin.h"
@@ -90,6 +91,61 @@
 	g_object_unref (file);
 }
 
+static IAnjutaVcs*
+get_vcs_plugin(AnjutaFileManager* file_manager, const gchar* root_uri)
+{
+	typedef struct
+	{
+		const gchar* file;
+		const gchar* name;
+	} VcsSystem;
+	VcsSystem vcs_systems[] = {
+		{".svn", "Subversion"},
+		{".git", "Git"},
+		{NULL, NULL}
+	};
+	
+	gint i;
+	const gchar* vcs_system = NULL;
+	IAnjutaVcs* ivcs = NULL;
+	for (i = 0; vcs_systems[i].name != NULL; i++)
+	{
+		gchar* vcs_uri = g_build_filename (root_uri, vcs_systems[i].file, NULL);
+		GFile* vcs_file = g_file_new_for_uri (vcs_uri);
+		if (g_file_query_exists(vcs_file, NULL))
+		{
+			vcs_system = vcs_systems[i].name;
+		}
+		g_free (vcs_uri);
+		g_object_unref (vcs_file);
+		if (vcs_system)
+			break;
+	}
+	
+	if (vcs_system)
+	{
+		/* Load current language editor support plugins */
+		AnjutaPluginManager* plugin_manager = anjuta_shell_get_plugin_manager (ANJUTA_PLUGIN(file_manager)->shell, NULL);
+		GList* plugin_descs = anjuta_plugin_manager_query (plugin_manager,
+														   "Anjuta Plugin",
+														   "Interfaces",
+														   "IAnjutaVcs",
+														   "Vcs",
+														   "System",
+														   vcs_system, NULL);
+		if (plugin_descs)
+		{
+			gchar* plugin_id;
+			anjuta_plugin_description_get_string (plugin_descs->data, "Anjuta Plugin", "Location",
+													  &plugin_id);
+			ivcs = IANJUTA_VCS(anjuta_plugin_manager_get_plugin_by_id (plugin_manager,
+																	   plugin_id));
+			g_list_free (plugin_descs);
+		}
+	}
+	return ivcs;
+}
+
 static void
 project_root_added (AnjutaPlugin *plugin, const gchar *name,
 					const GValue *value, gpointer user_data)
@@ -102,11 +158,17 @@
 	if (root_uri)
 	{
 		g_object_set (G_OBJECT(file_manager->fv), "base_uri", root_uri, NULL);
+		g_object_set_data (G_OBJECT(file_manager->fv), "__ivcs",
+						   get_vcs_plugin (file_manager,
+										   root_uri));
+		
 		file_view_refresh (file_manager->fv);
 		file_manager->have_project = TRUE;
 	}
 	else
 	{
+		g_object_set_data (G_OBJECT(file_manager->fv), "__ivcs",
+						   NULL);
 		file_manager_set_default_uri (file_manager);
 		file_view_refresh (file_manager->fv);
 	}
@@ -235,7 +297,6 @@
 										 GTK_SHADOW_IN);
 	
 	file_manager->fv = ANJUTA_FILE_VIEW (file_view_new ());
-	g_object_set_data (G_OBJECT(file_manager->fv), "__plugin", ANJUTA_PLUGIN(file_manager));
 	
 	g_signal_connect (G_OBJECT (file_manager->fv), "file-open",
 					  G_CALLBACK (on_file_view_open_file), file_manager);

Modified: trunk/plugins/subversion/anjuta-subversion.plugin.in
==============================================================================
--- trunk/plugins/subversion/anjuta-subversion.plugin.in	(original)
+++ trunk/plugins/subversion/anjuta-subversion.plugin.in	Sun Feb  8 22:44:21 2009
@@ -4,3 +4,6 @@
 Location=anjuta-subversion:Subversion
 Icon=anjuta-subversion-plugin-48.png
 Interfaces=IAnjutaVcs
+
+[Vcs]
+System=Subversion
\ No newline at end of file



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]