[gedit] Bug 622999 - Ported the file browser plugin to libpeas



commit 6e8ef59b74a2f726f8a2a0ab1fa7f5c4aa6ac3f2
Author: Garrett Regier <alias301 gmail com>
Date:   Mon Jun 28 10:58:03 2010 -0700

    Bug 622999  - Ported the file browser plugin to libpeas

 plugins/Makefile.am                              |   12 +-
 plugins/filebrowser/gedit-file-bookmarks-store.c |   15 +-
 plugins/filebrowser/gedit-file-bookmarks-store.h |    3 +-
 plugins/filebrowser/gedit-file-browser-plugin.c  |  585 +++++++++++-----------
 plugins/filebrowser/gedit-file-browser-plugin.h  |   10 +-
 plugins/filebrowser/gedit-file-browser-store.c   |   27 +-
 plugins/filebrowser/gedit-file-browser-store.h   |    3 +-
 plugins/filebrowser/gedit-file-browser-view.c    |   20 +-
 plugins/filebrowser/gedit-file-browser-view.h    |    3 +-
 plugins/filebrowser/gedit-file-browser-widget.c  |   15 +-
 plugins/filebrowser/gedit-file-browser-widget.h  |    3 +-
 11 files changed, 375 insertions(+), 321 deletions(-)
---
diff --git a/plugins/Makefile.am b/plugins/Makefile.am
index c51d953..06c934c 100644
--- a/plugins/Makefile.am
+++ b/plugins/Makefile.am
@@ -1,12 +1,11 @@
 DIST_SUBDIRS = \
-	checkupdate	\
-	modelines	\
 	changecase	\
+	checkupdate	\
 	docinfo		\
+	filebrowser	\
+	modelines	\
 	sort
 
-#	filebrowser 	\
-#	modelines	\
 #	spell 		\
 #	taglist 	\
 #	time
@@ -16,13 +15,12 @@ DIST_SUBDIRS = \
 #	snippets
 
 SUBDIRS = \
-	modelines	\
 	changecase	\
 	docinfo		\
+	filebrowser	\
+	modelines	\
 	sort
 
-#	filebrowser
-#	modelines
 #	taglist
 #	time
 #	pythonconsole
diff --git a/plugins/filebrowser/gedit-file-bookmarks-store.c b/plugins/filebrowser/gedit-file-bookmarks-store.c
index 143dbb5..6a42feb 100644
--- a/plugins/filebrowser/gedit-file-bookmarks-store.c
+++ b/plugins/filebrowser/gedit-file-bookmarks-store.c
@@ -23,7 +23,6 @@
 #include <glib/gi18n.h>
 #include <gio/gio.h>
 #include <gedit/gedit-utils.h>
-#include <gedit/gedit-plugin.h>
 
 #include "gedit-file-bookmarks-store.h"
 #include "gedit-file-browser-utils.h"
@@ -56,7 +55,7 @@ static gboolean find_with_flags       (GtkTreeModel            *model,
                                        guint                    flags,
                                        guint                    notflags);
 
-GEDIT_PLUGIN_DEFINE_TYPE(GeditFileBookmarksStore, gedit_file_bookmarks_store, GTK_TYPE_TREE_STORE)
+G_DEFINE_DYNAMIC_TYPE (GeditFileBookmarksStore, gedit_file_bookmarks_store, GTK_TYPE_TREE_STORE)
 
 static void
 gedit_file_bookmarks_store_dispose (GObject *object)
@@ -100,6 +99,11 @@ gedit_file_bookmarks_store_class_init (GeditFileBookmarksStoreClass *klass)
 }
 
 static void
+gedit_file_bookmarks_store_class_finalize (GeditFileBookmarksStoreClass *klass)
+{
+}
+
+static void
 gedit_file_bookmarks_store_init (GeditFileBookmarksStore *obj)
 {
 	obj->priv = GEDIT_FILE_BOOKMARKS_STORE_GET_PRIVATE (obj);
@@ -916,4 +920,11 @@ on_bookmarks_file_changed (GFileMonitor            *monitor,
 			break;
 	}
 }
+
+void
+_gedit_file_bookmarks_store_register_type (GTypeModule *type_module)
+{
+	gedit_file_bookmarks_store_register_type (type_module);
+}
+
 /* ex:ts=8:noet: */
diff --git a/plugins/filebrowser/gedit-file-bookmarks-store.h b/plugins/filebrowser/gedit-file-bookmarks-store.h
index c74b370..069264d 100644
--- a/plugins/filebrowser/gedit-file-bookmarks-store.h
+++ b/plugins/filebrowser/gedit-file-bookmarks-store.h
@@ -77,13 +77,14 @@ struct _GeditFileBookmarksStoreClass
 };
 
 GType			 gedit_file_bookmarks_store_get_type		(void) G_GNUC_CONST;
-GType			 gedit_file_bookmarks_store_register_type	(GTypeModule             *module);
 
 GeditFileBookmarksStore	*gedit_file_bookmarks_store_new			(void);
 GFile			*gedit_file_bookmarks_store_get_location	(GeditFileBookmarksStore *model,
 									 GtkTreeIter             *iter);
 void			 gedit_file_bookmarks_store_refresh		(GeditFileBookmarksStore *model);
 
+void			 _gedit_file_bookmarks_store_register_type	(GTypeModule             *type_module);
+
 G_END_DECLS
 
 #endif /* __GEDIT_FILE_BOOKMARKS_STORE_H__ */
diff --git a/plugins/filebrowser/gedit-file-browser-plugin.c b/plugins/filebrowser/gedit-file-browser-plugin.c
index 1d2a2ed..caf53b3 100644
--- a/plugins/filebrowser/gedit-file-browser-plugin.c
+++ b/plugins/filebrowser/gedit-file-browser-plugin.c
@@ -23,12 +23,15 @@
 #include <config.h>
 #endif
 
-#include <gedit/gedit-commands.h>
-#include <gedit/gedit-utils.h>
-#include <gedit/gedit-app.h>
+#include <string.h>
 #include <glib/gi18n-lib.h>
+#include <gmodule.h>
+#include <gedit/gedit-app.h>
+#include <gedit/gedit-commands.h>
 #include <gedit/gedit-debug.h>
-#include <string.h>
+#include <gedit/gedit-window.h>
+#include <gedit/gedit-window-activatable.h>
+#include <gedit/gedit-utils.h>
 
 #include "gedit-file-browser-enum-types.h"
 #include "gedit-file-browser-plugin.h"
@@ -37,7 +40,6 @@
 #include "gedit-file-browser-widget.h"
 #include "gedit-file-browser-messages.h"
 
-#define WINDOW_DATA_KEY	        	"GeditFileBrowserPluginWindowData"
 #define FILEBROWSER_BASE_SETTINGS	"org.gnome.gedit.plugins.filebrowser"
 #define FILEBROWSER_TREE_VIEW		"tree-view"
 #define FILEBROWSER_ROOT		"root"
@@ -59,14 +61,12 @@
 
 struct _GeditFileBrowserPluginPrivate
 {
-	GSettings *settings;
-	GSettings *nautilus_settings;
-	GSettings *terminal_settings;
-};
+	GSettings              *settings;
+	GSettings              *nautilus_settings;
+	GSettings              *terminal_settings;
+
+	GeditWindow            *window;
 
-typedef struct _GeditFileBrowserPluginData
-{
-	GeditFileBrowserPlugin *plugin;
 	GeditFileBrowserWidget *tree_widget;
 	gulong                  merge_id;
 	GtkActionGroup         *action_group;
@@ -78,51 +78,57 @@ typedef struct _GeditFileBrowserPluginData
 	guint			click_policy_handle;
 	guint			enable_delete_handle;
 	guint			confirm_trash_handle;
-} GeditFileBrowserPluginData;
-
-static void on_location_activated_cb     (GeditFileBrowserWidget     *widget,
-                                          GFile                      *location,
-                                          GeditWindow                *window);
-static void on_error_cb                  (GeditFileBrowserWidget     *widget,
-                                          guint                       code,
-                                          gchar const                *message,
-                                          GeditWindow                *window);
-static void on_model_set_cb              (GeditFileBrowserView       *widget,
-                                          GParamSpec                 *arg1,
-                                          GeditWindow                *window);
-static void on_virtual_root_changed_cb   (GeditFileBrowserStore      *model,
-                                          GParamSpec                 *param,
-                                          GeditWindow                *window);
-static void on_filter_mode_changed_cb    (GeditFileBrowserStore      *model,
-                                          GParamSpec                 *param,
-                                          GeditWindow                *window);
-static void on_rename_cb		 (GeditFileBrowserStore      *model,
-					  GFile                      *oldfile,
-					  GFile                      *newfile,
-					  GeditWindow                *window);
-static void on_filter_pattern_changed_cb (GeditFileBrowserWidget     *widget,
-                                          GParamSpec                 *param,
-                                          GeditWindow                *window);
-static void on_tab_added_cb              (GeditWindow                *window,
-                                          GeditTab                   *tab,
-                                          GeditFileBrowserPluginData *data);
-static gboolean on_confirm_delete_cb     (GeditFileBrowserWidget     *widget,
-                                          GeditFileBrowserStore      *store,
-                                          GList                      *rows,
-                                          GeditWindow                *window);
-static gboolean on_confirm_no_trash_cb   (GeditFileBrowserWidget     *widget,
-                                          GList                      *files,
-                                          GeditWindow                *window);
-
-
-GEDIT_PLUGIN_REGISTER_TYPE_WITH_CODE (GeditFileBrowserPlugin, filetree_plugin, 	\
-	gedit_file_browser_enum_and_flag_register_type (type_module);		\
-	gedit_file_browser_store_register_type         (type_module);		\
-	gedit_file_bookmarks_store_register_type       (type_module);		\
-	gedit_file_browser_view_register_type	       (type_module);		\
-	gedit_file_browser_widget_register_type	       (type_module);		\
-)
+};
 
+static void gedit_window_activatable_iface_init	(GeditWindowActivatableInterface *iface);
+
+static void on_location_activated_cb     (GeditFileBrowserWidget        *widget,
+                                          GFile                         *location,
+                                          GeditWindow                   *window);
+static void on_error_cb                  (GeditFileBrowserWidget        *widget,
+                                          guint                          code,
+                                          gchar const                   *message,
+                                          GeditFileBrowserPlugin        *plugin);
+static void on_model_set_cb              (GeditFileBrowserView          *widget,
+                                          GParamSpec                    *param,
+                                          GeditFileBrowserPlugin        *plugin);
+static void on_virtual_root_changed_cb   (GeditFileBrowserStore         *model,
+                                          GParamSpec                    *param,
+                                          GeditFileBrowserPlugin        *plugin);
+static void on_filter_mode_changed_cb    (GeditFileBrowserStore         *model,
+                                          GParamSpec                    *param,
+                                          GeditFileBrowserPlugin        *plugin);
+static void on_rename_cb		 (GeditFileBrowserStore         *model,
+					  GFile                         *oldfile,
+					  GFile                         *newfile,
+					  GeditWindow                   *window);
+static void on_filter_pattern_changed_cb (GeditFileBrowserWidget        *widget,
+                                          GParamSpec                    *param,
+                                          GeditFileBrowserPlugin        *plugin);
+static void on_tab_added_cb              (GeditWindow                   *window,
+                                          GeditTab                      *tab,
+                                          GeditFileBrowserPlugin        *plugin);
+static gboolean on_confirm_delete_cb     (GeditFileBrowserWidget        *widget,
+                                          GeditFileBrowserStore         *store,
+                                          GList                         *rows,
+                                          GeditFileBrowserPlugin        *plugin);
+static gboolean on_confirm_no_trash_cb   (GeditFileBrowserWidget        *widget,
+                                          GList                         *files,
+                                          GeditWindow                   *window);
+
+G_DEFINE_DYNAMIC_TYPE_EXTENDED (GeditFileBrowserPlugin,
+				filetree_plugin,
+				PEAS_TYPE_EXTENSION_BASE,
+				0,
+				G_IMPLEMENT_INTERFACE_DYNAMIC (GEDIT_TYPE_WINDOW_ACTIVATABLE,
+							       gedit_window_activatable_iface_init)	\
+													\
+				_gedit_file_bookmarks_store_register_type	(type_module);		\
+				gedit_file_browser_enum_and_flag_register_type	(type_module);		\
+				_gedit_file_browser_store_register_type		(type_module);		\
+				_gedit_file_browser_view_register_type		(type_module);		\
+				_gedit_file_browser_widget_register_type	(type_module);		\
+)
 
 static void
 filetree_plugin_init (GeditFileBrowserPlugin *plugin)
@@ -160,67 +166,65 @@ filetree_plugin_dispose (GObject *object)
 	G_OBJECT_CLASS (filetree_plugin_parent_class)->dispose (object);
 }
 
-static GeditFileBrowserPluginData *
-get_plugin_data (GeditWindow *window)
-{
-	return (GeditFileBrowserPluginData *) (g_object_get_data (G_OBJECT (window), WINDOW_DATA_KEY));
-}
-
 static void
-on_end_loading_cb (GeditFileBrowserStore      *store,
-                   GtkTreeIter                *iter,
-                   GeditFileBrowserPluginData *data)
+on_end_loading_cb (GeditFileBrowserStore  *store,
+                   GtkTreeIter            *iter,
+                   GeditFileBrowserPlugin *plugin)
 {
+	GeditFileBrowserPluginPrivate *priv = plugin->priv;
+
 	/* Disconnect the signal */
-	g_signal_handler_disconnect (store, data->end_loading_handle);
-	data->end_loading_handle = 0;
-	data->auto_root = FALSE;
+	g_signal_handler_disconnect (store, priv->end_loading_handle);
+	priv->end_loading_handle = 0;
+	priv->auto_root = FALSE;
 }
 
 static void
-prepare_auto_root (GeditFileBrowserPluginData *data)
+prepare_auto_root (GeditFileBrowserPlugin *plugin)
 {
+	GeditFileBrowserPluginPrivate *priv = plugin->priv;
 	GeditFileBrowserStore *store;
 
-	data->auto_root = TRUE;
+	priv->auto_root = TRUE;
 
-	store = gedit_file_browser_widget_get_browser_store (data->tree_widget);
+	store = gedit_file_browser_widget_get_browser_store (priv->tree_widget);
 
-	if (data->end_loading_handle != 0)
+	if (priv->end_loading_handle != 0)
 	{
-		g_signal_handler_disconnect (store, data->end_loading_handle);
-		data->end_loading_handle = 0;
+		g_signal_handler_disconnect (store, priv->end_loading_handle);
+		priv->end_loading_handle = 0;
 	}
 
-	data->end_loading_handle = g_signal_connect (store,
-	                                             "end-loading",
-	                                             G_CALLBACK (on_end_loading_cb),
-	                                             data);
+	priv->end_loading_handle = g_signal_connect (store,
+	                                               "end-loading",
+	                                               G_CALLBACK (on_end_loading_cb),
+	                                               plugin);
 }
 
 static void
-restore_default_location (GeditFileBrowserPluginData *data)
+restore_default_location (GeditFileBrowserPlugin *plugin)
 {
+	GeditFileBrowserPluginPrivate *priv = plugin->priv;
 	gchar *root;
 	gchar *virtual_root;
 	gboolean bookmarks;
 	gboolean remote;
 
-	bookmarks = !g_settings_get_boolean (data->plugin->priv->settings,
+	bookmarks = !g_settings_get_boolean (priv->settings,
 					     FILEBROWSER_TREE_VIEW);
 
 	if (bookmarks)
 	{
-		gedit_file_browser_widget_show_bookmarks (data->tree_widget);
+		gedit_file_browser_widget_show_bookmarks (priv->tree_widget);
 		return;
 	}
 
-	root = g_settings_get_string (data->plugin->priv->settings,
+	root = g_settings_get_string (priv->settings,
 				      FILEBROWSER_ROOT);
-	virtual_root = g_settings_get_string (data->plugin->priv->settings,
+	virtual_root = g_settings_get_string (priv->settings,
 					      FILEBROWSER_VIRTUAL_ROOT);
 
-	remote = g_settings_get_boolean (data->plugin->priv->settings,
+	remote = g_settings_get_boolean (priv->settings,
 					 FILEBROWSER_ENABLE_REMOTE);
 
 	if (root != NULL && *root != '\0')
@@ -235,15 +239,15 @@ restore_default_location (GeditFileBrowserPluginData *data)
 		{
 			if (virtual_root != NULL && *virtual_root != '\0')
 			{
-				prepare_auto_root (data);
-				gedit_file_browser_widget_set_root_and_virtual_root (data->tree_widget,
+				prepare_auto_root (plugin);
+				gedit_file_browser_widget_set_root_and_virtual_root (priv->tree_widget,
 					                                             rootfile,
 					                                             vrootfile);
 			}
 			else
 			{
-				prepare_auto_root (data);
-				gedit_file_browser_widget_set_root (data->tree_widget,
+				prepare_auto_root (plugin);
+				gedit_file_browser_widget_set_root (priv->tree_widget,
 					                            rootfile,
 					                            TRUE);
 			}
@@ -258,14 +262,15 @@ restore_default_location (GeditFileBrowserPluginData *data)
 }
 
 static void
-restore_filter (GeditFileBrowserPluginData *data)
+restore_filter (GeditFileBrowserPlugin *plugin)
 {
+	GeditFileBrowserPluginPrivate *priv = plugin->priv;
 	gchar *filter_mode;
 	GeditFileBrowserStoreFilterMode mode;
 	gchar *pattern;
 
 	/* Get filter_mode */
-	filter_mode = g_settings_get_string (data->plugin->priv->settings,
+	filter_mode = g_settings_get_string (priv->settings,
 					     FILEBROWSER_FILTER_MODE);
 
 	/* Filter mode */
@@ -288,13 +293,13 @@ restore_filter (GeditFileBrowserPluginData *data)
 
 	/* Set the filter mode */
 	gedit_file_browser_store_set_filter_mode (
-		gedit_file_browser_widget_get_browser_store (data->tree_widget),
+		gedit_file_browser_widget_get_browser_store (priv->tree_widget),
 		mode);
 
-	pattern = g_settings_get_string (data->plugin->priv->settings,
+	pattern = g_settings_get_string (priv->settings,
 					 FILEBROWSER_FILTER_PATTERN);
 
-	gedit_file_browser_widget_set_filter_pattern (data->tree_widget,
+	gedit_file_browser_widget_set_filter_pattern (priv->tree_widget,
 	                                              pattern);
 
 	g_free (filter_mode);
@@ -311,88 +316,84 @@ click_policy_from_string (gchar const *click_policy)
 }
 
 static void
-on_click_policy_changed (GSettings   *settings,
-			 const gchar *key,
-			 gpointer     user_data)
+on_click_policy_changed (GSettings              *settings,
+			 const gchar            *key,
+			 GeditFileBrowserPlugin *plugin)
 {
-	GeditFileBrowserPluginData *data;
+	GeditFileBrowserPluginPrivate *priv = plugin->priv;
 	gchar *click_policy;
 	GeditFileBrowserViewClickPolicy policy = GEDIT_FILE_BROWSER_VIEW_CLICK_POLICY_DOUBLE;
 	GeditFileBrowserView *view;
 
-	data = (GeditFileBrowserPluginData *)(user_data);
-
 	click_policy = g_settings_get_string (settings, key);
 	policy = click_policy_from_string (click_policy);
 	g_free (click_policy);
 
-	view = gedit_file_browser_widget_get_browser_view (data->tree_widget);
+	view = gedit_file_browser_widget_get_browser_view (priv->tree_widget);
 	gedit_file_browser_view_set_click_policy (view, policy);
 }
 
 static void
-on_confirm_trash_changed (GSettings   *settings,
-		 	  const gchar *key,
-			  gpointer     user_data)
+on_confirm_trash_changed (GSettings              *settings,
+		 	  const gchar            *key,
+			  GeditFileBrowserPlugin *plugin)
 {
-	GeditFileBrowserPluginData *data;
-
-	data = (GeditFileBrowserPluginData *)(user_data);
-
-	data->confirm_trash = g_settings_get_boolean (settings, key);
+	plugin->priv->confirm_trash = g_settings_get_boolean (settings, key);
 }
 
 static void
-install_nautilus_prefs (GeditFileBrowserPluginData *data)
+install_nautilus_prefs (GeditFileBrowserPlugin *plugin)
 {
+	GeditFileBrowserPluginPrivate *priv = plugin->priv;
 	gchar *pref;
 	gboolean prefb;
 	GeditFileBrowserViewClickPolicy policy;
 	GeditFileBrowserView *view;
 
 	/* Get click_policy */
-	pref = g_settings_get_string (data->plugin->priv->nautilus_settings,
+	pref = g_settings_get_string (priv->nautilus_settings,
 				      NAUTILUS_CLICK_POLICY_KEY);
 
 	policy = click_policy_from_string (pref);
 
-	view = gedit_file_browser_widget_get_browser_view (data->tree_widget);
+	view = gedit_file_browser_widget_get_browser_view (priv->tree_widget);
 	gedit_file_browser_view_set_click_policy (view, policy);
 
 	if (pref)
 	{
-		data->click_policy_handle =
-			g_signal_connect (data->plugin->priv->nautilus_settings,
+		priv->click_policy_handle =
+			g_signal_connect (priv->nautilus_settings,
 					  "changed::" NAUTILUS_CLICK_POLICY_KEY,
 					  G_CALLBACK (on_click_policy_changed),
-					  data);
+					  plugin);
 		g_free (pref);
 	}
 
 	/* Bind enable-delete */
-	g_settings_bind (data->plugin->priv->nautilus_settings,
+	g_settings_bind (priv->nautilus_settings,
 			 NAUTILUS_ENABLE_DELETE_KEY,
-			 data->tree_widget,
+			 priv->tree_widget,
 			 "enable-delete",
 			 G_SETTINGS_BIND_GET | G_SETTINGS_BIND_SET);
 
 	/* Get confirm_trash */
-	prefb = g_settings_get_boolean (data->plugin->priv->nautilus_settings,
+	prefb = g_settings_get_boolean (priv->nautilus_settings,
 					NAUTILUS_CONFIRM_TRASH_KEY);
 
-	data->confirm_trash = prefb;
+	priv->confirm_trash = prefb;
 
-	data->confirm_trash_handle =
-		g_signal_connect (data->plugin->priv->nautilus_settings,
+	priv->confirm_trash_handle =
+		g_signal_connect (priv->nautilus_settings,
 				  "changed::" NAUTILUS_CONFIRM_TRASH_KEY,
 				  G_CALLBACK (on_confirm_trash_changed),
-				  data);
+				  plugin);
 }
 
 static void
-set_root_from_doc (GeditFileBrowserPluginData *data,
-                   GeditDocument              *doc)
+set_root_from_doc (GeditFileBrowserPlugin *plugin,
+                   GeditDocument          *doc)
 {
+	GeditFileBrowserPluginPrivate *priv = plugin->priv;
 	GFile *file;
 	GFile *parent;
 
@@ -407,7 +408,7 @@ set_root_from_doc (GeditFileBrowserPluginData *data,
 
 	if (parent != NULL)
 	{
-		gedit_file_browser_widget_set_root (data->tree_widget,
+		gedit_file_browser_widget_set_root (priv->tree_widget,
 				                    parent,
 				                    TRUE);
 
@@ -418,22 +419,20 @@ set_root_from_doc (GeditFileBrowserPluginData *data,
 }
 
 static void
-on_action_set_active_root (GtkAction   *action,
-                           GeditWindow *window)
+on_action_set_active_root (GtkAction              *action,
+                           GeditFileBrowserPlugin *plugin)
 {
-	GeditFileBrowserPluginData *data;
-
-	data = get_plugin_data (window);
-	set_root_from_doc (data,
-	                   gedit_window_get_active_document (window));
+	set_root_from_doc (plugin,
+	                   gedit_window_get_active_document (plugin->priv->window));
 }
 
 static gchar *
-get_terminal (GeditFileBrowserPluginData *data)
+get_terminal (GeditFileBrowserPlugin *plugin)
 {
+	GeditFileBrowserPluginPrivate *priv = plugin->priv;
 	gchar *terminal;
 
-	terminal = g_settings_get_string (data->plugin->priv->terminal_settings,
+	terminal = g_settings_get_string (priv->terminal_settings,
 					  TERMINAL_EXEC_KEY);
 
 	if (terminal == NULL)
@@ -450,10 +449,10 @@ get_terminal (GeditFileBrowserPluginData *data)
 }
 
 static void
-on_action_open_terminal (GtkAction   *action,
-                         GeditWindow *window)
+on_action_open_terminal (GtkAction              *action,
+                         GeditFileBrowserPlugin *plugin)
 {
-	GeditFileBrowserPluginData *data;
+	GeditFileBrowserPluginPrivate *priv = plugin->priv;
 	gchar *terminal;
 	gchar *local;
 	gchar *argv[2];
@@ -462,13 +461,11 @@ on_action_open_terminal (GtkAction   *action,
 	GtkTreeIter iter;
 	GeditFileBrowserStore *store;
 
-	data = get_plugin_data (window);
-
 	/* Get the current directory */
-	if (!gedit_file_browser_widget_get_selected_directory (data->tree_widget, &iter))
+	if (!gedit_file_browser_widget_get_selected_directory (priv->tree_widget, &iter))
 		return;
 
-	store = gedit_file_browser_widget_get_browser_store (data->tree_widget);
+	store = gedit_file_browser_widget_get_browser_store (priv->tree_widget);
 	gtk_tree_model_get (GTK_TREE_MODEL (store),
 	                    &iter,
 	                    GEDIT_FILE_BROWSER_STORE_COLUMN_LOCATION,
@@ -478,7 +475,7 @@ on_action_open_terminal (GtkAction   *action,
 	if (file == NULL)
 		return;
 
-	terminal = get_terminal (data);
+	terminal = get_terminal (plugin);
 
 	local = g_file_get_path (file);
 
@@ -499,25 +496,23 @@ on_action_open_terminal (GtkAction   *action,
 }
 
 static void
-on_selection_changed_cb (GtkTreeSelection *selection,
-			 GeditWindow      *window)
+on_selection_changed_cb (GtkTreeSelection       *selection,
+			 GeditFileBrowserPlugin *plugin)
 {
-	GeditFileBrowserPluginData *data;
+	GeditFileBrowserPluginPrivate *priv = plugin->priv;
 	GtkTreeView *tree_view;
 	GtkTreeModel *model;
 	GtkTreeIter iter;
 	gboolean sensitive;
 	GFile *location;
 
-	data = get_plugin_data (window);
-
-	tree_view = GTK_TREE_VIEW (gedit_file_browser_widget_get_browser_view (data->tree_widget));
+	tree_view = GTK_TREE_VIEW (gedit_file_browser_widget_get_browser_view (priv->tree_widget));
 	model = gtk_tree_view_get_model (tree_view);
 
 	if (!GEDIT_IS_FILE_BROWSER_STORE (model))
 		return;
 
-	sensitive = gedit_file_browser_widget_get_selected_directory (data->tree_widget, &iter);
+	sensitive = gedit_file_browser_widget_get_selected_directory (priv->tree_widget, &iter);
 
 	if (sensitive)
 	{
@@ -529,7 +524,7 @@ on_selection_changed_cb (GtkTreeSelection *selection,
 	}
 
 	gtk_action_set_sensitive (
-		gtk_action_group_get_action (data->single_selection_action_group,
+		gtk_action_group_get_action (priv->single_selection_action_group,
 					     "OpenTerminal"),
 		sensitive);
 }
@@ -567,24 +562,24 @@ static GtkActionEntry extra_single_selection_actions[] = {
 };
 
 static void
-add_popup_ui (GeditWindow *window)
+add_popup_ui (GeditWindow            *window,
+	      GeditFileBrowserPlugin *plugin)
 {
-	GeditFileBrowserPluginData *data;
+	GeditFileBrowserPluginPrivate *priv = plugin->priv;
 	GtkUIManager *manager;
 	GtkActionGroup *action_group;
 	GError *error = NULL;
 
-	data = get_plugin_data (window);
-	manager = gedit_file_browser_widget_get_ui_manager (data->tree_widget);
+	manager = gedit_file_browser_widget_get_ui_manager (priv->tree_widget);
 
 	action_group = gtk_action_group_new ("FileBrowserPluginExtra");
 	gtk_action_group_set_translation_domain (action_group, NULL);
 	gtk_action_group_add_actions (action_group,
 				      extra_actions,
 				      G_N_ELEMENTS (extra_actions),
-				      window);
+				      plugin);
 	gtk_ui_manager_insert_action_group (manager, action_group, 0);
-	data->action_group = action_group;
+	priv->action_group = action_group;
 
 	action_group = gtk_action_group_new ("FileBrowserPluginSingleSelectionExtra");
 	gtk_action_group_set_translation_domain (action_group, NULL);
@@ -593,14 +588,14 @@ add_popup_ui (GeditWindow *window)
 				      G_N_ELEMENTS (extra_single_selection_actions),
 				      window);
 	gtk_ui_manager_insert_action_group (manager, action_group, 0);
-	data->single_selection_action_group = action_group;
+	priv->single_selection_action_group = action_group;
 
-	data->merge_id = gtk_ui_manager_add_ui_from_string (manager,
-	                                                    POPUP_UI,
-	                                                    -1,
-	                                                    &error);
+	priv->merge_id = gtk_ui_manager_add_ui_from_string (manager,
+							      POPUP_UI,
+							      -1,
+							      &error);
 
-	if (data->merge_id == 0)
+	if (priv->merge_id == 0)
 	{
 		g_warning("Unable to merge UI: %s", error->message);
 		g_error_free(error);
@@ -608,132 +603,129 @@ add_popup_ui (GeditWindow *window)
 }
 
 static void
-remove_popup_ui (GeditWindow *window)
+remove_popup_ui (GeditWindow            *window,
+		 GeditFileBrowserPlugin *plugin)
 {
-	GeditFileBrowserPluginData *data;
+	GeditFileBrowserPluginPrivate *priv = plugin->priv;
 	GtkUIManager *manager;
 
-	data = get_plugin_data (window);
-	manager = gedit_file_browser_widget_get_ui_manager (data->tree_widget);
-	gtk_ui_manager_remove_ui (manager, data->merge_id);
+	manager = gedit_file_browser_widget_get_ui_manager (priv->tree_widget);
+	gtk_ui_manager_remove_ui (manager, priv->merge_id);
 
-	gtk_ui_manager_remove_action_group (manager, data->action_group);
-	g_object_unref (data->action_group);
+	gtk_ui_manager_remove_action_group (manager, priv->action_group);
+	g_object_unref (priv->action_group);
 
-	gtk_ui_manager_remove_action_group (manager, data->single_selection_action_group);
-	g_object_unref (data->single_selection_action_group);
+	gtk_ui_manager_remove_action_group (manager, priv->single_selection_action_group);
+	g_object_unref (priv->single_selection_action_group);
 }
 
 static void
-impl_updateui (GeditPlugin *plugin,
-	       GeditWindow *window)
+gedit_file_browser_plugin_update_state (GeditWindowActivatable *activatable,
+					GeditWindow            *window)
 {
-	GeditFileBrowserPluginData *data;
+	GeditFileBrowserPluginPrivate *priv = GEDIT_FILE_BROWSER_PLUGIN (activatable)->priv;
 	GeditDocument *doc;
 
-	data = get_plugin_data (window);
-
 	doc = gedit_window_get_active_document (window);
 
-	gtk_action_set_sensitive (gtk_action_group_get_action (data->action_group,
+	gtk_action_set_sensitive (gtk_action_group_get_action (priv->action_group,
 	                                                       "SetActiveRoot"),
 	                          doc != NULL && !gedit_document_is_untitled (doc));
 }
 
 static void
-impl_activate (GeditPlugin *plugin,
-	       GeditWindow *window)
+gedit_file_browser_plugin_activate (GeditWindowActivatable *activatable,
+				    GeditWindow            *window)
 {
+	GeditFileBrowserPlugin *plugin = GEDIT_FILE_BROWSER_PLUGIN (activatable);
+	GeditFileBrowserPluginPrivate *priv = plugin->priv;
 	GeditPanel *panel;
-	GeditFileBrowserPluginData *data;
 	GtkWidget *image;
 	GdkPixbuf *pixbuf;
 	GeditFileBrowserStore *store;
 	gchar *data_dir;
 
-	data = g_slice_new0 (GeditFileBrowserPluginData);
+	priv->window = window;
 
-	data_dir = gedit_plugin_get_data_dir (plugin);
-	data->tree_widget = GEDIT_FILE_BROWSER_WIDGET (gedit_file_browser_widget_new (data_dir));
-	data->plugin = GEDIT_FILE_BROWSER_PLUGIN (plugin);
+	data_dir = peas_extension_base_get_data_dir (PEAS_EXTENSION_BASE (activatable));
+	priv->tree_widget = GEDIT_FILE_BROWSER_WIDGET (gedit_file_browser_widget_new (data_dir));
 	g_free (data_dir);
 
-	g_signal_connect (data->tree_widget,
+	g_signal_connect (priv->tree_widget,
 			  "location-activated",
 			  G_CALLBACK (on_location_activated_cb), window);
 
-	g_signal_connect (data->tree_widget,
-			  "error", G_CALLBACK (on_error_cb), window);
+	g_signal_connect (priv->tree_widget,
+			  "error", G_CALLBACK (on_error_cb), plugin);
 
-	g_signal_connect (data->tree_widget,
+	g_signal_connect (priv->tree_widget,
 	                  "notify::filter-pattern",
 	                  G_CALLBACK (on_filter_pattern_changed_cb),
-	                  window);
+	                  plugin);
 
-	g_signal_connect (data->tree_widget,
+	g_signal_connect (priv->tree_widget,
 	                  "confirm-delete",
 	                  G_CALLBACK (on_confirm_delete_cb),
-	                  window);
+	                  plugin);
 
-	g_signal_connect (data->tree_widget,
+	g_signal_connect (priv->tree_widget,
 	                  "confirm-no-trash",
 	                  G_CALLBACK (on_confirm_no_trash_cb),
 	                  window);
 
 	g_signal_connect (gtk_tree_view_get_selection (GTK_TREE_VIEW
 			  (gedit_file_browser_widget_get_browser_view
-			  (data->tree_widget))),
+			  (priv->tree_widget))),
 			  "changed",
 			  G_CALLBACK (on_selection_changed_cb),
-			  window);
+			  plugin);
 
 	panel = gedit_window_get_side_panel (window);
-	pixbuf = gedit_file_browser_utils_pixbuf_from_theme("system-file-manager",
-	                                                    GTK_ICON_SIZE_MENU);
+	pixbuf = gedit_file_browser_utils_pixbuf_from_theme ("system-file-manager",
+	                                                     GTK_ICON_SIZE_MENU);
 
 	if (pixbuf)
 	{
-		image = gtk_image_new_from_pixbuf(pixbuf);
+		image = gtk_image_new_from_pixbuf (pixbuf);
 		g_object_unref(pixbuf);
 	}
 	else
 	{
-		image = gtk_image_new_from_stock(GTK_STOCK_INDEX, GTK_ICON_SIZE_MENU);
+		image = gtk_image_new_from_stock (GTK_STOCK_INDEX, GTK_ICON_SIZE_MENU);
 	}
 
-	gtk_widget_show(image);
+	gtk_widget_show (image);
 	gedit_panel_add_item (panel,
-	                      GTK_WIDGET (data->tree_widget),
+	                      GTK_WIDGET (priv->tree_widget),
 	                      "GeditFileBrowserPanel",
 	                      _("File Browser"),
 	                      image);
-	gtk_widget_show (GTK_WIDGET (data->tree_widget));
-	g_object_set_data (G_OBJECT (window), WINDOW_DATA_KEY, data);
+	gtk_widget_show (GTK_WIDGET (priv->tree_widget));
 
-	add_popup_ui (window);
+	add_popup_ui (window, plugin);
 
 	/* Restore filter options */
-	restore_filter (data);
+	restore_filter (plugin);
 
 	/* Install nautilus preferences */
-	install_nautilus_prefs (data);
+	install_nautilus_prefs (plugin);
 
 	/* Connect signals to store the last visited location */
-	g_signal_connect (gedit_file_browser_widget_get_browser_view (data->tree_widget),
+	g_signal_connect (gedit_file_browser_widget_get_browser_view (priv->tree_widget),
 	                  "notify::model",
 	                  G_CALLBACK (on_model_set_cb),
-	                  window);
+	                  plugin);
 
-	store = gedit_file_browser_widget_get_browser_store (data->tree_widget);
+	store = gedit_file_browser_widget_get_browser_store (priv->tree_widget);
 	g_signal_connect (store,
 	                  "notify::virtual-root",
 	                  G_CALLBACK (on_virtual_root_changed_cb),
-	                  window);
+	                  plugin);
 
 	g_signal_connect (store,
 	                  "notify::filter-mode",
 	                  G_CALLBACK (on_filter_mode_changed_cb),
-	                  window);
+	                  plugin);
 
 	g_signal_connect (store,
 			  "rename",
@@ -743,22 +735,22 @@ impl_activate (GeditPlugin *plugin,
 	g_signal_connect (window,
 	                  "tab-added",
 	                  G_CALLBACK (on_tab_added_cb),
-	                  data);
+	                  plugin);
 
 	/* Register messages on the bus */
-	gedit_file_browser_messages_register (window, data->tree_widget);
+	gedit_file_browser_messages_register (window, priv->tree_widget);
 
-	impl_updateui (plugin, window);
+	gedit_file_browser_plugin_update_state (activatable, window);
 }
 
 static void
-impl_deactivate (GeditPlugin *plugin,
-		 GeditWindow *window)
+gedit_file_browser_plugin_deactivate (GeditWindowActivatable *activatable,
+				      GeditWindow            *window)
 {
-	GeditFileBrowserPluginData *data;
+	GeditFileBrowserPlugin *plugin = GEDIT_FILE_BROWSER_PLUGIN (activatable);
+	GeditFileBrowserPluginPrivate *priv = plugin->priv;
 	GeditPanel *panel;
 
-	data = get_plugin_data (window);
 
 	/* Unregister messages from the bus */
 	gedit_file_browser_messages_unregister (window);
@@ -766,43 +758,54 @@ impl_deactivate (GeditPlugin *plugin,
 	/* Disconnect signals */
 	g_signal_handlers_disconnect_by_func (window,
 	                                      G_CALLBACK (on_tab_added_cb),
-	                                      data);
+	                                      plugin);
 
-	if (data->click_policy_handle)
-		g_signal_handler_disconnect (data->plugin->priv->nautilus_settings,
-					     data->click_policy_handle);
+	if (priv->click_policy_handle)
+	{
+		g_signal_handler_disconnect (priv->nautilus_settings,
+					     priv->click_policy_handle);
+	}
 
-	if (data->enable_delete_handle)
-		g_signal_handler_disconnect (data->plugin->priv->nautilus_settings,
-					     data->enable_delete_handle);
+	if (priv->enable_delete_handle)
+	{
+		g_signal_handler_disconnect (priv->nautilus_settings,
+					     priv->enable_delete_handle);
+	}
 
-	if (data->confirm_trash_handle)
-		g_signal_handler_disconnect (data->plugin->priv->nautilus_settings,
-					     data->confirm_trash_handle);
+	if (priv->confirm_trash_handle)
+	{
+		g_signal_handler_disconnect (priv->nautilus_settings,
+					     priv->confirm_trash_handle);
+	}
 
-	remove_popup_ui (window);
+	remove_popup_ui (window, plugin);
 
 	panel = gedit_window_get_side_panel (window);
-	gedit_panel_remove_item (panel, GTK_WIDGET (data->tree_widget));
-
-	g_slice_free (GeditFileBrowserPluginData, data);
-	g_object_set_data (G_OBJECT (window), WINDOW_DATA_KEY, NULL);
+	gedit_panel_remove_item (panel, GTK_WIDGET (priv->tree_widget));
 }
 
 static void
 filetree_plugin_class_init (GeditFileBrowserPluginClass *klass)
 {
-	GObjectClass  *object_class = G_OBJECT_CLASS (klass);
-	GeditPluginClass *plugin_class = GEDIT_PLUGIN_CLASS (klass);
+	GObjectClass *object_class = G_OBJECT_CLASS (klass);
 
 	object_class->dispose = filetree_plugin_dispose;
 
-	plugin_class->activate = impl_activate;
-	plugin_class->deactivate = impl_deactivate;
-	plugin_class->update_ui = impl_updateui;
-
 	g_type_class_add_private (object_class,
-				  sizeof (GeditFileBrowserPluginPrivate));
+				  sizeof (GeditFileBrowserPlugin));
+}
+
+static void
+gedit_window_activatable_iface_init (GeditWindowActivatableInterface *iface)
+{
+	iface->activate = gedit_file_browser_plugin_activate;
+	iface->deactivate = gedit_file_browser_plugin_deactivate;
+	iface->update_state = gedit_file_browser_plugin_update_state;
+}
+
+static void
+filetree_plugin_class_finalize (GeditFileBrowserPluginClass *klass)
+{
 }
 
 /* Callbacks */
@@ -818,20 +821,18 @@ static void
 on_error_cb (GeditFileBrowserWidget *tree_widget,
 	     guint                   code,
 	     gchar const            *message,
-	     GeditWindow            *window)
+	     GeditFileBrowserPlugin *plugin)
 {
+	GeditFileBrowserPluginPrivate *priv = plugin->priv;
 	gchar *title;
 	GtkWidget *dlg;
-	GeditFileBrowserPluginData *data;
-
-	data = get_plugin_data (window);
 
 	/* Do not show the error when the root has been set automatically */
-	if (data->auto_root && (code == GEDIT_FILE_BROWSER_ERROR_SET_ROOT ||
-	                        code == GEDIT_FILE_BROWSER_ERROR_LOAD_DIRECTORY))
+	if (priv->auto_root && (code == GEDIT_FILE_BROWSER_ERROR_SET_ROOT ||
+	                          code == GEDIT_FILE_BROWSER_ERROR_LOAD_DIRECTORY))
 	{
 		/* Show bookmarks */
-		gedit_file_browser_widget_show_bookmarks (data->tree_widget);
+		gedit_file_browser_widget_show_bookmarks (priv->tree_widget);
 		return;
 	}
 
@@ -863,7 +864,7 @@ on_error_cb (GeditFileBrowserWidget *tree_widget,
 			break;
 	}
 
-	dlg = gtk_message_dialog_new (GTK_WINDOW (window),
+	dlg = gtk_message_dialog_new (GTK_WINDOW (priv->window),
 				      GTK_DIALOG_MODAL |
 				      GTK_DIALOG_DESTROY_WITH_PARENT,
 				      GTK_MESSAGE_ERROR, GTK_BUTTONS_OK,
@@ -876,55 +877,55 @@ on_error_cb (GeditFileBrowserWidget *tree_widget,
 }
 
 static void
-on_model_set_cb (GeditFileBrowserView *widget,
-                 GParamSpec           *arg1,
-                 GeditWindow          *window)
+on_model_set_cb (GeditFileBrowserView   *widget,
+                 GParamSpec             *param,
+                 GeditFileBrowserPlugin *plugin)
 {
-	GeditFileBrowserPluginData *data = get_plugin_data (window);
+	GeditFileBrowserPluginPrivate *priv = plugin->priv;
 	GtkTreeModel *model;
 
-	model = gtk_tree_view_get_model (GTK_TREE_VIEW (gedit_file_browser_widget_get_browser_view (data->tree_widget)));
+	model = gtk_tree_view_get_model (GTK_TREE_VIEW (gedit_file_browser_widget_get_browser_view (priv->tree_widget)));
 
 	if (model == NULL)
 		return;
 
-	g_settings_set_boolean (data->plugin->priv->settings,
+	g_settings_set_boolean (priv->settings,
 	                        FILEBROWSER_TREE_VIEW,
 	                        GEDIT_IS_FILE_BROWSER_STORE (model));
 }
 
 static void
-on_filter_mode_changed_cb (GeditFileBrowserStore *model,
-                           GParamSpec            *param,
-                           GeditWindow           *window)
+on_filter_mode_changed_cb (GeditFileBrowserStore  *model,
+                           GParamSpec             *param,
+                           GeditFileBrowserPlugin *plugin)
 {
+	GeditFileBrowserPluginPrivate *priv = plugin->priv;
 	GeditFileBrowserStoreFilterMode mode;
-	GeditFileBrowserPluginData *data = get_plugin_data (window);
 
 	mode = gedit_file_browser_store_get_filter_mode (model);
 
 	if ((mode & GEDIT_FILE_BROWSER_STORE_FILTER_MODE_HIDE_HIDDEN) &&
 	    (mode & GEDIT_FILE_BROWSER_STORE_FILTER_MODE_HIDE_BINARY))
 	{
-		g_settings_set_string (data->plugin->priv->settings,
+		g_settings_set_string (priv->settings,
 		                       FILEBROWSER_FILTER_MODE,
 		                       "hidden-and-binary");
 	}
 	else if (mode & GEDIT_FILE_BROWSER_STORE_FILTER_MODE_HIDE_HIDDEN)
 	{
-		g_settings_set_string (data->plugin->priv->settings,
+		g_settings_set_string (priv->settings,
 		                       FILEBROWSER_FILTER_MODE,
 		                       "hidden");
 	}
 	else if (mode & GEDIT_FILE_BROWSER_STORE_FILTER_MODE_HIDE_BINARY)
 	{
-		g_settings_set_string (data->plugin->priv->settings,
+		g_settings_set_string (priv->settings,
 		                       FILEBROWSER_FILTER_MODE,
 		                       "binary");
 	}
 	else
 	{
-		g_settings_set_string (data->plugin->priv->settings,
+		g_settings_set_string (priv->settings,
 		                       FILEBROWSER_FILTER_MODE,
 		                       "none");
 	}
@@ -987,22 +988,22 @@ on_rename_cb (GeditFileBrowserStore *store,
 static void
 on_filter_pattern_changed_cb (GeditFileBrowserWidget *widget,
                               GParamSpec             *param,
-                              GeditWindow            *window)
+                              GeditFileBrowserPlugin *plugin)
 {
-	GeditFileBrowserPluginData *data = get_plugin_data (window);
+	GeditFileBrowserPluginPrivate *priv = plugin->priv;
 	gchar *pattern;
 
 	g_object_get (G_OBJECT (widget), "filter-pattern", &pattern, NULL);
 
 	if (pattern == NULL)
 	{
-		g_settings_set_string (data->plugin->priv->settings,
+		g_settings_set_string (priv->settings,
 		                       FILEBROWSER_FILTER_PATTERN,
 		                       "");
 	}
 	else
 	{
-		g_settings_set_string (data->plugin->priv->settings,
+		g_settings_set_string (priv->settings,
 		                       FILEBROWSER_FILTER_PATTERN,
 		                       pattern);
 	}
@@ -1011,11 +1012,11 @@ on_filter_pattern_changed_cb (GeditFileBrowserWidget *widget,
 }
 
 static void
-on_virtual_root_changed_cb (GeditFileBrowserStore *store,
-                            GParamSpec            *param,
-                            GeditWindow           *window)
+on_virtual_root_changed_cb (GeditFileBrowserStore  *store,
+                            GParamSpec             *param,
+                            GeditFileBrowserPlugin *plugin)
 {
-	GeditFileBrowserPluginData *data = get_plugin_data (window);
+	GeditFileBrowserPluginPrivate *priv = plugin->priv;
 	GFile *root;
 	GFile *virtual_root;
 	gchar *uri_root = NULL;
@@ -1032,7 +1033,7 @@ on_virtual_root_changed_cb (GeditFileBrowserStore *store,
 		g_object_unref (root);
 	}
 
-	g_settings_set_string (data->plugin->priv->settings,
+	g_settings_set_string (priv->settings,
 	                       FILEBROWSER_ROOT,
 	                       uri_root);
 	g_free (uri_root);
@@ -1042,7 +1043,7 @@ on_virtual_root_changed_cb (GeditFileBrowserStore *store,
 	if (!virtual_root)
 	{
 		/* Set virtual to same as root then */
-		g_settings_set_string (data->plugin->priv->settings,
+		g_settings_set_string (priv->settings,
 		                       FILEBROWSER_VIRTUAL_ROOT,
 		                       uri_root);
 	}
@@ -1052,27 +1053,28 @@ on_virtual_root_changed_cb (GeditFileBrowserStore *store,
 
 		uri_vroot = g_file_get_uri (virtual_root);
 
-		g_settings_set_string (data->plugin->priv->settings,
+		g_settings_set_string (priv->settings,
 		                       FILEBROWSER_VIRTUAL_ROOT,
 		                       uri_vroot);
 		g_free (uri_vroot);
 		g_object_unref (virtual_root);
 	}
 
-	g_signal_handlers_disconnect_by_func (window,
+	g_signal_handlers_disconnect_by_func (priv->window,
 	                                      G_CALLBACK (on_tab_added_cb),
-	                                      data);
+	                                      plugin);
 }
 
 static void
-on_tab_added_cb (GeditWindow                *window,
-                 GeditTab                   *tab,
-                 GeditFileBrowserPluginData *data)
+on_tab_added_cb (GeditWindow            *window,
+                 GeditTab               *tab,
+                 GeditFileBrowserPlugin *plugin)
 {
+	GeditFileBrowserPluginPrivate *priv = plugin->priv;
 	gboolean open;
 	gboolean load_default = TRUE;
 
-	open = g_settings_get_boolean (data->plugin->priv->settings,
+	open = g_settings_get_boolean (priv->settings,
 	                               FILEBROWSER_OPEN_AT_FIRST_DOC);
 
 	if (open)
@@ -1088,8 +1090,8 @@ on_tab_added_cb (GeditWindow                *window,
 		{
 			if (gedit_utils_location_has_file_scheme (location))
 			{
-				prepare_auto_root (data);
-				set_root_from_doc (data, doc);
+				prepare_auto_root (plugin);
+				set_root_from_doc (plugin, doc);
 				load_default = FALSE;
 			}
 			g_object_unref (location);
@@ -1097,12 +1099,12 @@ on_tab_added_cb (GeditWindow                *window,
 	}
 
 	if (load_default)
-		restore_default_location (data);
+		restore_default_location (plugin);
 
 	/* Disconnect this signal, it's only called once */
 	g_signal_handlers_disconnect_by_func (window,
 	                                      G_CALLBACK (on_tab_added_cb),
-	                                      data);
+	                                      plugin);
 }
 
 static gchar *
@@ -1158,17 +1160,15 @@ static gboolean
 on_confirm_delete_cb (GeditFileBrowserWidget *widget,
                       GeditFileBrowserStore  *store,
                       GList                  *paths,
-                      GeditWindow            *window)
+                      GeditFileBrowserPlugin *plugin)
 {
+	GeditFileBrowserPluginPrivate *priv = plugin->priv;
 	gchar *normal;
 	gchar *message;
 	gchar *secondary;
 	gboolean result;
-	GeditFileBrowserPluginData *data;
 
-	data = get_plugin_data (window);
-
-	if (!data->confirm_trash)
+	if (!priv->confirm_trash)
 		return TRUE;
 
 	if (paths->next == NULL)
@@ -1184,7 +1184,7 @@ on_confirm_delete_cb (GeditFileBrowserWidget *widget,
 
 	secondary = _("If you delete an item, it is permanently lost.");
 
-	result = gedit_file_browser_utils_confirmation_dialog (window,
+	result = gedit_file_browser_utils_confirmation_dialog (priv->window,
 	                                                       GTK_MESSAGE_QUESTION,
 	                                                       message,
 	                                                       secondary,
@@ -1195,4 +1195,15 @@ on_confirm_delete_cb (GeditFileBrowserWidget *widget,
 
 	return result;
 }
+
+G_MODULE_EXPORT void
+peas_register_types (PeasObjectModule *module)
+{
+	filetree_plugin_register_type (G_TYPE_MODULE (module));
+
+	peas_object_module_register_extension_type (module,
+						    GEDIT_TYPE_WINDOW_ACTIVATABLE,
+						    GEDIT_TYPE_FILE_BROWSER_PLUGIN);
+}
+
 /* ex:ts=8:noet: */
diff --git a/plugins/filebrowser/gedit-file-browser-plugin.h b/plugins/filebrowser/gedit-file-browser-plugin.h
index f2d1248..c951287 100644
--- a/plugins/filebrowser/gedit-file-browser-plugin.h
+++ b/plugins/filebrowser/gedit-file-browser-plugin.h
@@ -24,7 +24,8 @@
 
 #include <glib.h>
 #include <glib-object.h>
-#include <gedit/gedit-plugin.h>
+#include <libpeas/peas-extension-base.h>
+#include <libpeas/peas-object-module.h>
 
 G_BEGIN_DECLS
 /*
@@ -44,7 +45,7 @@ typedef struct _GeditFileBrowserPluginClass   GeditFileBrowserPluginClass;
 
 struct _GeditFileBrowserPlugin
 {
-	GeditPlugin parent_instance;
+	PeasExtensionBase parent_instance;
 
 	/* < private > */
 	GeditFileBrowserPluginPrivate *priv;
@@ -52,7 +53,7 @@ struct _GeditFileBrowserPlugin
 
 struct _GeditFileBrowserPluginClass
 {
-	GeditPluginClass parent_class;
+	PeasExtensionBaseClass parent_class;
 };
 
 /*
@@ -61,9 +62,10 @@ struct _GeditFileBrowserPluginClass
 GType			filetree_plugin_get_type	(void) G_GNUC_CONST;
 
 /* All the plugins must implement this function */
-G_MODULE_EXPORT GType	register_gedit_plugin		(GTypeModule *module);
+G_MODULE_EXPORT void	peas_register_types		(PeasObjectModule *module);
 
 G_END_DECLS
 
 #endif /* __GEDIT_FILE_BROWSER_PLUGIN_H__ */
+
 /* ex:ts=8:noet: */
diff --git a/plugins/filebrowser/gedit-file-browser-store.c b/plugins/filebrowser/gedit-file-browser-store.c
index 4f91580..139424c 100644
--- a/plugins/filebrowser/gedit-file-browser-store.c
+++ b/plugins/filebrowser/gedit-file-browser-store.c
@@ -26,7 +26,6 @@
 #include <string.h>
 #include <glib/gi18n-lib.h>
 #include <gio/gio.h>
-#include <gedit/gedit-plugin.h>
 #include <gedit/gedit-utils.h>
 
 #include "gedit-file-browser-store.h"
@@ -197,14 +196,13 @@ static void model_check_dummy                               (GeditFileBrowserSto
 static void next_files_async 				    (GFileEnumerator        *enumerator,
 							     AsyncNode              *async);
 
-GEDIT_PLUGIN_DEFINE_TYPE_WITH_CODE (GeditFileBrowserStore, gedit_file_browser_store,
-			G_TYPE_OBJECT,
-			GEDIT_PLUGIN_IMPLEMENT_INTERFACE (gedit_file_browser_store_tree_model,
-							  GTK_TYPE_TREE_MODEL,
-							  gedit_file_browser_store_iface_init)
-			GEDIT_PLUGIN_IMPLEMENT_INTERFACE (gedit_file_browser_store_drag_source,
-							  GTK_TYPE_TREE_DRAG_SOURCE,
-							  gedit_file_browser_store_drag_source_init))
+G_DEFINE_DYNAMIC_TYPE_EXTENDED (GeditFileBrowserStore, gedit_file_browser_store,
+				G_TYPE_OBJECT,
+				0,
+				G_IMPLEMENT_INTERFACE (GTK_TYPE_TREE_MODEL,
+						       gedit_file_browser_store_iface_init)
+				G_IMPLEMENT_INTERFACE (GTK_TYPE_TREE_DRAG_SOURCE,
+						       gedit_file_browser_store_drag_source_init))
 
 /* Properties */
 enum {
@@ -428,6 +426,11 @@ gedit_file_browser_store_class_init (GeditFileBrowserStoreClass *klass)
 }
 
 static void
+gedit_file_browser_store_class_finalize (GeditFileBrowserStoreClass *klass)
+{
+}
+
+static void
 gedit_file_browser_store_iface_init (GtkTreeModelIface *iface)
 {
 	iface->get_flags = gedit_file_browser_store_get_flags;
@@ -3777,4 +3780,10 @@ gedit_file_browser_store_new_directory (GeditFileBrowserStore *model,
 	return result;
 }
 
+void
+_gedit_file_browser_store_register_type (GTypeModule *type_module)
+{
+	gedit_file_browser_store_register_type (type_module);
+}
+
 /* ex:ts=8:noet: */
diff --git a/plugins/filebrowser/gedit-file-browser-store.h b/plugins/filebrowser/gedit-file-browser-store.h
index 1a78a83..d72aeef 100644
--- a/plugins/filebrowser/gedit-file-browser-store.h
+++ b/plugins/filebrowser/gedit-file-browser-store.h
@@ -115,7 +115,6 @@ struct _GeditFileBrowserStoreClass {
 };
 
 GType		 gedit_file_browser_store_get_type		(void) G_GNUC_CONST;
-GType		 gedit_file_browser_store_register_type		(GTypeModule                      *module);
 
 GeditFileBrowserStore *gedit_file_browser_store_new		(GFile                            *root);
 
@@ -193,6 +192,8 @@ gboolean	 gedit_file_browser_store_new_directory		(GeditFileBrowserStore
 void
 gedit_file_browser_store_cancel_mount_operation			(GeditFileBrowserStore            *store);
 
+void		 _gedit_file_browser_store_register_type	(GTypeModule                      *type_module);
+
 G_END_DECLS
 
 #endif /* __GEDIT_FILE_BROWSER_STORE_H__ */
diff --git a/plugins/filebrowser/gedit-file-browser-view.c b/plugins/filebrowser/gedit-file-browser-view.c
index fb98a0a..b3053f5 100644
--- a/plugins/filebrowser/gedit-file-browser-view.c
+++ b/plugins/filebrowser/gedit-file-browser-view.c
@@ -21,11 +21,10 @@
 
 #include <string.h>
 
+#include <glib-object.h>
 #include <gio/gio.h>
 #include <gdk/gdkkeysyms.h>
 
-#include <gedit/gedit-plugin.h>
-
 #include "gedit-file-browser-store.h"
 #include "gedit-file-bookmarks-store.h"
 #include "gedit-file-browser-view.h"
@@ -88,13 +87,12 @@ static const GtkTargetEntry drag_source_targets[] = {
 	{ "text/uri-list", 0, 0 }
 };
 
-GEDIT_PLUGIN_DEFINE_TYPE (GeditFileBrowserView, gedit_file_browser_view,
-	                  GTK_TYPE_TREE_VIEW)
+G_DEFINE_DYNAMIC_TYPE (GeditFileBrowserView, gedit_file_browser_view, GTK_TYPE_TREE_VIEW)
 
 static void on_cell_edited 		(GtkCellRendererText    *cell,
 				 	 gchar                  *path,
 				 	 gchar                  *new_text,
-				 	GeditFileBrowserView    *tree_view);
+				 	 GeditFileBrowserView   *tree_view);
 
 static void on_begin_refresh 		(GeditFileBrowserStore  *model,
 					 GeditFileBrowserView   *view);
@@ -950,6 +948,11 @@ gedit_file_browser_view_class_init (GeditFileBrowserViewClass *klass)
 }
 
 static void
+gedit_file_browser_view_class_finalize (GeditFileBrowserViewClass *klass)
+{
+}
+
+static void
 cell_data_cb (GtkTreeViewColumn    *tree_column,
 	      GtkCellRenderer      *cell,
 	      GtkTreeModel         *tree_model,
@@ -1296,4 +1299,11 @@ on_row_inserted (GeditFileBrowserStore *model,
 
 	gtk_tree_path_free (copy);
 }
+
+void
+_gedit_file_browser_view_register_type (GTypeModule *type_module)
+{
+	gedit_file_browser_view_register_type (type_module);
+}
+
 /* ex:ts=8:noet: */
diff --git a/plugins/filebrowser/gedit-file-browser-view.h b/plugins/filebrowser/gedit-file-browser-view.h
index 5e4f61c..9ca54bd 100644
--- a/plugins/filebrowser/gedit-file-browser-view.h
+++ b/plugins/filebrowser/gedit-file-browser-view.h
@@ -66,7 +66,6 @@ struct _GeditFileBrowserViewClass
 };
 
 GType		 gedit_file_browser_view_get_type			(void) G_GNUC_CONST;
-GType		 gedit_file_browser_view_register_type			(GTypeModule                     *module);
 
 GtkWidget	*gedit_file_browser_view_new				(void);
 void		 gedit_file_browser_view_set_model			(GeditFileBrowserView            *tree_view,
@@ -78,6 +77,8 @@ void		 gedit_file_browser_view_set_click_policy		(GeditFileBrowserView
 void		 gedit_file_browser_view_set_restore_expand_state	(GeditFileBrowserView            *tree_view,
 									 gboolean                         restore_expand_state);
 
+void		 _gedit_file_browser_view_register_type			(GTypeModule                     *type_module);
+
 G_END_DECLS
 
 #endif /* __GEDIT_FILE_BROWSER_VIEW_H__ */
diff --git a/plugins/filebrowser/gedit-file-browser-widget.c b/plugins/filebrowser/gedit-file-browser-widget.c
index c4521ed..a433251 100644
--- a/plugins/filebrowser/gedit-file-browser-widget.c
+++ b/plugins/filebrowser/gedit-file-browser-widget.c
@@ -30,7 +30,6 @@
 #include <glib/gi18n-lib.h>
 #include <gdk/gdkkeysyms.h>
 #include <gedit/gedit-utils.h>
-#include <gedit/gedit-plugin.h>
 
 #include "gedit-file-browser-utils.h"
 #include "gedit-file-browser-error.h"
@@ -234,8 +233,7 @@ static void on_action_filter_binary            (GtkAction              *action,
 static void on_action_bookmark_open            (GtkAction              *action,
 						GeditFileBrowserWidget *obj);
 
-GEDIT_PLUGIN_DEFINE_TYPE (GeditFileBrowserWidget, gedit_file_browser_widget,
-	                  GTK_TYPE_VBOX)
+G_DEFINE_DYNAMIC_TYPE (GeditFileBrowserWidget, gedit_file_browser_widget, GTK_TYPE_VBOX)
 
 static void
 free_name_icon (gpointer data)
@@ -488,6 +486,11 @@ gedit_file_browser_widget_class_init (GeditFileBrowserWidgetClass *klass)
 }
 
 static void
+gedit_file_browser_widget_class_finalize (GeditFileBrowserWidgetClass *klass)
+{
+}
+
+static void
 add_signal (GeditFileBrowserWidget *obj,
 	    gpointer                object,
 	    gulong                  id)
@@ -3216,4 +3219,10 @@ on_action_bookmark_open (GtkAction              *action,
 		bookmark_open (obj, model, &iter);
 }
 
+void
+_gedit_file_browser_widget_register_type (GTypeModule *type_module)
+{
+	gedit_file_browser_widget_register_type (type_module);
+}
+
 /* ex:ts=8:noet: */
diff --git a/plugins/filebrowser/gedit-file-browser-widget.h b/plugins/filebrowser/gedit-file-browser-widget.h
index 1bdbf54..dad6735 100644
--- a/plugins/filebrowser/gedit-file-browser-widget.h
+++ b/plugins/filebrowser/gedit-file-browser-widget.h
@@ -71,7 +71,6 @@ struct _GeditFileBrowserWidgetClass
 };
 
 GType		 gedit_file_browser_widget_get_type            (void) G_GNUC_CONST;
-GType		 gedit_file_browser_widget_register_type       (GTypeModule             *module);
 
 GtkWidget	*gedit_file_browser_widget_new            	(const gchar            *data_dir);
 
@@ -115,6 +114,8 @@ void		 gedit_file_browser_widget_refresh		(GeditFileBrowserWidget *obj);
 void		 gedit_file_browser_widget_history_back		(GeditFileBrowserWidget *obj);
 void		 gedit_file_browser_widget_history_forward	(GeditFileBrowserWidget *obj);
 
+void		 _gedit_file_browser_widget_register_type      (GTypeModule            *type_module);
+
 G_END_DECLS
 
 #endif /* __GEDIT_FILE_BROWSER_WIDGET_H__ */



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