Index: gedit-plugin-info.c
===================================================================
--- gedit-plugin-info.c	(revision 6112)
+++ gedit-plugin-info.c	(working copy)
@@ -42,6 +42,15 @@
 #include "gedit-debug.h"
 #include "gedit-plugin.h"
 
+GQuark 
+_gedit_info_plugin_error_quark (void)
+{
+	static GQuark quark = 0;
+	if (!quark)
+		quark = g_quark_from_static_string ("gedit-info-plugin-error");
+	return quark;
+}
+
 void
 _gedit_plugin_info_ref (GeditPluginInfo *info)
 {
@@ -80,6 +89,8 @@
 	g_free (info->website);
 	g_free (info->copyright);
 	g_strfreev (info->authors);
+	if (info->error)
+		g_error_free (info->error);
 
 	g_free (info);
 }
@@ -128,11 +139,19 @@
 	info = g_new0 (GeditPluginInfo, 1);
 	info->refcount = 1;
 	info->file = g_strdup (file);
+	
+	/* We set the error as NULL to know that there aren't errors */
+	info->error = NULL;
 
 	plugin_file = g_key_file_new ();
 	if (!g_key_file_load_from_file (plugin_file, file, G_KEY_FILE_NONE, NULL))
 	{
-		g_warning ("Bad plugin file: %s", file);
+		g_set_error (&info->error,
+			     GEDIT_INFO_PLUGIN_ERROR,
+			     GEDIT_INFO_PLUGIN_ERROR_AT_LOAD,
+			     _("Bad plugin file: %s"),	
+   			     file);
+		g_warning (info->error->message);
 		goto error;
 	}
 
@@ -169,7 +188,12 @@
 	}
 	else
 	{
-		g_warning ("Could not find 'Module' in %s", file);
+		g_set_error (&info->error,
+			     GEDIT_INFO_PLUGIN_ERROR,
+			     GEDIT_INFO_PLUGIN_ERROR_AT_LOAD,
+			     _("Could not find 'Module' in %s"),
+			     file);
+		g_warning (info->error->message);
 		goto error;
 	}
 
@@ -194,8 +218,13 @@
 	{
 		info->loader = GEDIT_PLUGIN_LOADER_PY;
 #ifndef ENABLE_PYTHON
-		g_warning ("Cannot load Python plugin '%s' since gedit was not "
-			   "compiled with Python support.", file);
+		g_set_error (&info->error,
+			     GEDIT_INFO_PLUGIN_ERROR,
+			     GEDIT_INFO_PLUGIN_ERROR_AT_LOAD,
+			     _("Cannot load Python plugin '%s' since gedit was not "
+		  	       "compiled with Python support."),
+		 	     file);
+		g_warning (info->error->message);
 		goto error;
 #endif
 	}
@@ -214,7 +243,12 @@
 		info->name = str;
 	else
 	{
-		g_warning ("Could not find 'Name' in %s", file);
+		g_set_error (&info->error,
+			     GEDIT_INFO_PLUGIN_ERROR,
+			     GEDIT_INFO_PLUGIN_ERROR_AT_LOAD,
+			     _("Could not find 'Name' in %s"),
+			     file);
+		g_warning(info->error->message);
 		goto error;
 	}
 
@@ -296,10 +330,15 @@
 }
 
 gboolean
-gedit_plugin_info_is_available (GeditPluginInfo *info)
+gedit_plugin_info_is_available (GeditPluginInfo *info,
+				GError **error)
 {
 	g_return_val_if_fail (info != NULL, FALSE);
 
+	if (info->error)
+		if (error)
+			*error = g_error_copy ((const GError *)info->error);
+
 	return info->available != FALSE;
 }
 
Index: gedit-plugin-info.h
===================================================================
--- gedit-plugin-info.h	(revision 6112)
+++ gedit-plugin-info.h	(working copy)
@@ -41,10 +41,20 @@
 
 typedef struct _GeditPluginInfo			GeditPluginInfo;
 
+#define GEDIT_INFO_PLUGIN_ERROR _gedit_info_plugin_error_quark()
+
+enum
+{
+	GEDIT_INFO_PLUGIN_ERROR_AT_LOAD,
+};
+
 GType		 gedit_plugin_info_get_type		(void) G_GNUC_CONST;
 
+GQuark          _gedit_info_plugin_error_quark          (void);
+
 gboolean 	 gedit_plugin_info_is_active		(GeditPluginInfo *info);
-gboolean 	 gedit_plugin_info_is_available		(GeditPluginInfo *info);
+gboolean 	 gedit_plugin_info_is_available		(GeditPluginInfo *info,
+							 GError **error);
 gboolean	 gedit_plugin_info_is_configurable	(GeditPluginInfo *info);
 
 const gchar	*gedit_plugin_info_get_name		(GeditPluginInfo *info);
Index: gedit-plugin-manager.c
===================================================================
--- gedit-plugin-manager.c	(revision 6112)
+++ gedit-plugin-manager.c	(working copy)
@@ -176,7 +176,7 @@
 					gedit_plugin_info_get_description (info));
 	g_object_set (G_OBJECT (cell),
 		      "markup", text,
-		      "sensitive", gedit_plugin_info_is_available (info),
+		      "sensitive", gedit_plugin_info_is_available (info, NULL),
 		      NULL);
 
 	g_free (text);
@@ -201,7 +201,7 @@
 
 	g_object_set (G_OBJECT (cell),
 		      "icon-name", gedit_plugin_info_get_icon_name (info),
-		      "sensitive", gedit_plugin_info_is_available (info),
+		      "sensitive", gedit_plugin_info_is_available (info, NULL),
 		      NULL);
 }
 
@@ -292,7 +292,7 @@
 		gtk_list_store_append (model, &iter);
 		gtk_list_store_set (model, &iter,
 				    ACTIVE_COLUMN, gedit_plugin_info_is_active (info),
-				    AVAILABLE_COLUMN, gedit_plugin_info_is_available (info),
+				    AVAILABLE_COLUMN, gedit_plugin_info_is_available (info, NULL),
 				    INFO_COLUMN, info,
 				    -1);
 
@@ -323,7 +323,6 @@
 			   GtkTreeModel       *model,
 			   gboolean            active)
 {
-	GeditPluginsEngine *engine;
 	GeditPluginInfo *info;
 	gboolean res = TRUE;
 	
@@ -520,7 +519,7 @@
 	gtk_menu_shell_append (GTK_MENU_SHELL (menu), item);
 
 	item = gtk_check_menu_item_new_with_mnemonic (_("A_ctivate"));
-	gtk_widget_set_sensitive (item, gedit_plugin_info_is_available (info));
+	gtk_widget_set_sensitive (item, gedit_plugin_info_is_available (info, NULL));
 	gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (item),
 					gedit_plugin_info_is_active (info));
 	g_signal_connect (item, "toggled",
@@ -774,9 +773,47 @@
 		return;
 	}
 
-	gtk_list_store_set (model, &iter, ACTIVE_COLUMN, gedit_plugin_info_is_active (info), -1);
+	gtk_list_store_set (GTK_LIST_STORE (model), &iter, ACTIVE_COLUMN, gedit_plugin_info_is_active (info), -1);
 }
 
+static gboolean
+query_tooltip_cb (GtkWidget  *widget,
+                  gint        x,
+                  gint        y,
+                  gboolean    keyboard_mode,
+                  GtkTooltip *tooltip,
+                  gpointer useless)
+{
+	GtkTreeModel *model;
+	GtkTreePath *path;
+	GtkTreeIter iter;
+	gboolean is_row;
+	GeditPluginInfo *info;
+	GError *error = NULL;
+	
+	is_row = gtk_tree_view_get_tooltip_context (GTK_TREE_VIEW (widget),
+						    &x, &y,
+						    keyboard_mode,
+						    &model,
+						    &path,
+						    &iter);
+
+	if (is_row)
+	{
+		gtk_tree_model_get (model, &iter, INFO_COLUMN, &info, -1);
+		if (!gedit_plugin_info_is_available (info, &error))
+		{
+			gtk_tooltip_set_text (tooltip,
+					      error->message);
+					      
+			g_error_free (error);
+			return TRUE;
+		}
+	}
+	
+	return FALSE;
+}
+
 static void 
 gedit_plugin_manager_init (GeditPluginManager *pm)
 {
@@ -817,6 +854,13 @@
 
 	pm->priv->tree = gtk_tree_view_new ();
 	gtk_container_add (GTK_CONTAINER (viewport), pm->priv->tree);
+	/*We have to set the has-tooltip property to TRUE to add Tooltips to rows*/
+	g_object_set (pm->priv->tree,
+		      "has-tooltip", TRUE,
+		      NULL);
+	g_signal_connect (pm->priv->tree,
+			  "query-tooltip",
+			  G_CALLBACK (query_tooltip_cb), NULL);
 
 	hbuttonbox = gtk_hbutton_box_new ();
 	gtk_box_pack_start (GTK_BOX (pm), hbuttonbox, FALSE, FALSE, 0);
Index: gedit-plugin-info-priv.h
===================================================================
--- gedit-plugin-info-priv.h	(revision 6112)
+++ gedit-plugin-info-priv.h	(working copy)
@@ -67,6 +67,8 @@
 	   due to an error loading the plugin module (e.g. for Python plugins
 	   when the interpreter has not been correctly initializated) */
 	gint               available : 1;
+	
+	GError            *error;
 };
 
 GeditPluginInfo		*_gedit_plugin_info_new		(const gchar *file);
Index: gedit-plugins-engine.c
===================================================================
--- gedit-plugins-engine.c	(revision 6112)
+++ gedit-plugins-engine.c	(working copy)
@@ -364,9 +364,11 @@
 				/* Mark plugin as unavailable and fails */
 				info->available = FALSE;
 				
-				g_warning ("Cannot load Python plugin '%s' since gedit "
-				           "was not able to initialize the Python interpreter.",
-				           info->name);
+				g_set_error (&info->error,
+					     GEDIT_INFO_PLUGIN_ERROR,
+					     GEDIT_INFO_PLUGIN_ERROR_AT_LOAD,
+					     _("Cannot load Python plugin '%s' since gedit was not able to initialize the Python interpreter."));
+				g_warning (info->error->message);
 
 				return FALSE;
 			}
@@ -393,15 +395,23 @@
 		switch (info->loader)
 		{
 			case GEDIT_PLUGIN_LOADER_C:
-				g_warning ("Cannot load plugin '%s' since file '%s' cannot be read.",
-					   info->name,			           
-					   gedit_module_get_path (GEDIT_MODULE (info->module)));
+				g_set_error (&info->error,
+					     GEDIT_INFO_PLUGIN_ERROR,
+					     GEDIT_INFO_PLUGIN_ERROR_AT_LOAD,
+					     _("Cannot load plugin '%s' since file '%s' cannot be read."),
+					     info->name,
+					     gedit_module_get_path (GEDIT_MODULE (info->module)));
+				g_warning (info->error->message);
 				break;
 
 			case GEDIT_PLUGIN_LOADER_PY:
-				g_warning ("Cannot load Python plugin '%s' since file '%s' cannot be read.",
-					   info->name,			           
-					   info->module_name);
+				g_set_error (&info->error,
+					     GEDIT_INFO_PLUGIN_ERROR,
+					     GEDIT_INFO_PLUGIN_ERROR_AT_LOAD,
+					     _("Cannot load Python plugin '%s' since file '%s' cannot be read."),
+					     info->name,
+					     info->module_name);
+				g_warning (info->error->message);
 				break;
 
 			default:
