[gspell/wip/inline-checker: 3/3] inline-checker-text: add :enabled property
- From: Sébastien Wilmet <swilmet src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gspell/wip/inline-checker: 3/3] inline-checker-text: add :enabled property
- Date: Thu, 7 Jan 2016 10:31:34 +0000 (UTC)
commit 22a39f99d8c76057ccc59057078a1b0209586c42
Author: Sébastien Wilmet <swilmet gnome org>
Date: Thu Jan 7 11:25:52 2016 +0100
inline-checker-text: add :enabled property
gspell/gspell-inline-checker-text.c | 146 ++++++++++++++++++++++++++++------
gspell/gspell-inline-checker-text.h | 8 ++-
gspell/gspell-text-view.c | 7 ++-
3 files changed, 133 insertions(+), 28 deletions(-)
---
diff --git a/gspell/gspell-inline-checker-text.c b/gspell/gspell-inline-checker-text.c
index a09c20d..2a34e1e 100644
--- a/gspell/gspell-inline-checker-text.c
+++ b/gspell/gspell-inline-checker-text.c
@@ -27,73 +27,92 @@ typedef struct _GspellInlineCheckerTextPrivate GspellInlineCheckerTextPrivate;
struct _GspellInlineCheckerTextPrivate
{
GtkTextView *view;
- GspellInlineCheckerTextBuffer *inline_checker;
+ GspellInlineCheckerTextBuffer *buffer_checker;
};
enum
{
PROP_0,
PROP_VIEW,
+ PROP_ENABLED,
};
G_DEFINE_TYPE_WITH_PRIVATE (GspellInlineCheckerText, gspell_inline_checker_text, G_TYPE_OBJECT)
static void
-update_inline_checker (GspellInlineCheckerText *self)
+create_buffer_checker (GspellInlineCheckerText *inline_checker)
{
GspellInlineCheckerTextPrivate *priv;
GtkTextBuffer *buffer;
- priv = gspell_inline_checker_text_get_instance_private (self);
+ priv = gspell_inline_checker_text_get_instance_private (inline_checker);
- if (priv->view == NULL)
+ if (priv->buffer_checker != NULL)
{
return;
}
- if (priv->inline_checker != NULL)
+ buffer = gtk_text_view_get_buffer (priv->view);
+ priv->buffer_checker = _gspell_inline_checker_text_buffer_new (buffer);
+ _gspell_inline_checker_text_buffer_attach_view (priv->buffer_checker,
+ priv->view);
+}
+
+static void
+destroy_buffer_checker (GspellInlineCheckerText *inline_checker)
+{
+ GspellInlineCheckerTextPrivate *priv;
+
+ priv = gspell_inline_checker_text_get_instance_private (inline_checker);
+
+ if (priv->view == NULL || priv->buffer_checker == NULL)
{
- _gspell_inline_checker_text_buffer_detach_view (priv->inline_checker,
- priv->view);
- g_object_unref (priv->inline_checker);
+ return;
}
- buffer = gtk_text_view_get_buffer (priv->view);
- priv->inline_checker = _gspell_inline_checker_text_buffer_new (buffer);
- _gspell_inline_checker_text_buffer_attach_view (priv->inline_checker,
+ _gspell_inline_checker_text_buffer_detach_view (priv->buffer_checker,
priv->view);
+ g_clear_object (&priv->buffer_checker);
}
static void
notify_buffer_cb (GtkTextView *view,
GParamSpec *pspec,
- GspellInlineCheckerText *self)
+ GspellInlineCheckerText *inline_checker)
{
- update_inline_checker (self);
+ GspellInlineCheckerTextPrivate *priv;
+
+ priv = gspell_inline_checker_text_get_instance_private (inline_checker);
+
+ if (priv->buffer_checker == NULL)
+ {
+ return;
+ }
+
+ destroy_buffer_checker (inline_checker);
+ create_buffer_checker (inline_checker);
}
static void
-set_view (GspellInlineCheckerText *self,
+set_view (GspellInlineCheckerText *inline_checker,
GtkTextView *view)
{
GspellInlineCheckerTextPrivate *priv;
g_return_if_fail (GTK_IS_TEXT_VIEW (view));
- priv = gspell_inline_checker_text_get_instance_private (self);
+ priv = gspell_inline_checker_text_get_instance_private (inline_checker);
g_assert (priv->view == NULL);
- g_assert (priv->inline_checker == NULL);
+ g_assert (priv->buffer_checker == NULL);
priv->view = view;
g_signal_connect_object (priv->view,
"notify::buffer",
G_CALLBACK (notify_buffer_cb),
- self,
+ inline_checker,
0);
-
- update_inline_checker (self);
}
static void
@@ -102,9 +121,11 @@ gspell_inline_checker_text_get_property (GObject *object,
GValue *value,
GParamSpec *pspec)
{
+ GspellInlineCheckerText *inline_checker;
GspellInlineCheckerTextPrivate *priv;
- priv = gspell_inline_checker_text_get_instance_private (GSPELL_INLINE_CHECKER_TEXT (object));
+ inline_checker = GSPELL_INLINE_CHECKER_TEXT (object);
+ priv = gspell_inline_checker_text_get_instance_private (inline_checker);
switch (prop_id)
{
@@ -112,6 +133,10 @@ gspell_inline_checker_text_get_property (GObject *object,
g_value_set_object (value, priv->view);
break;
+ case PROP_ENABLED:
+ g_value_set_boolean (value, gspell_inline_checker_text_get_enabled (inline_checker));
+ break;
+
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
break;
@@ -124,12 +149,17 @@ gspell_inline_checker_text_set_property (GObject *object,
const GValue *value,
GParamSpec *pspec)
{
- GspellInlineCheckerText *self = GSPELL_INLINE_CHECKER_TEXT (object);
+ GspellInlineCheckerText *inline_checker = GSPELL_INLINE_CHECKER_TEXT (object);
switch (prop_id)
{
case PROP_VIEW:
- set_view (self, g_value_get_object (value));
+ set_view (inline_checker, g_value_get_object (value));
+ break;
+
+ case PROP_ENABLED:
+ gspell_inline_checker_text_set_enabled (inline_checker,
+ g_value_get_boolean (value));
break;
default:
@@ -145,14 +175,14 @@ gspell_inline_checker_text_dispose (GObject *object)
priv = gspell_inline_checker_text_get_instance_private (GSPELL_INLINE_CHECKER_TEXT (object));
- if (priv->view != NULL && priv->inline_checker != NULL)
+ if (priv->view != NULL && priv->buffer_checker != NULL)
{
- _gspell_inline_checker_text_buffer_detach_view (priv->inline_checker,
+ _gspell_inline_checker_text_buffer_detach_view (priv->buffer_checker,
priv->view);
}
priv->view = NULL;
- g_clear_object (&priv->inline_checker);
+ g_clear_object (&priv->buffer_checker);
G_OBJECT_CLASS (gspell_inline_checker_text_parent_class)->dispose (object);
}
@@ -175,10 +205,24 @@ gspell_inline_checker_text_class_init (GspellInlineCheckerTextClass *klass)
G_PARAM_READWRITE |
G_PARAM_CONSTRUCT_ONLY |
G_PARAM_STATIC_STRINGS));
+
+ /**
+ * GspellInlineCheckerText:enabled:
+ *
+ * Whether the inline spell checking is enabled.
+ */
+ g_object_class_install_property (object_class,
+ PROP_ENABLED,
+ g_param_spec_boolean ("enabled",
+ "Enabled",
+ "",
+ FALSE,
+ G_PARAM_READWRITE |
+ G_PARAM_STATIC_STRINGS));
}
static void
-gspell_inline_checker_text_init (GspellInlineCheckerText *self)
+gspell_inline_checker_text_init (GspellInlineCheckerText *inline_checker)
{
}
@@ -192,4 +236,54 @@ gspell_inline_checker_text_new (GtkTextView *view)
NULL);
}
+/**
+ * gspell_inline_checker_text_set_enabled:
+ * @inline_checker: a #GspellInlineCheckerText.
+ * @enabled: the new state.
+ *
+ * Enables or disables the inline spell checking.
+ */
+void
+gspell_inline_checker_text_set_enabled (GspellInlineCheckerText *inline_checker,
+ gboolean enabled)
+{
+ g_return_if_fail (GSPELL_IS_INLINE_CHECKER_TEXT (inline_checker));
+
+ enabled = enabled != FALSE;
+
+ if (enabled == gspell_inline_checker_text_get_enabled (inline_checker))
+ {
+ return;
+ }
+
+ if (enabled)
+ {
+ create_buffer_checker (inline_checker);
+ }
+ else
+ {
+ destroy_buffer_checker (inline_checker);
+ }
+
+ g_object_notify (G_OBJECT (inline_checker), "enabled");
+}
+
+/**
+ * gspell_inline_checker_text_get_enabled:
+ * @inline_checker: a #GspellInlineCheckerText.
+ *
+ * Returns: whether the inline spell checking is enabled.
+ */
+gboolean
+gspell_inline_checker_text_get_enabled (GspellInlineCheckerText *inline_checker)
+{
+ GspellInlineCheckerTextPrivate *priv;
+
+ g_return_val_if_fail (GSPELL_IS_INLINE_CHECKER_TEXT (inline_checker), FALSE);
+
+ priv = gspell_inline_checker_text_get_instance_private (inline_checker);
+
+ return priv->buffer_checker != NULL;
+}
+
/* ex:set ts=8 noet: */
diff --git a/gspell/gspell-inline-checker-text.h b/gspell/gspell-inline-checker-text.h
index bcaaf16..50c6baa 100644
--- a/gspell/gspell-inline-checker-text.h
+++ b/gspell/gspell-inline-checker-text.h
@@ -41,7 +41,13 @@ struct _GspellInlineCheckerTextClass
gpointer padding[8];
};
-GspellInlineCheckerText * gspell_inline_checker_text_new (GtkTextView *view);
+GspellInlineCheckerText *
+ gspell_inline_checker_text_new (GtkTextView *view);
+
+void gspell_inline_checker_text_set_enabled (GspellInlineCheckerText *inline_checker,
+ gboolean enabled);
+
+gboolean gspell_inline_checker_text_get_enabled (GspellInlineCheckerText *inline_checker);
G_END_DECLS
diff --git a/gspell/gspell-text-view.c b/gspell/gspell-text-view.c
index 7540403..3498f8e 100644
--- a/gspell/gspell-text-view.c
+++ b/gspell/gspell-text-view.c
@@ -59,14 +59,19 @@ gspell_text_view_set_inline_checking (GtkTextView *view,
if (enable)
{
+ GspellInlineCheckerText *inline_checker;
+
if (gspell_text_view_get_inline_checking (view))
{
return;
}
+ inline_checker = gspell_inline_checker_text_new (view);
+ gspell_inline_checker_text_set_enabled (inline_checker, TRUE);
+
g_object_set_data_full (G_OBJECT (view),
INLINE_CHECKER_KEY,
- gspell_inline_checker_text_new (view),
+ inline_checker,
g_object_unref);
}
else
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]