SF.net SVN: geany:[3559] trunk

eht16 at users.sourceforge.net eht16 at xxxxx
Fri Feb 6 19:05:12 UTC 2009


Revision: 3559
          http://geany.svn.sourceforge.net/geany/?rev=3559&view=rev
Author:   eht16
Date:     2009-02-06 19:05:12 +0000 (Fri, 06 Feb 2009)

Log Message:
-----------
Add plugin_module_make_resident() to the plugin API which allows plugins to make the module resident. This seems necessary when using GTypes, e.g. by using the GObject API.

Modified Paths:
--------------
    trunk/ChangeLog
    trunk/plugins/geanyfunctions.h
    trunk/src/plugindata.h
    trunk/src/plugins.c

Modified: trunk/ChangeLog
===================================================================
--- trunk/ChangeLog	2009-02-06 15:52:04 UTC (rev 3558)
+++ trunk/ChangeLog	2009-02-06 19:05:12 UTC (rev 3559)
@@ -2,6 +2,10 @@
 
  * src/main.c:
    Don't check for old configuration directory location on Windows.
+ * plugins/geanyfunctions.h, src/plugindata.h, src/plugins.c:
+   Add plugin_module_make_resident() to the plugin API which allows
+   plugins to make the module resident. This seems necessary when
+   using GTypes, e.g. by using the GObject API.
 
 
 2009-02-05  Enrico Tröger  <enrico(dot)troeger(at)uvena(dot)de>

Modified: trunk/plugins/geanyfunctions.h
===================================================================
--- trunk/plugins/geanyfunctions.h	2009-02-06 15:52:04 UTC (rev 3558)
+++ trunk/plugins/geanyfunctions.h	2009-02-06 19:05:12 UTC (rev 3559)
@@ -10,6 +10,8 @@
 
 #define plugin_add_toolbar_item \
 	geany_functions->p_plugin->add_toolbar_item
+#define plugin_module_make_resident \
+	geany_functions->p_plugin->module_make_resident
 #define document_new_file \
 	geany_functions->p_document->new_file
 #define document_get_current \

Modified: trunk/src/plugindata.h
===================================================================
--- trunk/src/plugindata.h	2009-02-06 15:52:04 UTC (rev 3558)
+++ trunk/src/plugindata.h	2009-02-06 19:05:12 UTC (rev 3559)
@@ -45,7 +45,7 @@
 enum {
 	/** The Application Programming Interface (API) version, incremented
 	 * whenever any plugin data types are modified or appended to. */
-	GEANY_API_VERSION = 131,
+	GEANY_API_VERSION = 132,
 
 	/** The Application Binary Interface (ABI) version, incremented whenever
 	 * existing fields in the plugin data types have to be changed or reordered. */
@@ -283,7 +283,7 @@
 	void	(*end_undo_action) (struct _ScintillaObject* sci);
 	void	(*set_text) (struct _ScintillaObject *sci, const gchar *text);
 	void	(*insert_text) (struct _ScintillaObject *sci, gint pos, const gchar *text);
-	void	(*get_text) (struct _ScintillaObject *sci, gint len, gchar* text);
+	void	(*get_text) (struct _ScintillaObject *sci, gint len, gchar *text);
 	gint	(*get_length) (struct _ScintillaObject *sci);
 	gint	(*get_current_position) (struct _ScintillaObject *sci);
 	void	(*set_current_position) (struct _ScintillaObject* sci, gint position,
@@ -291,8 +291,8 @@
 	gint	(*get_col_from_position) (struct _ScintillaObject* sci, gint position);
 	gint	(*get_line_from_position) (struct _ScintillaObject* sci, gint position);
 	gint	(*get_position_from_line) (struct _ScintillaObject* sci, gint line);
-	void	(*replace_sel) (struct _ScintillaObject* sci, const gchar* text);
-	void	(*get_selected_text) (struct _ScintillaObject* sci, gchar* text);
+	void	(*replace_sel) (struct _ScintillaObject* sci, const gchar *text);
+	void	(*get_selected_text) (struct _ScintillaObject* sci, gchar *text);
 	gint	(*get_selected_text_length) (struct _ScintillaObject* sci);
 	gint	(*get_selection_start) (struct _ScintillaObject* sci);
 	gint	(*get_selection_end) (struct _ScintillaObject* sci);
@@ -300,7 +300,7 @@
 	void	(*set_selection_mode) (struct _ScintillaObject* sci, gint mode);
 	void	(*set_selection_start) (struct _ScintillaObject* sci, gint position);
 	void	(*set_selection_end) (struct _ScintillaObject* sci, gint position);
-	void	(*get_text_range) (struct _ScintillaObject* sci, gint start, gint end, gchar*text);
+	void	(*get_text_range) (struct _ScintillaObject* sci, gint start, gint end, gchar *text);
 	gchar*	(*get_line) (struct _ScintillaObject* sci, gint line_num);
 	gint	(*get_line_length) (struct _ScintillaObject* sci, gint line);
 	gint	(*get_line_count) (struct _ScintillaObject* sci);
@@ -529,6 +529,7 @@
 typedef struct PluginFuncs
 {
 	void	(*add_toolbar_item)(GeanyPlugin *plugin, GtkToolItem *item);
+	void	(*module_make_resident) (GeanyPlugin *plugin);
 }
 PluginFuncs;
 

Modified: trunk/src/plugins.c
===================================================================
--- trunk/src/plugins.c	2009-02-06 15:52:04 UTC (rev 3558)
+++ trunk/src/plugins.c	2009-02-06 19:05:12 UTC (rev 3559)
@@ -72,6 +72,7 @@
 typedef struct GeanyPluginPrivate
 {
 	GeanyAutoSeparator	toolbar_separator;
+	gboolean			resident;
 }
 GeanyPluginPrivate;
 
@@ -111,10 +112,12 @@
 static void pm_show_dialog(GtkMenuItem *menuitem, gpointer user_data);
 
 void plugin_add_toolbar_item(GeanyPlugin *plugin, GtkToolItem *item);
+void plugin_module_make_resident(GeanyPlugin *plugin);
 
 
 static PluginFuncs plugin_funcs = {
-	&plugin_add_toolbar_item
+	&plugin_add_toolbar_item,
+	&plugin_module_make_resident
 };
 
 static DocumentFuncs doc_funcs = {
@@ -537,6 +540,9 @@
 	g_return_if_fail(plugin->init);
 	plugin->init(&geany_data);
 
+	if (p_geany_plugin && (*p_geany_plugin)->priv->resident)
+		g_module_make_resident(plugin->module);
+
 	/* store some function pointers for later use */
 	g_module_symbol(plugin->module, "plugin_configure", (void *) &plugin->configure);
 	g_module_symbol(plugin->module, "plugin_help", (void *) &plugin->help);
@@ -1321,4 +1327,17 @@
 }
 
 
+/** Ensures that a plugin's module (*.so) will never be unloaded.
+ *  This is necessary if you register new GTypes in your plugin, e.g. when using own classes
+ *  using the GObject system.
+ *
+ * @param plugin Must be @ref geany_plugin. */
+void plugin_module_make_resident(GeanyPlugin *plugin)
+{
+	g_return_if_fail(plugin);
+
+	plugin->priv->resident = TRUE;
+}
+
+
 #endif


This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.



More information about the Commits mailing list