[gedit/wip/spell-shaking] spell-checker-dialog: use directly a SpellNavigator
- From: Sébastien Wilmet <swilmet src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gedit/wip/spell-shaking] spell-checker-dialog: use directly a SpellNavigator
- Date: Thu, 6 Aug 2015 11:16:08 +0000 (UTC)
commit ae7e1010a17b0197d7648b3b2f39ca98e82285c2
Author: Sébastien Wilmet <swilmet gnome org>
Date: Thu Aug 6 13:14:11 2015 +0200
spell-checker-dialog: use directly a SpellNavigator
No need to send various signals, we can now use a SpellNavigator
directly.
plugins/spell/gedit-spell-checker-dialog.c | 230 ++++++++++++++--------------
plugins/spell/gedit-spell-checker-dialog.h | 23 +---
2 files changed, 116 insertions(+), 137 deletions(-)
---
diff --git a/plugins/spell/gedit-spell-checker-dialog.c b/plugins/spell/gedit-spell-checker-dialog.c
index b89274a..949139b 100644
--- a/plugins/spell/gedit-spell-checker-dialog.c
+++ b/plugins/spell/gedit-spell-checker-dialog.c
@@ -21,12 +21,13 @@
#include "gedit-spell-checker-dialog.h"
#include <glib/gi18n.h>
+#include "gedit-spell-checker.h"
typedef struct _GeditSpellCheckerDialogPrivate GeditSpellCheckerDialogPrivate;
struct _GeditSpellCheckerDialogPrivate
{
- GeditSpellChecker *spell_checker;
+ GeditSpellNavigator *navigator;
gchar *misspelled_word;
@@ -44,15 +45,7 @@ struct _GeditSpellCheckerDialogPrivate
enum
{
PROP_0,
- PROP_SPELL_CHECKER,
-};
-
-enum
-{
- SIGNAL_CHANGE,
- SIGNAL_CHANGE_ALL,
- SIGNAL_GOTO_NEXT,
- LAST_SIGNAL
+ PROP_SPELL_NAVIGATOR,
};
enum
@@ -61,31 +54,62 @@ enum
N_COLUMNS
};
-static guint signals[LAST_SIGNAL] = { 0 };
-
G_DEFINE_TYPE_WITH_PRIVATE (GeditSpellCheckerDialog, gedit_spell_checker_dialog, GTK_TYPE_DIALOG)
static void
-set_spell_checker (GeditSpellCheckerDialog *dialog,
- GeditSpellChecker *checker)
+update_spell_checker (GeditSpellCheckerDialog *dialog)
{
GeditSpellCheckerDialogPrivate *priv;
+ GeditSpellChecker *spell_checker;
GtkHeaderBar *header_bar;
const GeditSpellCheckerLanguage *lang;
priv = gedit_spell_checker_dialog_get_instance_private (dialog);
- g_return_if_fail (priv->spell_checker == NULL);
- priv->spell_checker = g_object_ref (checker);
+ g_object_get (priv->navigator,
+ "spell-checker", &spell_checker,
+ NULL);
+
+ g_return_if_fail (GEDIT_IS_SPELL_CHECKER (spell_checker));
header_bar = GTK_HEADER_BAR (gtk_dialog_get_header_bar (GTK_DIALOG (dialog)));
- lang = gedit_spell_checker_get_language (priv->spell_checker);
+ lang = gedit_spell_checker_get_language (spell_checker);
gtk_header_bar_set_subtitle (header_bar,
gedit_spell_checker_language_to_string (lang));
- g_object_notify (G_OBJECT (dialog), "spell-checker");
+ g_object_unref (spell_checker);
+}
+
+static void
+spell_checker_notify_cb (GeditSpellNavigator *navigator,
+ GParamSpec *pspec,
+ GeditSpellCheckerDialog *dialog)
+{
+ update_spell_checker (dialog);
+}
+
+static void
+set_navigator (GeditSpellCheckerDialog *dialog,
+ GeditSpellNavigator *navigator)
+{
+ GeditSpellCheckerDialogPrivate *priv;
+
+ priv = gedit_spell_checker_dialog_get_instance_private (dialog);
+
+ g_return_if_fail (priv->navigator == NULL);
+ priv->navigator = g_object_ref (navigator);
+
+ update_spell_checker (dialog);
+
+ g_signal_connect_object (priv->navigator,
+ "notify::spell-checker",
+ G_CALLBACK (spell_checker_notify_cb),
+ dialog,
+ 0);
+
+ g_object_notify (G_OBJECT (dialog), "navigator");
}
static void
@@ -100,8 +124,8 @@ gedit_spell_checker_dialog_get_property (GObject *object,
switch (prop_id)
{
- case PROP_SPELL_CHECKER:
- g_value_set_object (value, priv->spell_checker);
+ case PROP_SPELL_NAVIGATOR:
+ g_value_set_object (value, priv->navigator);
break;
default:
@@ -120,8 +144,8 @@ gedit_spell_checker_dialog_set_property (GObject *object,
switch (prop_id)
{
- case PROP_SPELL_CHECKER:
- set_spell_checker (dialog, g_value_get_object (value));
+ case PROP_SPELL_NAVIGATOR:
+ set_navigator (dialog, g_value_get_object (value));
break;
default:
@@ -137,7 +161,7 @@ gedit_spell_checker_dialog_dispose (GObject *object)
priv = gedit_spell_checker_dialog_get_instance_private (GEDIT_SPELL_CHECKER_DIALOG (object));
- g_clear_object (&priv->spell_checker);
+ g_clear_object (&priv->navigator);
G_OBJECT_CLASS (gedit_spell_checker_dialog_parent_class)->dispose (object);
}
@@ -166,45 +190,15 @@ gedit_spell_checker_dialog_class_init (GeditSpellCheckerDialogClass *klass)
object_class->finalize = gedit_spell_checker_dialog_finalize;
g_object_class_install_property (object_class,
- PROP_SPELL_CHECKER,
- g_param_spec_object ("spell-checker",
- "Spell Checker",
+ PROP_SPELL_NAVIGATOR,
+ g_param_spec_object ("spell-navigator",
+ "Spell Navigator",
"",
- GEDIT_TYPE_SPELL_CHECKER,
+ GEDIT_TYPE_SPELL_NAVIGATOR,
G_PARAM_READWRITE |
G_PARAM_CONSTRUCT_ONLY |
G_PARAM_STATIC_STRINGS));
- signals[SIGNAL_CHANGE] =
- g_signal_new ("change",
- G_OBJECT_CLASS_TYPE (object_class),
- G_SIGNAL_RUN_LAST,
- G_STRUCT_OFFSET (GeditSpellCheckerDialogClass, change),
- NULL, NULL, NULL,
- G_TYPE_NONE,
- 2,
- G_TYPE_STRING,
- G_TYPE_STRING);
-
- signals[SIGNAL_CHANGE_ALL] =
- g_signal_new ("change-all",
- G_OBJECT_CLASS_TYPE (object_class),
- G_SIGNAL_RUN_LAST,
- G_STRUCT_OFFSET (GeditSpellCheckerDialogClass, change_all),
- NULL, NULL, NULL,
- G_TYPE_NONE,
- 2,
- G_TYPE_STRING,
- G_TYPE_STRING);
-
- signals[SIGNAL_GOTO_NEXT] =
- g_signal_new ("goto-next",
- G_OBJECT_CLASS_TYPE (object_class),
- G_SIGNAL_RUN_LAST,
- G_STRUCT_OFFSET (GeditSpellCheckerDialogClass, goto_next),
- NULL, NULL, NULL,
- G_TYPE_NONE, 0);
-
/* Bind class to template */
gtk_widget_class_set_template_from_resource (widget_class,
"/org/gnome/gedit/plugins/spell/ui/spell-checker.ui");
@@ -220,6 +214,63 @@ gedit_spell_checker_dialog_class_init (GeditSpellCheckerDialogClass *klass)
}
static void
+set_misspelled_word (GeditSpellCheckerDialog *dialog,
+ const gchar *word)
+{
+ GeditSpellCheckerDialogPrivate *priv;
+ gchar *label;
+ GSList *suggestions;
+
+ g_return_if_fail (GEDIT_IS_SPELL_CHECKER_DIALOG (dialog));
+ g_return_if_fail (word != NULL);
+
+ priv = gedit_spell_checker_dialog_get_instance_private (dialog);
+
+ g_return_if_fail (!gedit_spell_checker_check_word (priv->spell_checker, word, NULL));
+
+ g_free (priv->misspelled_word);
+ priv->misspelled_word = g_strdup (word);
+
+ label = g_strdup_printf("<b>%s</b>", word);
+ gtk_label_set_label (priv->misspelled_word_label, label);
+ g_free (label);
+
+ suggestions = gedit_spell_checker_get_suggestions (priv->spell_checker,
+ priv->misspelled_word);
+
+ set_suggestions (dialog, suggestions);
+
+ g_slist_free_full (suggestions, g_free);
+}
+
+static void
+set_completed (GeditSpellCheckerDialog *dialog)
+{
+ GeditSpellCheckerDialogPrivate *priv;
+ gchar *label;
+
+ g_return_if_fail (GEDIT_IS_SPELL_CHECKER_DIALOG (dialog));
+
+ priv = gedit_spell_checker_dialog_get_instance_private (dialog);
+
+ label = g_strdup_printf ("<b>%s</b>", _("Completed spell checking"));
+ gtk_label_set_label (priv->misspelled_word_label, label);
+ g_free (label);
+
+ clear_suggestions (dialog);
+ gtk_entry_set_text (priv->word_entry, "");
+
+ gtk_widget_set_sensitive (GTK_WIDGET (priv->word_entry), FALSE);
+ gtk_widget_set_sensitive (priv->check_word_button, FALSE);
+ gtk_widget_set_sensitive (priv->ignore_button, FALSE);
+ gtk_widget_set_sensitive (priv->ignore_all_button, FALSE);
+ gtk_widget_set_sensitive (priv->change_button, FALSE);
+ gtk_widget_set_sensitive (priv->change_all_button, FALSE);
+ gtk_widget_set_sensitive (priv->add_word_button, FALSE);
+ gtk_widget_set_sensitive (GTK_WIDGET (priv->suggestions_view), FALSE);
+}
+
+static void
clear_suggestions (GeditSpellCheckerDialog *dialog)
{
GeditSpellCheckerDialogPrivate *priv;
@@ -575,74 +626,17 @@ gedit_spell_checker_dialog_init (GeditSpellCheckerDialog *dialog)
}
GtkWidget *
-gedit_spell_checker_dialog_new (GtkWindow *parent,
- GeditSpellChecker *checker)
+gedit_spell_checker_dialog_new (GtkWindow *parent,
+ GeditSpellNavigator *navigator)
{
g_return_val_if_fail (GTK_IS_WINDOW (parent), NULL);
- g_return_val_if_fail (GEDIT_IS_SPELL_CHECKER (checker), NULL);
+ g_return_val_if_fail (GEDIT_IS_SPELL_NAVIGATOR (navigator), NULL);
return g_object_new (GEDIT_TYPE_SPELL_CHECKER_DIALOG,
"transient-for", parent,
- "spell-checker", checker,
"use-header-bar", TRUE,
+ "spell-navigator", navigator,
NULL);
}
-void
-gedit_spell_checker_dialog_set_misspelled_word (GeditSpellCheckerDialog *dialog,
- const gchar *word)
-{
- GeditSpellCheckerDialogPrivate *priv;
- gchar *label;
- GSList *suggestions;
-
- g_return_if_fail (GEDIT_IS_SPELL_CHECKER_DIALOG (dialog));
- g_return_if_fail (word != NULL);
-
- priv = gedit_spell_checker_dialog_get_instance_private (dialog);
-
- g_return_if_fail (!gedit_spell_checker_check_word (priv->spell_checker, word, NULL));
-
- g_free (priv->misspelled_word);
- priv->misspelled_word = g_strdup (word);
-
- label = g_strdup_printf("<b>%s</b>", word);
- gtk_label_set_label (priv->misspelled_word_label, label);
- g_free (label);
-
- suggestions = gedit_spell_checker_get_suggestions (priv->spell_checker,
- priv->misspelled_word);
-
- set_suggestions (dialog, suggestions);
-
- g_slist_free_full (suggestions, g_free);
-}
-
-void
-gedit_spell_checker_dialog_set_completed (GeditSpellCheckerDialog *dialog)
-{
- GeditSpellCheckerDialogPrivate *priv;
- gchar *label;
-
- g_return_if_fail (GEDIT_IS_SPELL_CHECKER_DIALOG (dialog));
-
- priv = gedit_spell_checker_dialog_get_instance_private (dialog);
-
- label = g_strdup_printf ("<b>%s</b>", _("Completed spell checking"));
- gtk_label_set_label (priv->misspelled_word_label, label);
- g_free (label);
-
- clear_suggestions (dialog);
- gtk_entry_set_text (priv->word_entry, "");
-
- gtk_widget_set_sensitive (GTK_WIDGET (priv->word_entry), FALSE);
- gtk_widget_set_sensitive (priv->check_word_button, FALSE);
- gtk_widget_set_sensitive (priv->ignore_button, FALSE);
- gtk_widget_set_sensitive (priv->ignore_all_button, FALSE);
- gtk_widget_set_sensitive (priv->change_button, FALSE);
- gtk_widget_set_sensitive (priv->change_all_button, FALSE);
- gtk_widget_set_sensitive (priv->add_word_button, FALSE);
- gtk_widget_set_sensitive (GTK_WIDGET (priv->suggestions_view), FALSE);
-}
-
/* ex:set ts=8 noet: */
diff --git a/plugins/spell/gedit-spell-checker-dialog.h b/plugins/spell/gedit-spell-checker-dialog.h
index 9a0994b..b207e37 100644
--- a/plugins/spell/gedit-spell-checker-dialog.h
+++ b/plugins/spell/gedit-spell-checker-dialog.h
@@ -3,6 +3,7 @@
* This file is part of gedit
*
* Copyright (C) 2002 Paolo Maggi
+ * Copyright (C) 2015 Sébastien Wilmet
*
* 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
@@ -22,7 +23,7 @@
#define __GEDIT_SPELL_CHECKER_DIALOG_H__
#include <gtk/gtk.h>
-#include "gedit-spell-checker.h"
+#include "gedit-spell-navigator.h"
G_BEGIN_DECLS
@@ -34,26 +35,10 @@ G_DECLARE_DERIVABLE_TYPE (GeditSpellCheckerDialog, gedit_spell_checker_dialog,
struct _GeditSpellCheckerDialogClass
{
GtkDialogClass parent_class;
-
- /* Signals */
- void (* change) (GeditSpellCheckerDialog *dialog,
- const gchar *word,
- const gchar *change_to);
-
- void (* change_all) (GeditSpellCheckerDialog *dialog,
- const gchar *word,
- const gchar *change_to);
-
- void (* goto_next) (GeditSpellCheckerDialog *dialog);
};
-GtkWidget * gedit_spell_checker_dialog_new (GtkWindow *parent,
- GeditSpellChecker *checker);
-
-void gedit_spell_checker_dialog_set_misspelled_word (GeditSpellCheckerDialog *dialog,
- const gchar *word);
-
-void gedit_spell_checker_dialog_set_completed (GeditSpellCheckerDialog *dialog);
+GtkWidget * gedit_spell_checker_dialog_new (GtkWindow *parent,
+ GeditSpellNavigator *navigator);
G_END_DECLS
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]