[gedit-plugins] word completion: add configure options
- From: Sébastien Wilmet <swilmet src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gedit-plugins] word completion: add configure options
- Date: Mon, 10 Jun 2013 17:25:16 +0000 (UTC)
commit b3568715fa5e3a000bd6414032a1fe4a4a91d269
Author: Sébastien Wilmet <swilmet gnome org>
Date: Sun Jun 9 20:29:02 2013 +0200
word completion: add configure options
- minimum word size
- whether to enable interactive completion
GtkSourceView >= 3.9.2 required.
https://bugzilla.gnome.org/show_bug.cgi?id=614103
configure.ac | 3 +-
plugins/wordcompletion/Makefile.am | 20 +++-
.../gedit-word-completion-configure.ui | 75 +++++++++++
.../wordcompletion/gedit-word-completion-plugin.c | 131 ++++++++++++++++++-
.../wordcompletion/gedit-word-completion-plugin.h | 1 -
.../gedit-word-completion.gresource.xml | 6 +
....gedit.plugins.wordcompletion.gschema.xml.in.in | 15 +++
po/POTFILES.in | 2 +
po/POTFILES.skip | 1 +
9 files changed, 243 insertions(+), 11 deletions(-)
---
diff --git a/configure.ac b/configure.ac
index f01df1c..02727e0 100644
--- a/configure.ac
+++ b/configure.ac
@@ -67,7 +67,7 @@ PKG_CHECK_MODULES(GEDIT, [
glib-2.0 >= 2.32.0
gio-2.0 >= 2.32.0
gtk+-3.0 >= 3.4.0
- gtksourceview-3.0 >= 3.0.0
+ gtksourceview-3.0 >= 3.9.2
libpeas-1.0 >= 1.7.0
libpeas-gtk-1.0 >= 1.7.0
gedit >= 3.7.1
@@ -386,6 +386,7 @@ plugins/textsize/Makefile
plugins/textsize/textsize.plugin.desktop.in
plugins/textsize/textsize/Makefile
plugins/wordcompletion/Makefile
+plugins/wordcompletion/org.gnome.gedit.plugins.wordcompletion.gschema.xml.in
plugins/wordcompletion/wordcompletion.plugin.desktop.in
po/Makefile.in])
diff --git a/plugins/wordcompletion/Makefile.am b/plugins/wordcompletion/Makefile.am
index 5b769b5..fe70fd5 100644
--- a/plugins/wordcompletion/Makefile.am
+++ b/plugins/wordcompletion/Makefile.am
@@ -9,13 +9,20 @@ INCLUDES = \
plugin_LTLIBRARIES = libwordcompletion.la
+BUILT_SOURCES = \
+ gedit-word-completion-resources.c
+
libwordcompletion_la_SOURCES = \
gedit-word-completion-plugin.h \
- gedit-word-completion-plugin.c
+ gedit-word-completion-plugin.c \
+ $(BUILT_SOURCES)
libwordcompletion_la_LDFLAGS = $(PLUGIN_LIBTOOL_FLAGS)
libwordcompletion_la_LIBADD = $(GEDIT_LIBS)
+gedit-word-completion-resources.c: gedit-word-completion.gresource.xml $(shell $(GLIB_COMPILE_RESOURCES)
--sourcedir=$(srcdir) --generate-dependencies $(srcdir)/gedit-word-completion.gresource.xml)
+ $(AM_V_GEN) $(GLIB_COMPILE_RESOURCES) --target=$@ --sourcedir=$(srcdir) --generate-source
$(srcdir)/gedit-word-completion.gresource.xml
+
# Plugin Info
plugin_in_files = wordcompletion.plugin.desktop.in
@@ -24,7 +31,16 @@ plugin_in_files = wordcompletion.plugin.desktop.in
plugin_DATA = $(plugin_in_files:.plugin.desktop.in=.plugin)
-EXTRA_DIST = $(plugin_in_files)
+gsettings_SCHEMAS = org.gnome.gedit.plugins.wordcompletion.gschema.xml
+
+ INTLTOOL_XML_NOMERGE_RULE@
+ GSETTINGS_RULES@
+
+EXTRA_DIST = \
+ $(plugin_in_files) \
+ org.gnome.gedit.plugins.wordcompletion.gschema.xml.in.in \
+ gedit-word-completion.gresource.xml \
+ gedit-word-completion-configure.ui
CLEANFILES = $(plugin_DATA)
DISTCLEANFILES = $(plugin_DATA)
diff --git a/plugins/wordcompletion/gedit-word-completion-configure.ui
b/plugins/wordcompletion/gedit-word-completion-configure.ui
new file mode 100644
index 0000000..dac2b57
--- /dev/null
+++ b/plugins/wordcompletion/gedit-word-completion-configure.ui
@@ -0,0 +1,75 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<interface>
+ <!-- interface-requires gtk+ 3.0 -->
+ <object class="GtkAdjustment" id="adjustment1">
+ <property name="lower">2</property>
+ <property name="upper">100</property>
+ <property name="value">2</property>
+ <property name="step_increment">1</property>
+ <property name="page_increment">10</property>
+ </object>
+ <object class="GtkGrid" id="content">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="border_width">6</property>
+ <property name="row_spacing">3</property>
+ <child>
+ <object class="GtkCheckButton" id="check_button_interactive_completion">
+ <property name="label" translatable="yes">Interactive completion</property>
+ <property name="use_action_appearance">False</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">False</property>
+ <property name="xalign">0</property>
+ <property name="draw_indicator">True</property>
+ </object>
+ <packing>
+ <property name="left_attach">0</property>
+ <property name="top_attach">0</property>
+ <property name="width">1</property>
+ <property name="height">1</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkGrid" id="grid2">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="column_spacing">10</property>
+ <child>
+ <object class="GtkLabel" id="label1">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="xalign">0</property>
+ <property name="label" translatable="yes">Minimum word size:</property>
+ </object>
+ <packing>
+ <property name="left_attach">0</property>
+ <property name="top_attach">0</property>
+ <property name="width">1</property>
+ <property name="height">1</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkSpinButton" id="spin_button_min_word_size">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="invisible_char">●</property>
+ <property name="adjustment">adjustment1</property>
+ </object>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="top_attach">0</property>
+ <property name="width">1</property>
+ <property name="height">1</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="left_attach">0</property>
+ <property name="top_attach">1</property>
+ <property name="width">1</property>
+ <property name="height">1</property>
+ </packing>
+ </child>
+ </object>
+</interface>
diff --git a/plugins/wordcompletion/gedit-word-completion-plugin.c
b/plugins/wordcompletion/gedit-word-completion-plugin.c
index dee7582..6466723 100644
--- a/plugins/wordcompletion/gedit-word-completion-plugin.c
+++ b/plugins/wordcompletion/gedit-word-completion-plugin.c
@@ -1,6 +1,7 @@
/*
* Copyright (C) 2009 Ignacio Casal Quinteiro <icq gnome org>
* 2009 Jesse van den Kieboom <jesse gnome org>
+ * 2013 Sébastien Wilmet <swilmet gnome org>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -29,13 +30,19 @@
#include <gedit/gedit-window-activatable.h>
#include <gedit/gedit-view.h>
#include <gedit/gedit-view-activatable.h>
-#include <gtksourceview/gtksourcecompletionprovider.h>
+#include <libpeas-gtk/peas-gtk-configurable.h>
+#include <gtksourceview/gtksource.h>
#include <gtksourceview/completion-providers/words/gtksourcecompletionwords.h>
#define WINDOW_PROVIDER "GeditWordCompletionPluginProvider"
+#define WORD_COMPLETION_SETTINGS_BASE "org.gnome.gedit.plugins.wordcompletion"
+#define SETTINGS_KEY_INTERACTIVE_COMPLETION "interactive-completion"
+#define SETTINGS_KEY_MINIMUM_WORD_SIZE "minimum-word-size"
+
static void gedit_window_activatable_iface_init (GeditWindowActivatableInterface *iface);
static void gedit_view_activatable_iface_init (GeditViewActivatableInterface *iface);
+static void peas_gtk_configurable_iface_init (PeasGtkConfigurableInterface *iface);
G_DEFINE_DYNAMIC_TYPE_EXTENDED (GeditWordCompletionPlugin,
gedit_word_completion_plugin,
@@ -44,7 +51,9 @@ G_DEFINE_DYNAMIC_TYPE_EXTENDED (GeditWordCompletionPlugin,
G_IMPLEMENT_INTERFACE_DYNAMIC (GEDIT_TYPE_WINDOW_ACTIVATABLE,
gedit_window_activatable_iface_init)
G_IMPLEMENT_INTERFACE_DYNAMIC (GEDIT_TYPE_VIEW_ACTIVATABLE,
- gedit_view_activatable_iface_init))
+ gedit_view_activatable_iface_init)
+ G_IMPLEMENT_INTERFACE_DYNAMIC (PEAS_GTK_TYPE_CONFIGURABLE,
+ peas_gtk_configurable_iface_init))
struct _GeditWordCompletionPluginPrivate
{
@@ -141,6 +150,61 @@ gedit_word_completion_plugin_get_property (GObject *object,
}
static void
+update_activation (GtkSourceCompletionWords *provider,
+ GSettings *settings)
+{
+ GtkSourceCompletionActivation activation;
+
+ g_object_get (provider, "activation", &activation, NULL);
+
+ if (g_settings_get_boolean (settings, SETTINGS_KEY_INTERACTIVE_COMPLETION))
+ {
+ activation |= GTK_SOURCE_COMPLETION_ACTIVATION_INTERACTIVE;
+ }
+ else
+ {
+ activation &= ~GTK_SOURCE_COMPLETION_ACTIVATION_INTERACTIVE;
+ }
+
+ g_object_set (provider, "activation", activation, NULL);
+}
+
+static void
+on_interactive_completion_changed_cb (GSettings *settings,
+ gchar *key,
+ GtkSourceCompletionWords *provider)
+{
+ update_activation (provider, settings);
+}
+
+static GtkSourceCompletionWords *
+create_provider (void)
+{
+ GtkSourceCompletionWords *provider;
+ GSettings *settings;
+
+ provider = gtk_source_completion_words_new (_("Document Words"), NULL);
+
+ settings = g_settings_new (WORD_COMPLETION_SETTINGS_BASE);
+
+ g_settings_bind (settings, SETTINGS_KEY_MINIMUM_WORD_SIZE,
+ provider, "minimum-word-size",
+ G_SETTINGS_BIND_GET);
+
+ update_activation (provider, settings);
+
+ g_signal_connect_object (settings,
+ "changed::" SETTINGS_KEY_INTERACTIVE_COMPLETION,
+ G_CALLBACK (on_interactive_completion_changed_cb),
+ provider,
+ 0);
+
+ g_object_unref (settings);
+
+ return provider;
+}
+
+static void
gedit_word_completion_window_activate (GeditWindowActivatable *activatable)
{
GeditWordCompletionPluginPrivate *priv;
@@ -150,8 +214,7 @@ gedit_word_completion_window_activate (GeditWindowActivatable *activatable)
priv = GEDIT_WORD_COMPLETION_PLUGIN (activatable)->priv;
- provider = gtk_source_completion_words_new (_("Document Words"),
- NULL);
+ provider = create_provider ();
g_object_set_data_full (G_OBJECT (priv->window),
WINDOW_PROVIDER,
@@ -196,9 +259,7 @@ gedit_word_completion_view_activate (GeditViewActivatable *activatable)
if (provider == NULL)
{
/* Standalone provider */
- provider = GTK_SOURCE_COMPLETION_PROVIDER (
- gtk_source_completion_words_new (_("Document Words"),
- NULL));
+ provider = GTK_SOURCE_COMPLETION_PROVIDER (create_provider ());
}
priv->provider = g_object_ref (provider);
@@ -231,6 +292,52 @@ gedit_word_completion_view_deactivate (GeditViewActivatable *activatable)
buf);
}
+static GtkWidget *
+gedit_word_completion_create_configure_widget (PeasGtkConfigurable *configurable)
+{
+ GtkBuilder *builder;
+ GtkWidget *content;
+ GtkWidget *interactive_completion;
+ GtkWidget *min_word_size;
+ GSettings *settings;
+ GError *error = NULL;
+
+ builder = gtk_builder_new ();
+ gtk_builder_set_translation_domain (builder, GETTEXT_PACKAGE);
+ gtk_builder_add_from_resource (builder,
+
"/org/gnome/gedit/plugins/wordcompletion/ui/gedit-word-completion-configure.ui",
+ &error);
+
+ if (error != NULL)
+ {
+ g_warning ("Word Completion configuration widget: %s", error->message);
+ g_error_free (error);
+ error = NULL;
+ }
+
+ content = GTK_WIDGET (gtk_builder_get_object (builder, "content"));
+ g_object_ref (content);
+
+ interactive_completion = GTK_WIDGET (gtk_builder_get_object (builder,
"check_button_interactive_completion"));
+ min_word_size = GTK_WIDGET (gtk_builder_get_object (builder, "spin_button_min_word_size"));
+
+ g_object_unref (builder);
+
+ settings = g_settings_new (WORD_COMPLETION_SETTINGS_BASE);
+
+ g_settings_bind (settings, SETTINGS_KEY_INTERACTIVE_COMPLETION,
+ interactive_completion, "active",
+ G_SETTINGS_BIND_DEFAULT | G_SETTINGS_BIND_GET_NO_CHANGES);
+
+ g_settings_bind (settings, SETTINGS_KEY_MINIMUM_WORD_SIZE,
+ min_word_size, "value",
+ G_SETTINGS_BIND_DEFAULT | G_SETTINGS_BIND_GET_NO_CHANGES);
+
+ g_object_unref (settings);
+
+ return content;
+}
+
static void
gedit_word_completion_plugin_class_init (GeditWordCompletionPluginClass *klass)
{
@@ -265,6 +372,12 @@ gedit_view_activatable_iface_init (GeditViewActivatableInterface *iface)
iface->deactivate = gedit_word_completion_view_deactivate;
}
+static void
+peas_gtk_configurable_iface_init (PeasGtkConfigurableInterface *iface)
+{
+ iface->create_configure_widget = gedit_word_completion_create_configure_widget;
+}
+
G_MODULE_EXPORT void
peas_register_types (PeasObjectModule *module)
{
@@ -277,4 +390,8 @@ peas_register_types (PeasObjectModule *module)
peas_object_module_register_extension_type (module,
GEDIT_TYPE_VIEW_ACTIVATABLE,
GEDIT_TYPE_WORD_COMPLETION_PLUGIN);
+
+ peas_object_module_register_extension_type (module,
+ PEAS_GTK_TYPE_CONFIGURABLE,
+ GEDIT_TYPE_WORD_COMPLETION_PLUGIN);
}
diff --git a/plugins/wordcompletion/gedit-word-completion-plugin.h
b/plugins/wordcompletion/gedit-word-completion-plugin.h
index 674c044..428046d 100644
--- a/plugins/wordcompletion/gedit-word-completion-plugin.h
+++ b/plugins/wordcompletion/gedit-word-completion-plugin.h
@@ -42,7 +42,6 @@ struct _GeditWordCompletionPlugin
{
PeasExtensionBase parent_instance;
-
GeditWordCompletionPluginPrivate *priv;
};
diff --git a/plugins/wordcompletion/gedit-word-completion.gresource.xml
b/plugins/wordcompletion/gedit-word-completion.gresource.xml
new file mode 100644
index 0000000..6d438bc
--- /dev/null
+++ b/plugins/wordcompletion/gedit-word-completion.gresource.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<gresources>
+ <gresource prefix="/org/gnome/gedit/plugins/wordcompletion/ui">
+ <file preprocess="xml-stripblanks">gedit-word-completion-configure.ui</file>
+ </gresource>
+</gresources>
diff --git a/plugins/wordcompletion/org.gnome.gedit.plugins.wordcompletion.gschema.xml.in.in
b/plugins/wordcompletion/org.gnome.gedit.plugins.wordcompletion.gschema.xml.in.in
new file mode 100644
index 0000000..c0cdae9
--- /dev/null
+++ b/plugins/wordcompletion/org.gnome.gedit.plugins.wordcompletion.gschema.xml.in.in
@@ -0,0 +1,15 @@
+<schemalist>
+ <schema gettext-domain="@GETTEXT_PACKAGE@" id="org.gnome.gedit.plugins.wordcompletion"
path="/org/gnome/gedit/plugins/wordcompletion/">
+ <key name="interactive-completion" type="b">
+ <default>true</default>
+ <_summary>Interactive Completion</_summary>
+ <_description>Whether to enable interactive completion.</_description>
+ </key>
+ <key name="minimum-word-size" type="u">
+ <range min="2" max="100" />
+ <default>2</default>
+ <_summary>Minimum Word Size</_summary>
+ <_description>The minimum word size to complete.</_description>
+ </key>
+ </schema>
+</schemalist>
diff --git a/po/POTFILES.in b/po/POTFILES.in
index 509b7be..df5f9b6 100644
--- a/po/POTFILES.in
+++ b/po/POTFILES.in
@@ -30,5 +30,7 @@ plugins/terminal/terminal.plugin.desktop.in.in
plugins/terminal/terminal.py
plugins/textsize/textsize/__init__.py
plugins/textsize/textsize.plugin.desktop.in.in
+[type: gettext/glade]plugins/wordcompletion/gedit-word-completion-configure.ui
plugins/wordcompletion/gedit-word-completion-plugin.c
+plugins/wordcompletion/org.gnome.gedit.plugins.wordcompletion.gschema.xml.in.in
plugins/wordcompletion/wordcompletion.plugin.desktop.in.in
diff --git a/po/POTFILES.skip b/po/POTFILES.skip
index abe38c3..1ce4192 100644
--- a/po/POTFILES.skip
+++ b/po/POTFILES.skip
@@ -15,4 +15,5 @@ plugins/synctex/synctex.plugin.desktop.in
plugins/terminal/org.gnome.gedit.plugins.terminal.gschema.xml.in
plugins/terminal/terminal.plugin.desktop.in
plugins/textsize/textsize.plugin.desktop.in
+plugins/wordcompletion/org.gnome.gedit.plugins.wordcompletion.gschema.xml.in
plugins/wordcompletion/wordcompletion.plugin.desktop.in
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]