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