Show multiple plugins in the 'Configure Plugins' dialog.

git-svn-id: https://geany.svn.sourceforge.net/svnroot/geany/trunk@4234 ea778897-0a13-0410-b9d1-a72fbfd435f5
This commit is contained in:
Nick Treleaven 2009-09-24 16:54:08 +00:00
parent 20a5fb25f6
commit 83f0cdbec0
2 changed files with 33 additions and 11 deletions

View File

@ -10,6 +10,8 @@
Add plugin_configure_single() plugin symbol which is easier to
implement than plugin_configure() but won't support a
multiple-plugin configure dialog.
* src/plugins.c:
Show multiple plugins in the 'Configure Plugins' dialog.
2009-09-22 Nick Treleaven <nick(dot)treleaven(at)btinternet(dot)com>

View File

@ -1140,12 +1140,14 @@ static void pm_prepare_treeview(GtkWidget *tree, GtkListStore *store)
}
static void configure_plugins(Plugin *p)
static void configure_plugins(Plugin *current_plugin)
{
GtkWidget *parent = pm_widgets.dialog;
GtkWidget *prefs_page, *dialog, *vbox;
GtkWidget *dialog, *vbox, *nb;
GList *node;
gint cur_page = -1;
dialog = gtk_dialog_new_with_buttons(p->info.name,
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,
@ -1153,19 +1155,37 @@ static void configure_plugins(Plugin *p)
gtk_widget_set_name(dialog, "GeanyDialog");
vbox = ui_dialog_vbox_new(GTK_DIALOG(dialog));
gtk_widget_show(vbox);
nb = gtk_notebook_new();
gtk_container_add(GTK_CONTAINER(vbox), nb);
prefs_page = p->configure(GTK_DIALOG(dialog));
if (! GTK_IS_WIDGET(prefs_page))
foreach_list(node, active_plugin_list)
{
geany_debug("Invalid widget returned from plugin_configure() in plugin \"%s\"!",
p->info.name);
Plugin *p = node->data;
GtkWidget *page;
if (!p->configure)
continue;
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);
}
else
{
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;
}
}
else
if (cur_page >= 0)
{
gtk_container_add(GTK_CONTAINER(vbox), prefs_page);
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);
}