SF.net SVN: geany:[4244] trunk

ntrel at users.sourceforge.net ntrel at xxxxx
Sun Sep 27 14:07:24 UTC 2009


Revision: 4244
          http://geany.svn.sourceforge.net/geany/?rev=4244&view=rev
Author:   ntrel
Date:     2009-09-27 14:07:24 +0000 (Sun, 27 Sep 2009)

Log Message:
-----------
Add plugin_show_configure() API utility function.
Add File Browser popup menu 'Preferences' item.

Modified Paths:
--------------
    trunk/ChangeLog
    trunk/plugins/filebrowser.c
    trunk/plugins/geanyfunctions.h
    trunk/po/POTFILES.in
    trunk/src/plugindata.h
    trunk/src/pluginprivate.h
    trunk/src/plugins.c
    trunk/src/plugins.h
    trunk/src/pluginutils.c
    trunk/src/pluginutils.h

Modified: trunk/ChangeLog
===================================================================
--- trunk/ChangeLog	2009-09-27 13:41:08 UTC (rev 4243)
+++ trunk/ChangeLog	2009-09-27 14:07:24 UTC (rev 4244)
@@ -15,6 +15,11 @@
    Make the multiple-configure dialog notebook tabs scrollable.
  * src/pluginutils.c, src/pluginutils.h:
    Don't build pluginutils.o if HAVE_PLUGINS is not defined.
+ * src/pluginprivate.h, src/plugindata.h, src/pluginutils.c,
+   src/plugins.c, src/pluginutils.h, src/plugins.h, po/POTFILES.in,
+   plugins/geanyfunctions.h, plugins/filebrowser.c:
+   Add plugin_show_configure() API utility function.
+   Add File Browser popup menu 'Preferences' item.
 
 
 2009-09-24  Enrico Tröger  <enrico(dot)troeger(at)uvena(dot)de>

Modified: trunk/plugins/filebrowser.c
===================================================================
--- trunk/plugins/filebrowser.c	2009-09-27 13:41:08 UTC (rev 4243)
+++ trunk/plugins/filebrowser.c	2009-09-27 14:07:24 UTC (rev 4244)
@@ -546,6 +546,12 @@
 }
 
 
+static void on_show_preferences(void)
+{
+	plugin_show_configure(geany_plugin);
+}
+
+
 static GtkWidget *create_popup_menu(void)
 {
 	GtkWidget *item, *menu;
@@ -583,6 +589,15 @@
 	gtk_widget_show(item);
 	gtk_container_add(GTK_CONTAINER(menu), item);
 
+	item = gtk_image_menu_item_new_from_stock(GTK_STOCK_PREFERENCES, NULL);
+	gtk_widget_show(item);
+	gtk_container_add(GTK_CONTAINER(menu), item);
+	g_signal_connect(item, "activate", G_CALLBACK(on_show_preferences), NULL);
+
+	item = gtk_separator_menu_item_new();
+	gtk_widget_show(item);
+	gtk_container_add(GTK_CONTAINER(menu), item);
+
 	item = ui_image_menu_item_new(GTK_STOCK_CLOSE, _("H_ide Sidebar"));
 	gtk_widget_show(item);
 	gtk_container_add(GTK_CONTAINER(menu), item);

Modified: trunk/plugins/geanyfunctions.h
===================================================================
--- trunk/plugins/geanyfunctions.h	2009-09-27 13:41:08 UTC (rev 4243)
+++ trunk/plugins/geanyfunctions.h	2009-09-27 14:07:24 UTC (rev 4244)
@@ -24,6 +24,8 @@
 	geany_functions->p_plugin->signal_connect
 #define plugin_set_key_group \
 	geany_functions->p_plugin->set_key_group
+#define plugin_show_configure \
+	geany_functions->p_plugin->show_configure
 #define document_new_file \
 	geany_functions->p_document->new_file
 #define document_get_current \

Modified: trunk/po/POTFILES.in
===================================================================
--- trunk/po/POTFILES.in	2009-09-27 13:41:08 UTC (rev 4243)
+++ trunk/po/POTFILES.in	2009-09-27 14:07:24 UTC (rev 4244)
@@ -23,6 +23,7 @@
 src/navqueue.c
 src/notebook.c
 src/plugins.c
+src/pluginutils.c
 src/prefs.c
 src/printing.c
 src/project.c

Modified: trunk/src/plugindata.h
===================================================================
--- trunk/src/plugindata.h	2009-09-27 13:41:08 UTC (rev 4243)
+++ trunk/src/plugindata.h	2009-09-27 14:07:24 UTC (rev 4244)
@@ -50,7 +50,7 @@
 enum {
 	/** The Application Programming Interface (API) version, incremented
 	 * whenever any plugin data types are modified or appended to. */
-	GEANY_API_VERSION = 157,
+	GEANY_API_VERSION = 158,
 
 	/** The Application Binary Interface (ABI) version, incremented whenever
 	 * existing fields in the plugin data types have to be changed or reordered. */
@@ -572,6 +572,7 @@
 		GCallback callback, gpointer user_data);
 	struct GeanyKeyGroup* (*set_key_group)(GeanyPlugin *plugin,
 		const gchar *section_name, gsize count, _GeanyKeyGroupCallback callback);
+	void	(*show_configure)(GeanyPlugin *plugin);
 }
 PluginFuncs;
 

Modified: trunk/src/pluginprivate.h
===================================================================
--- trunk/src/pluginprivate.h	2009-09-27 13:41:08 UTC (rev 4243)
+++ trunk/src/pluginprivate.h	2009-09-27 14:07:24 UTC (rev 4244)
@@ -59,5 +59,7 @@
 }
 GeanyPluginPrivate;
 
+typedef GeanyPluginPrivate Plugin;	/* shorter alias */
 
+
 #endif /* PLUGINPRIVATE_H */

Modified: trunk/src/plugins.c
===================================================================
--- trunk/src/plugins.c	2009-09-27 13:41:08 UTC (rev 4243)
+++ trunk/src/plugins.c	2009-09-27 14:07:24 UTC (rev 4244)
@@ -62,15 +62,15 @@
 #include "pluginutils.h"
 #include "pluginprivate.h"
 
-typedef GeanyPluginPrivate Plugin;	/* shorter alias */
 
+GList *active_plugin_list = NULL; /* list of only actually loaded plugins, always valid */
 
+
 static gboolean want_plugins = FALSE;
 
 /* list of all available, loadable plugins, only valid as long as the plugin manager dialog is
  * opened, afterwards it will be destroyed */
 static GList *plugin_list = NULL;
-static GList *active_plugin_list = NULL; /* list of only actually loaded plugins, always valid */
 static gchar **active_plugins_pref = NULL; 	/* list of plugin filenames to load at startup */
 static GList *failed_plugins_list = NULL;	/* plugins the user wants active but can't be used */
 
@@ -83,7 +83,8 @@
 	&plugin_add_toolbar_item,
 	&plugin_module_make_resident,
 	&plugin_signal_connect,
-	&plugin_set_key_group
+	&plugin_set_key_group,
+	&plugin_show_configure
 };
 
 static DocumentFuncs doc_funcs = {
@@ -1140,97 +1141,6 @@
 }
 
 
-static void on_pref_btn_clicked(gpointer btn, Plugin *p)
-{
-	p->configure_single(main_widgets.window);
-}
-
-
-static GtkWidget *create_pref_page(Plugin *p, GtkWidget *dialog)
-{
-	GtkWidget *page = NULL;	/* some plugins don't have prefs */
-
-	if (p->configure)
-	{
-		page = p->configure(GTK_DIALOG(dialog));
-
-		if (! GTK_IS_WIDGET(page))
-		{
-			geany_debug("Invalid widget returned from plugin_configure() in plugin \"%s\"!",
-				p->info.name);
-			return NULL;
-		}
-		else
-		{
-			GtkWidget *align = gtk_alignment_new(0.5, 0.5, 1, 1);
-
-			gtk_alignment_set_padding(GTK_ALIGNMENT(align), 6, 6, 6, 6);
-			gtk_container_add(GTK_CONTAINER(align), page);
-			page = align;
-		}
-	}
-	else if (p->configure_single)
-	{
-		GtkWidget *align = gtk_alignment_new(0.5, 0.5, 0, 0);
-		GtkWidget *btn;
-
-		gtk_alignment_set_padding(GTK_ALIGNMENT(align), 6, 6, 6, 6);
-
-		btn = gtk_button_new_from_stock(GTK_STOCK_PREFERENCES);
-		g_signal_connect(btn, "clicked", G_CALLBACK(on_pref_btn_clicked), p);
-		gtk_container_add(GTK_CONTAINER(align), btn);
-		page = align;
-	}
-	return page;
-}
-
-
-/* multiple plugin configure dialog */
-static void configure_plugins(Plugin *current_plugin)
-{
-	GtkWidget *parent = pm_widgets.dialog;
-	GtkWidget *dialog, *vbox, *nb;
-	GList *node;
-	gint cur_page = -1;
-
-	dialog = gtk_dialog_new_with_buttons(_("Configure Plugins"),
-		GTK_WINDOW(parent), GTK_DIALOG_DESTROY_WITH_PARENT,
-		GTK_STOCK_APPLY, GTK_RESPONSE_APPLY,
-		GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
-		GTK_STOCK_OK, GTK_RESPONSE_OK, NULL);
-	gtk_widget_set_name(dialog, "GeanyDialog");
-
-	vbox = ui_dialog_vbox_new(GTK_DIALOG(dialog));
-	nb = gtk_notebook_new();
-	gtk_notebook_set_scrollable(GTK_NOTEBOOK(nb), TRUE);
-	gtk_container_add(GTK_CONTAINER(vbox), nb);
-
-	foreach_list(node, active_plugin_list)
-	{
-		Plugin *p = node->data;
-		GtkWidget *page = create_pref_page(p, dialog);
-
-		if (page)
-		{
-			GtkWidget *label = gtk_label_new(p->info.name);
-			gint n = gtk_notebook_append_page(GTK_NOTEBOOK(nb), page, label);
-
-			if (p == current_plugin)
-				cur_page = n;
-		}
-	}
-	if (cur_page >= 0)
-	{
-		gtk_notebook_set_current_page(GTK_NOTEBOOK(nb), cur_page);
-
-		gtk_widget_show_all(vbox);
-		/* run the dialog */
-		while (gtk_dialog_run(GTK_DIALOG(dialog)) == GTK_RESPONSE_APPLY);
-	}
-	gtk_widget_destroy(dialog);
-}
-
-
 static void pm_on_plugin_button_clicked(GtkButton *button, gpointer user_data)
 {
 	GtkTreeModel *model;
@@ -1246,15 +1156,7 @@
 		if (p != NULL)
 		{
 			if (GPOINTER_TO_INT(user_data) == PM_BUTTON_CONFIGURE)
-			{
-				if (p->configure)
-					configure_plugins(p);
-				else
-				{
-					g_return_if_fail(p->configure_single);
-					p->configure_single(main_widgets.window);
-				}
-			}
+				plugin_show_configure(&p->public);
 			else if (GPOINTER_TO_INT(user_data) == PM_BUTTON_HELP && p->help != NULL)
 				p->help();
 		}

Modified: trunk/src/plugins.h
===================================================================
--- trunk/src/plugins.h	2009-09-27 13:41:08 UTC (rev 4243)
+++ trunk/src/plugins.h	2009-09-27 14:07:24 UTC (rev 4244)
@@ -28,6 +28,9 @@
 
 #ifdef HAVE_PLUGINS
 
+extern GList *active_plugin_list;
+
+
 void plugins_init(void);
 
 void plugins_finalize(void);

Modified: trunk/src/pluginutils.c
===================================================================
--- trunk/src/pluginutils.c	2009-09-27 13:41:08 UTC (rev 4243)
+++ trunk/src/pluginutils.c	2009-09-27 14:07:24 UTC (rev 4244)
@@ -36,6 +36,8 @@
 #include "ui_utils.h"
 #include "toolbar.h"
 #include "utils.h"
+#include "support.h"
+#include "plugins.h"
 
 
 /** Insert a toolbar item before the Quit button, or after the previous plugin toolbar item.
@@ -140,7 +142,7 @@
 GeanyKeyGroup *plugin_set_key_group(GeanyPlugin *plugin,
 		const gchar *section_name, gsize count, GeanyKeyGroupCallback callback)
 {
-	GeanyPluginPrivate *priv = plugin->priv;
+	Plugin *priv = plugin->priv;
 
 	priv->key_group = keybindings_set_group(priv->key_group, section_name,
 		priv->info.name, count, callback);
@@ -148,4 +150,112 @@
 }
 
 
+static void on_pref_btn_clicked(gpointer btn, Plugin *p)
+{
+	p->configure_single(main_widgets.window);
+}
+
+
+static GtkWidget *create_pref_page(Plugin *p, GtkWidget *dialog)
+{
+	GtkWidget *page = NULL;	/* some plugins don't have prefs */
+
+	if (p->configure)
+	{
+		page = p->configure(GTK_DIALOG(dialog));
+
+		if (! GTK_IS_WIDGET(page))
+		{
+			geany_debug("Invalid widget returned from plugin_configure() in plugin \"%s\"!",
+				p->info.name);
+			return NULL;
+		}
+		else
+		{
+			GtkWidget *align = gtk_alignment_new(0.5, 0.5, 1, 1);
+
+			gtk_alignment_set_padding(GTK_ALIGNMENT(align), 6, 6, 6, 6);
+			gtk_container_add(GTK_CONTAINER(align), page);
+			page = align;
+		}
+	}
+	else if (p->configure_single)
+	{
+		GtkWidget *align = gtk_alignment_new(0.5, 0.5, 0, 0);
+		GtkWidget *btn;
+
+		gtk_alignment_set_padding(GTK_ALIGNMENT(align), 6, 6, 6, 6);
+
+		btn = gtk_button_new_from_stock(GTK_STOCK_PREFERENCES);
+		g_signal_connect(btn, "clicked", G_CALLBACK(on_pref_btn_clicked), p);
+		gtk_container_add(GTK_CONTAINER(align), btn);
+		page = align;
+	}
+	return page;
+}
+
+
+/* multiple plugin configure dialog */
+static void configure_plugins(Plugin *current_plugin)
+{
+	GtkWidget *dialog, *vbox, *nb;
+	GList *node;
+	gint cur_page = -1;
+
+	dialog = gtk_dialog_new_with_buttons(_("Configure Plugins"),
+		GTK_WINDOW(main_widgets.window), GTK_DIALOG_DESTROY_WITH_PARENT,
+		GTK_STOCK_APPLY, GTK_RESPONSE_APPLY,
+		GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
+		GTK_STOCK_OK, GTK_RESPONSE_OK, NULL);
+	gtk_widget_set_name(dialog, "GeanyDialog");
+
+	vbox = ui_dialog_vbox_new(GTK_DIALOG(dialog));
+	nb = gtk_notebook_new();
+	gtk_notebook_set_scrollable(GTK_NOTEBOOK(nb), TRUE);
+	gtk_container_add(GTK_CONTAINER(vbox), nb);
+
+	foreach_list(node, active_plugin_list)
+	{
+		Plugin *p = node->data;
+		GtkWidget *page = create_pref_page(p, dialog);
+
+		if (page)
+		{
+			GtkWidget *label = gtk_label_new(p->info.name);
+			gint n = gtk_notebook_append_page(GTK_NOTEBOOK(nb), page, label);
+
+			if (p == current_plugin)
+				cur_page = n;
+		}
+	}
+	if (cur_page >= 0)
+	{
+		gtk_notebook_set_current_page(GTK_NOTEBOOK(nb), cur_page);
+
+		gtk_widget_show_all(vbox);
+		/* run the dialog */
+		while (gtk_dialog_run(GTK_DIALOG(dialog)) == GTK_RESPONSE_APPLY);
+	}
+	gtk_widget_destroy(dialog);
+}
+
+
+/** Show the plugin's configure dialog.
+ * The plugin must implement one of the plugin_configure() or plugin_configure_single() symbols.
+ * @param plugin Must be @ref geany_plugin.
+ * @since 0.19. */
+void plugin_show_configure(GeanyPlugin *plugin)
+{
+	Plugin *p = plugin->priv;
+
+	if (p->configure)
+		configure_plugins(p);
+	else
+	{
+		g_return_if_fail(p->configure_single);
+		p->configure_single(main_widgets.window);
+	}
+}
+
+
 #endif

Modified: trunk/src/pluginutils.h
===================================================================
--- trunk/src/pluginutils.h	2009-09-27 13:41:08 UTC (rev 4243)
+++ trunk/src/pluginutils.h	2009-09-27 14:07:24 UTC (rev 4244)
@@ -43,5 +43,7 @@
 struct GeanyKeyGroup *plugin_set_key_group(GeanyPlugin *plugin,
 		const gchar *section_name, gsize count, GeanyKeyGroupCallback callback);
 
+void plugin_show_configure(GeanyPlugin *plugin);
+
 #endif /* HAVE_PLUGINS */
 #endif /* PLUGINUTILS_H */


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