[gedit/wip/configurable] prefs-dialog: handle configurable extensions.
- From: Ignacio Casal Quinteiro <icq src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gedit/wip/configurable] prefs-dialog: handle configurable extensions.
- Date: Sat, 27 Apr 2013 13:52:41 +0000 (UTC)
commit d933fbd9bbfef4f6be8e0d970a06ee664e7bbb2f
Author: Ignacio Casal Quinteiro <icq gnome org>
Date: Sat Apr 27 15:52:22 2013 +0200
prefs-dialog: handle configurable extensions.
gedit/gedit-preferences-dialog.c | 99 ++++++++++++++++++++++++++++++++++++++
1 files changed, 99 insertions(+), 0 deletions(-)
---
diff --git a/gedit/gedit-preferences-dialog.c b/gedit/gedit-preferences-dialog.c
index b2a6da0..ef096ca 100644
--- a/gedit/gedit-preferences-dialog.c
+++ b/gedit/gedit-preferences-dialog.c
@@ -40,6 +40,7 @@
#include <glib/gi18n.h>
#include <glib/gstdio.h>
#include <libpeas-gtk/peas-gtk-plugin-manager.h>
+#include <libpeas/peas-extension-set.h>
#include <gtksourceview/gtksource.h>
#include "gedit-preferences-dialog.h"
@@ -49,6 +50,8 @@
#include "gedit-dirs.h"
#include "gedit-settings.h"
#include "gedit-utils.h"
+#include "gedit-plugins-engine.h"
+#include "gedit-configurable.h"
/*
* gedit-preferences dialog is a singleton since we don't
@@ -75,10 +78,19 @@ enum
GEDIT_TYPE_PREFERENCES_DIALOG, \
GeditPreferencesDialogPrivate))
+typedef struct
+{
+ GtkWidget *grid;
+ GList *widgets;
+} Page;
+
struct _GeditPreferencesDialogPrivate
{
GSettings *editor;
+ PeasExtensionSet *extensions;
+ GHashTable *pages_table;
+
GtkWidget *notebook;
/* Font */
@@ -139,6 +151,12 @@ gedit_preferences_dialog_dispose (GObject *object)
g_clear_object (&dlg->priv->editor);
+ if (dlg->priv->pages_table != NULL)
+ {
+ g_hash_table_unref (dlg->priv->pages_table);
+ dlg->priv->pages_table = NULL;
+ }
+
G_OBJECT_CLASS (gedit_preferences_dialog_parent_class)->dispose (object);
}
@@ -1135,12 +1153,77 @@ setup_plugins_page (GeditPreferencesDialog *dlg)
}
static void
+extension_added (PeasExtensionSet *extensions,
+ PeasPluginInfo *info,
+ PeasExtension *exten,
+ GeditPreferencesDialog *dlg)
+{
+ GeditPreferencesDialogPrivate *priv = dlg->priv;
+ const gchar *page_id;
+ GtkWidget *label;
+ GtkWidget *widget;
+ const gchar *page_name;
+ gint n_pages;
+
+ page_id = gedit_configurable_get_page_id (GEDIT_CONFIGURABLE (exten));
+ widget = GTK_WIDGET (g_hash_table_lookup (priv->pages_table, page_id));
+ if (widget != NULL)
+ {
+ g_warning ("Cannot add more than one widget per page");
+ return;
+ }
+
+ page_name = gedit_configurable_get_page_name (GEDIT_CONFIGURABLE (exten));
+ label = gtk_label_new (page_name);
+
+ n_pages = gtk_notebook_get_n_pages (GTK_NOTEBOOK (priv->notebook));
+
+ widget = gedit_configurable_create_configure_widget (GEDIT_CONFIGURABLE (exten));
+
+ // lave the plugins page at the end
+ gtk_notebook_insert_page (GTK_NOTEBOOK (priv->notebook),
+ widget,
+ label,
+ n_pages - 1);
+
+ g_hash_table_insert (priv->pages_table, g_strdup (page_id), widget);
+}
+
+static void
+extension_removed (PeasExtensionSet *extensions,
+ PeasPluginInfo *info,
+ PeasExtension *exten,
+ GeditPreferencesDialog *dlg)
+{
+ GeditPreferencesDialogPrivate *priv = dlg->priv;
+ const gchar *page_id;
+ gint page_num;
+ GtkWidget *widget;
+
+ page_id = gedit_configurable_get_page_id (GEDIT_CONFIGURABLE (exten));
+ widget = GTK_WIDGET (g_hash_table_lookup (priv->pages_table, page_id));
+ if (widget == NULL)
+ {
+ g_warning ("No widget for page: %s", page_id);
+ return;
+ }
+
+ page_num = gtk_notebook_page_num (GTK_NOTEBOOK (priv->notebook), widget);
+ gtk_notebook_remove_page (GTK_NOTEBOOK (priv->notebook), page_num);
+ g_hash_table_remove (priv->pages_table, page_id);
+}
+
+static void
gedit_preferences_dialog_init (GeditPreferencesDialog *dlg)
{
gedit_debug (DEBUG_PREFS);
dlg->priv = GEDIT_PREFERENCES_DIALOG_GET_PRIVATE (dlg);
dlg->priv->editor = g_settings_new ("org.gnome.gedit.preferences.editor");
+ dlg->priv->pages_table = g_hash_table_new_full (g_str_hash,
+ g_direct_equal,
+ g_free,
+ NULL);
gtk_widget_init_template (GTK_WIDGET (dlg));
@@ -1148,6 +1231,22 @@ gedit_preferences_dialog_init (GeditPreferencesDialog *dlg)
setup_view_page (dlg);
setup_font_colors_page (dlg);
setup_plugins_page (dlg);
+
+ dlg->priv->extensions = peas_extension_set_new (PEAS_ENGINE (gedit_plugins_engine_get_default ()),
+ GEDIT_TYPE_CONFIGURABLE,
+ NULL);
+
+ g_signal_connect (dlg->priv->extensions,
+ "extension-added",
+ G_CALLBACK (extension_added),
+ dlg);
+ g_signal_connect (dlg->priv->extensions,
+ "extension-removed",
+ G_CALLBACK (extension_removed),
+ dlg);
+ peas_extension_set_foreach (dlg->priv->extensions,
+ (PeasExtensionSetForeachFunc)extension_added,
+ dlg);
}
void
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]