[gedit/wip/spell-shaking] spell-checker-dialog: use directly a SpellNavigator



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]