[gedit-plugins] Port bookmarks plugin to libpeas.



commit 9429b26a7b20bea62b8d6bffd9e48a40f89b2216
Author: Ignacio Casal Quinteiro <icq gnome org>
Date:   Sun Jul 4 21:31:08 2010 +0200

    Port bookmarks plugin to libpeas.

 plugins/bookmarks/gedit-bookmarks-plugin.c |  210 ++++++++++++++++------------
 plugins/bookmarks/gedit-bookmarks-plugin.h |   46 +++----
 2 files changed, 136 insertions(+), 120 deletions(-)
---
diff --git a/plugins/bookmarks/gedit-bookmarks-plugin.c b/plugins/bookmarks/gedit-bookmarks-plugin.c
index bcbb6cc..d11a24d 100644
--- a/plugins/bookmarks/gedit-bookmarks-plugin.c
+++ b/plugins/bookmarks/gedit-bookmarks-plugin.c
@@ -28,17 +28,14 @@
 #include <glib/gi18n-lib.h>
 #include <gedit/gedit-debug.h>
 #include <gedit/gedit-window.h>
+#include <gedit/gedit-window-activatable.h>
 #include <gedit/gedit-document.h>
 
-#define WINDOW_DATA_KEY	"GeditBookmarksPluginWindowData"
-
 #define GEDIT_BOOKMARKS_PLUGIN_GET_PRIVATE(object) \
 				(G_TYPE_INSTANCE_GET_PRIVATE ((object),	\
 				GEDIT_TYPE_BOOKMARKS_PLUGIN,		\
 				GeditBookmarksPluginPrivate))
 
-#define BOOKMARKS_DATA(window) ((WindowData *)(g_object_get_data (G_OBJECT (window), WINDOW_DATA_KEY)))
-
 #define BOOKMARK_CATEGORY "GeditBookmarksPluginBookmark"
 #define INSERT_DATA_KEY "GeditBookmarksInsertData"
 #define METADATA_ATTR "metadata::gedit-bookmarks"
@@ -80,49 +77,62 @@ static void on_begin_user_action		(GtkTextBuffer *buffer,
 static void on_end_user_action			(GtkTextBuffer *buffer,
 						 InsertData    *data);
 
-static void on_toggle_bookmark_activate 	(GtkAction   *action,
-						 GeditWindow *window);
-static void on_next_bookmark_activate 		(GtkAction   *action,
-						 GeditWindow *window);
-static void on_previous_bookmark_activate 	(GtkAction   *action,
-						 GeditWindow *window);
-static void on_tab_added 			(GeditWindow *window,
-						 GeditTab    *tab,
-						 GeditPlugin *plugin);
-static void on_tab_removed 			(GeditWindow *window,
-						 GeditTab    *tab,
-						 GeditPlugin *plugin);
+static void on_toggle_bookmark_activate 	(GtkAction            *action,
+						 GeditBookmarksPlugin *plugin);
+static void on_next_bookmark_activate 		(GtkAction            *action,
+						 GeditBookmarksPlugin *plugin);
+static void on_previous_bookmark_activate 	(GtkAction            *action,
+						 GeditBookmarksPlugin *plugin);
+static void on_tab_added 			(GeditWindow          *window,
+						 GeditTab             *tab,
+						 GeditBookmarksPlugin *plugin);
+static void on_tab_removed 			(GeditWindow          *window,
+						 GeditTab             *tab,
+						 GeditBookmarksPlugin *plugin);
 
 static void add_bookmark (GtkSourceBuffer *buffer, GtkTextIter *iter);
 static void remove_bookmark (GtkSourceBuffer *buffer, GtkTextIter *iter);
 static void toggle_bookmark (GtkSourceBuffer *buffer, GtkTextIter *iter);
 
-typedef struct
+static void gedit_window_activatable_iface_init (GeditWindowActivatableInterface *iface);
+
+G_DEFINE_DYNAMIC_TYPE_EXTENDED (GeditBookmarksPlugin,
+				gedit_bookmarks_plugin,
+				PEAS_TYPE_EXTENSION_BASE,
+				0,
+				G_IMPLEMENT_INTERFACE_DYNAMIC (GEDIT_TYPE_WINDOW_ACTIVATABLE,
+							       gedit_window_activatable_iface_init))
+
+struct _GeditBookmarksPluginPrivate
 {
-	GtkActionGroup * action_group;
-	guint ui_id;
-} WindowData;
+	GeditWindow *window;
 
-GEDIT_PLUGIN_REGISTER_TYPE (GeditBookmarksPlugin, gedit_bookmarks_plugin)
+	GtkActionGroup *action_group;
+	guint ui_id;
+};
 
 static void
 gedit_bookmarks_plugin_init (GeditBookmarksPlugin *plugin)
 {
 	gedit_debug_message (DEBUG_PLUGINS, "GeditBookmarksPlugin initializing");
+
+	plugin->priv = GEDIT_BOOKMARKS_PLUGIN_GET_PRIVATE (plugin);
 }
 
 static void
-gedit_bookmarks_plugin_finalize (GObject *object)
+gedit_bookmarks_plugin_dispose (GObject *object)
 {
-	gedit_debug_message (DEBUG_PLUGINS, "GeditBookmarksPlugin finalizing");
+	GeditBookmarksPlugin *plugin = GEDIT_BOOKMARKS_PLUGIN (object);
 
-	G_OBJECT_CLASS (gedit_bookmarks_plugin_parent_class)->finalize (object);
-}
+	gedit_debug_message (DEBUG_PLUGINS, "GeditBookmarksPlugin disposing");
 
-static void
-free_window_data (WindowData *data)
-{
-	g_slice_free (WindowData, data);
+	if (plugin->priv->action_group != NULL)
+	{
+		g_object_unref (plugin->priv->action_group);
+		plugin->priv->action_group = NULL;
+	}
+
+	G_OBJECT_CLASS (gedit_bookmarks_plugin_parent_class)->dispose (object);
 }
 
 static void
@@ -157,27 +167,29 @@ static gchar const uidefinition[] = ""
 "</ui>";
 
 static void
-install_menu (GeditWindow *window)
+install_menu (GeditBookmarksPlugin *plugin)
 {
+	GeditBookmarksPluginPrivate *priv;
 	GtkUIManager *manager;
-	WindowData *data = BOOKMARKS_DATA (window);
 	GError *error = NULL;
 
-	manager = gedit_window_get_ui_manager (window);
-	data->action_group = gtk_action_group_new ("GeditBookmarksPluginActions");
+	priv = plugin->priv;
 
-	gtk_action_group_set_translation_domain (data->action_group,
+	manager = gedit_window_get_ui_manager (priv->window);
+	priv->action_group = gtk_action_group_new ("GeditBookmarksPluginActions");
+
+	gtk_action_group_set_translation_domain (priv->action_group,
 						 GETTEXT_PACKAGE);
 
-	gtk_action_group_add_actions (data->action_group,
+	gtk_action_group_add_actions (priv->action_group,
 				      action_entries,
 				      G_N_ELEMENTS (action_entries),
-				      window);
+				      plugin);
 
-	gtk_ui_manager_insert_action_group (manager, data->action_group, -1);
-	data->ui_id = gtk_ui_manager_add_ui_from_string (manager, uidefinition, -1, &error);
+	gtk_ui_manager_insert_action_group (manager, priv->action_group, -1);
+	priv->ui_id = gtk_ui_manager_add_ui_from_string (manager, uidefinition, -1, &error);
 
-	if (!data->ui_id)
+	if (!priv->ui_id)
 	{
 		g_warning ("Could not load UI: %s", error->message);
 		g_error_free (error);
@@ -185,17 +197,19 @@ install_menu (GeditWindow *window)
 }
 
 static void
-uninstall_menu (GeditWindow *window)
+uninstall_menu (GeditBookmarksPlugin *plugin)
 {
-	WindowData *data = BOOKMARKS_DATA (window);
+	GeditBookmarksPluginPrivate *priv;
 	GtkUIManager *manager;
 
-	manager = gedit_window_get_ui_manager (window);
+	priv = plugin->priv;
+
+	manager = gedit_window_get_ui_manager (priv->window);
 
-	gtk_ui_manager_remove_ui (manager, data->ui_id);
-	gtk_ui_manager_remove_action_group (manager, data->action_group);
+	gtk_ui_manager_remove_ui (manager, priv->ui_id);
+	gtk_ui_manager_remove_action_group (manager, priv->action_group);
 
-	g_object_unref (data->action_group);
+	g_object_unref (priv->action_group);
 }
 
 static void
@@ -227,13 +241,13 @@ disable_bookmarks (GeditView *view)
 }
 
 static GdkPixbuf *
-get_bookmark_pixbuf (GeditPlugin *plugin)
+get_bookmark_pixbuf (GeditBookmarksPlugin *plugin)
 {
 	gchar *datadir;
 	gchar *iconpath;
 	GdkPixbuf *pixbuf;
 
-	datadir = gedit_plugin_get_data_dir (plugin);
+	datadir = peas_extension_base_get_data_dir (PEAS_EXTENSION_BASE (plugin));
 	iconpath = g_build_filename (datadir, "bookmark.png", NULL);
 	pixbuf = gdk_pixbuf_new_from_file (iconpath, NULL);
 
@@ -244,8 +258,8 @@ get_bookmark_pixbuf (GeditPlugin *plugin)
 }
 
 static void
-enable_bookmarks (GeditView   *view,
-		  GeditPlugin *plugin)
+enable_bookmarks (GeditView            *view,
+		  GeditBookmarksPlugin *plugin)
 {
 	GdkPixbuf *pixbuf;
 
@@ -643,37 +657,35 @@ uninstall_messages (GeditWindow *window)
 }
 
 static void
-impl_activate (GeditPlugin *plugin,
-	       GeditWindow *window)
+gedit_bookmarks_plugin_activate (GeditWindowActivatable *activatable,
+				 GeditWindow            *window)
 {
-	WindowData *data;
+	GeditBookmarksPluginPrivate *priv;
 	GList *views;
 	GList *item;
 
 	gedit_debug (DEBUG_PLUGINS);
 
-	data = g_slice_new (WindowData);
-	g_object_set_data_full (G_OBJECT (window),
-				WINDOW_DATA_KEY,
-				data,
-				(GDestroyNotify) free_window_data);
+	priv = GEDIT_BOOKMARKS_PLUGIN (activatable)->priv;
+	priv->window = window;
 
 	views = gedit_window_get_views (window);
 	for (item = views; item != NULL; item = item->next)
 	{
-		enable_bookmarks (GEDIT_VIEW (item->data), plugin);
+		enable_bookmarks (GEDIT_VIEW (item->data),
+				  GEDIT_BOOKMARKS_PLUGIN (activatable));
 		load_bookmark_metadata (GEDIT_VIEW (item->data));
 	}
 
 	g_list_free (views);
 
 	g_signal_connect (window, "tab-added",
-			  G_CALLBACK (on_tab_added), plugin);
+			  G_CALLBACK (on_tab_added), activatable);
 
 	g_signal_connect (window, "tab-removed",
-			  G_CALLBACK (on_tab_removed), plugin);
+			  G_CALLBACK (on_tab_removed), activatable);
 
-	install_menu (window);
+	install_menu (GEDIT_BOOKMARKS_PLUGIN (activatable));
 	install_messages (window);
 }
 
@@ -726,16 +738,15 @@ save_bookmark_metadata (GeditView *view)
 }
 
 static void
-impl_deactivate	(GeditPlugin *plugin,
-		 GeditWindow *window)
+gedit_bookmarks_plugin_deactivate (GeditWindowActivatable *activatable,
+				   GeditWindow            *window)
 {
-	WindowData *data;
 	GList *views;
 	GList *item;
 
 	gedit_debug (DEBUG_PLUGINS);
 
-	uninstall_menu (window);
+	uninstall_menu (GEDIT_BOOKMARKS_PLUGIN (activatable));
 	uninstall_messages (window);
 
 	views = gedit_window_get_views (window);
@@ -747,25 +758,23 @@ impl_deactivate	(GeditPlugin *plugin,
 
 	g_list_free (views);
 
-	data = BOOKMARKS_DATA (window);
-	g_return_if_fail (data != NULL);
-
-	g_signal_handlers_disconnect_by_func (window, on_tab_added, plugin);
-	g_signal_handlers_disconnect_by_func (window, on_tab_removed, plugin);
-
-	g_object_set_data (G_OBJECT (window), WINDOW_DATA_KEY, NULL);
+	g_signal_handlers_disconnect_by_func (window, on_tab_added, activatable);
+	g_signal_handlers_disconnect_by_func (window, on_tab_removed, activatable);
 }
 
 static void
 gedit_bookmarks_plugin_class_init (GeditBookmarksPluginClass *klass)
 {
 	GObjectClass *object_class = G_OBJECT_CLASS (klass);
-	GeditPluginClass *plugin_class = GEDIT_PLUGIN_CLASS (klass);
 
-	object_class->finalize = gedit_bookmarks_plugin_finalize;
+	object_class->dispose = gedit_bookmarks_plugin_dispose;
 
-	plugin_class->activate = impl_activate;
-	plugin_class->deactivate = impl_deactivate;
+	g_type_class_add_private (klass, sizeof (GeditBookmarksPluginPrivate));
+}
+
+static void
+gedit_bookmarks_plugin_class_finalize (GeditBookmarksPluginClass *klass)
+{
 }
 
 static void
@@ -1033,18 +1042,20 @@ toggle_bookmark (GtkSourceBuffer *buffer,
 }
 
 static void
-on_toggle_bookmark_activate (GtkAction   *action,
-			     GeditWindow *window)
+on_toggle_bookmark_activate (GtkAction            *action,
+			     GeditBookmarksPlugin *plugin)
 {
-	GtkSourceBuffer *buffer = GTK_SOURCE_BUFFER (gedit_window_get_active_document (window));
+	GtkSourceBuffer *buffer;
+
+	buffer = GTK_SOURCE_BUFFER (gedit_window_get_active_document (plugin->priv->window));
 	toggle_bookmark (buffer, NULL);
 }
 
 static void
-on_next_bookmark_activate (GtkAction   *action,
-			   GeditWindow *window)
+on_next_bookmark_activate (GtkAction            *action,
+			   GeditBookmarksPlugin *plugin)
 {
-	goto_bookmark (window,
+	goto_bookmark (plugin->priv->window,
 	               NULL,
 	               NULL,
 	               gtk_source_buffer_forward_iter_to_source_mark,
@@ -1052,10 +1063,10 @@ on_next_bookmark_activate (GtkAction   *action,
 }
 
 static void
-on_previous_bookmark_activate (GtkAction   *action,
-			       GeditWindow *window)
+on_previous_bookmark_activate (GtkAction            *action,
+			       GeditBookmarksPlugin *plugin)
 {
-	goto_bookmark (window,
+	goto_bookmark (plugin->priv->window,
 	               NULL,
 	               NULL,
 	               gtk_source_buffer_backward_iter_to_source_mark,
@@ -1085,9 +1096,9 @@ on_document_saved (GeditDocument *doc,
 }
 
 static void
-on_tab_added (GeditWindow *window,
-	      GeditTab    *tab,
-	      GeditPlugin *plugin)
+on_tab_added (GeditWindow          *window,
+	      GeditTab             *tab,
+	      GeditBookmarksPlugin *plugin)
 {
 	GeditDocument *doc;
 	GeditView *view;
@@ -1106,9 +1117,9 @@ on_tab_added (GeditWindow *window,
 }
 
 static void
-on_tab_removed (GeditWindow *window,
-	        GeditTab    *tab,
-	        GeditPlugin *plugin)
+on_tab_removed (GeditWindow          *window,
+	        GeditTab             *tab,
+	        GeditBookmarksPlugin *plugin)
 {
 	GeditDocument *doc;
 	GeditView *view;
@@ -1121,3 +1132,20 @@ on_tab_removed (GeditWindow *window,
 
 	disable_bookmarks (view);
 }
+
+static void
+gedit_window_activatable_iface_init (GeditWindowActivatableInterface *iface)
+{
+	iface->activate = gedit_bookmarks_plugin_activate;
+	iface->deactivate = gedit_bookmarks_plugin_deactivate;
+}
+
+G_MODULE_EXPORT void
+peas_register_types (PeasObjectModule *module)
+{
+	gedit_bookmarks_plugin_register_type (G_TYPE_MODULE (module));
+
+	peas_object_module_register_extension_type (module,
+						    GEDIT_TYPE_WINDOW_ACTIVATABLE,
+						    GEDIT_TYPE_BOOKMARKS_PLUGIN);
+}
diff --git a/plugins/bookmarks/gedit-bookmarks-plugin.h b/plugins/bookmarks/gedit-bookmarks-plugin.h
index 82b874b..7ec582d 100644
--- a/plugins/bookmarks/gedit-bookmarks-plugin.h
+++ b/plugins/bookmarks/gedit-bookmarks-plugin.h
@@ -24,50 +24,38 @@
 
 #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
 
-/*
- * Type checking and casting macros
- */
-#define GEDIT_TYPE_ADVANCED_EDITING_PLUGIN		(gedit_bookmarks_plugin_get_type ())
-#define GEDIT_BOOKMARKS_PLUGIN(o)			(G_TYPE_CHECK_INSTANCE_CAST ((o), GEDIT_TYPE_ADVANCED_EDITING_PLUGIN, GeditBookmarksPlugin))
-#define GEDIT_BOOKMARKS_PLUGIN_CLASS(k)		(G_TYPE_CHECK_CLASS_CAST((k), GEDIT_TYPE_ADVANCED_EDITING_PLUGIN, GeditBookmarksPluginClass))
-#define GEDIT_IS_ADVANCED_EDITING_PLUGIN(o)		(G_TYPE_CHECK_INSTANCE_TYPE ((o), GEDIT_TYPE_ADVANCED_EDITING_PLUGIN))
-#define GEDIT_IS_ADVANCED_EDITING_PLUGIN_CLASS(k)	(G_TYPE_CHECK_CLASS_TYPE ((k), GEDIT_TYPE_ADVANCED_EDITING_PLUGIN))
-#define GEDIT_BOOKMARKS_PLUGIN_GET_CLASS(o)	(G_TYPE_INSTANCE_GET_CLASS ((o), GEDIT_TYPE_ADVANCED_EDITING_PLUGIN, GeditBookmarksPluginClass))
-
-/* Private structure type */
-typedef struct _GeditBookmarksPluginPrivate	GeditBookmarksPluginPrivate;
+#define GEDIT_TYPE_BOOKMARKS_PLUGIN		(gedit_bookmarks_plugin_get_type ())
+#define GEDIT_BOOKMARKS_PLUGIN(o)		(G_TYPE_CHECK_INSTANCE_CAST ((o), GEDIT_TYPE_BOOKMARKS_PLUGIN, GeditBookmarksPlugin))
+#define GEDIT_BOOKMARKS_PLUGIN_CLASS(k)		(G_TYPE_CHECK_CLASS_CAST((k), GEDIT_TYPE_BOOKMARKS_PLUGIN, GeditBookmarksPluginClass))
+#define GEDIT_IS_BOOKMARKS_PLUGIN(o)		(G_TYPE_CHECK_INSTANCE_TYPE ((o), GEDIT_TYPE_ADVANCED_EDITING_PLUGIN))
+#define GEDIT_IS_BOOKMARKS_PLUGIN_CLASS(k)	(G_TYPE_CHECK_CLASS_TYPE ((k), GEDIT_TYPE_BOOKMARKS_PLUGIN))
+#define GEDIT_BOOKMARKS_PLUGIN_GET_CLASS(o)	(G_TYPE_INSTANCE_GET_CLASS ((o), GEDIT_TYPE_BOOKMARKS_PLUGIN, GeditBookmarksPluginClass))
 
-/*
- * Main object structure
- */
 typedef struct _GeditBookmarksPlugin		GeditBookmarksPlugin;
+typedef struct _GeditBookmarksPluginPrivate	GeditBookmarksPluginPrivate;
+typedef struct _GeditBookmarksPluginClass	GeditBookmarksPluginClass;
 
 struct _GeditBookmarksPlugin
 {
-	GeditPlugin parent_instance;
-};
+	PeasExtensionBase parent_instance;
 
-/*
- * Class definition
- */
-typedef struct _GeditBookmarksPluginClass	GeditBookmarksPluginClass;
+	/*< private >*/
+	GeditBookmarksPluginPrivate *priv;
+};
 
 struct _GeditBookmarksPluginClass
 {
-	GeditPluginClass parent_class;
+	PeasExtensionBaseClass parent_class;
 };
 
-/*
- * Public methods
- */
-GType	gedit_bookmarks_plugin_get_type	(void) G_GNUC_CONST;
+GType			gedit_bookmarks_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
 



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