2011-11-05 [wwp] 3.7.10cvs72
[claws.git] / src / gtk / gtkaspell.c
index 9580ce1ef8dd41f82f736f6014d5fc89bf4b4bef..18cd509a9b01b5e6a2544c5f509f6057d452f051 100644 (file)
@@ -33,7 +33,9 @@
 #include <stdlib.h>
 #include <unistd.h>
 #include <sys/types.h>
-#include <sys/wait.h>
+#if HAVE_SYS_WAIT_H
+#  include <sys/wait.h>
+#endif
 #include <signal.h>
 #include <ctype.h>
 #include <string.h>
@@ -202,10 +204,10 @@ static gint get_textview_buffer_charcount(GtkTextView *view)
 {
        GtkTextBuffer *buffer;
 
-       g_return_val_if_fail(view, 0);
+       cm_return_val_if_fail(view, 0);
 
        buffer = gtk_text_view_get_buffer(view);
-       g_return_val_if_fail(buffer, 0);
+       cm_return_val_if_fail(buffer, 0);
 
        return gtk_text_buffer_get_char_count(buffer);
 }
@@ -215,13 +217,13 @@ static gint get_textview_buffer_offset(GtkTextView *view)
        GtkTextMark * mark;
        GtkTextIter iter;
 
-       g_return_val_if_fail(view, 0);
+       cm_return_val_if_fail(view, 0);
 
        buffer = gtk_text_view_get_buffer(view);
-       g_return_val_if_fail(buffer, 0);
+       cm_return_val_if_fail(buffer, 0);
 
        mark = gtk_text_buffer_get_insert(buffer);
-       g_return_val_if_fail(mark, 0);
+       cm_return_val_if_fail(mark, 0);
 
        gtk_text_buffer_get_iter_at_mark(buffer, &iter, mark);
 
@@ -232,10 +234,10 @@ static void set_textview_buffer_offset(GtkTextView *view, gint offset)
        GtkTextBuffer *buffer;
        GtkTextIter iter;
 
-       g_return_if_fail(view);
+       cm_return_if_fail(view);
 
        buffer = gtk_text_view_get_buffer(view);
-       g_return_if_fail(buffer);
+       cm_return_if_fail(buffer);
 
        gtk_text_buffer_get_iter_at_offset(buffer, &iter, offset);
        gtk_text_buffer_place_cursor(buffer, &iter);
@@ -298,13 +300,13 @@ static void gtkaspell_checkers_error_message (gchar *message)
 
 const char *gtkaspell_checkers_strerror(void)
 {
-       g_return_val_if_fail(gtkaspellcheckers, "");
+       cm_return_val_if_fail(gtkaspellcheckers, "");
        return gtkaspellcheckers->error_message;
 }
 
 void gtkaspell_checkers_reset_error(void)
 {
-       g_return_if_fail(gtkaspellcheckers);
+       cm_return_if_fail(gtkaspellcheckers);
        
        g_free(gtkaspellcheckers->error_message);
        
@@ -330,7 +332,7 @@ GtkAspell *gtkaspell_new(const gchar *dictionary,
        GtkAspeller     *gtkaspeller;
        GtkTextBuffer *buffer;
 
-       g_return_val_if_fail(gtktext, NULL);
+       cm_return_val_if_fail(gtktext, NULL);
        if (!dictionary || !*dictionary) {
                gtkaspell_checkers_error_message(
                                g_strdup(_("No dictionary selected.")));
@@ -388,6 +390,8 @@ GtkAspell *gtkaspell_new(const gchar *dictionary,
                if (!alt_gtkaspeller) {
                        gtkaspell_checkers_error_message(
                                g_strdup_printf(_("Couldn't initialize %s speller."), dictionary));
+                       gtkaspeller_delete(gtkaspeller);
+                       g_free(gtkaspell);
                        return NULL;
                }
 
@@ -481,7 +485,7 @@ static void entry_insert_cb(GtkTextBuffer *textbuf,
 {
        guint pos;
 
-       g_return_if_fail(gtkaspell->gtkaspeller->speller);
+       cm_return_if_fail(gtkaspell->gtkaspeller->speller);
 
        if (!gtkaspell->check_while_typing)
                return;
@@ -515,7 +519,7 @@ static void entry_delete_cb(GtkTextBuffer *textbuf,
        int origpos;
        gint start, end;
     
-       g_return_if_fail(gtkaspell->gtkaspeller->speller);
+       cm_return_if_fail(gtkaspell->gtkaspeller->speller);
 
        if (!gtkaspell->check_while_typing)
                return;
@@ -607,15 +611,15 @@ static GtkAspeller *gtkaspeller_new(Dictionary *dictionary)
        GtkAspeller     *tmp;
        Dictionary      *dict;
 
-       g_return_val_if_fail(gtkaspellcheckers, NULL);
+       cm_return_val_if_fail(gtkaspellcheckers, NULL);
 
-       g_return_val_if_fail(dictionary, NULL);
+       cm_return_val_if_fail(dictionary, NULL);
 
        if (dictionary->dictname == NULL)
                gtkaspell_checkers_error_message(
                                g_strdup(_("No dictionary selected.")));
        
-       g_return_val_if_fail(dictionary->fullname, NULL);
+       cm_return_val_if_fail(dictionary->fullname, NULL);
 
        dict = dictionary_dup(dictionary);
 
@@ -652,8 +656,8 @@ static GtkAspeller *gtkaspeller_real_new(Dictionary *dict)
        EnchantBroker           *broker;
        EnchantDict             *speller;
        
-       g_return_val_if_fail(gtkaspellcheckers, NULL);
-       g_return_val_if_fail(dict, NULL);
+       cm_return_val_if_fail(gtkaspellcheckers, NULL);
+       cm_return_val_if_fail(dict, NULL);
 
        gtkaspeller = g_new(GtkAspeller, 1);
        
@@ -664,6 +668,7 @@ static GtkAspeller *gtkaspeller_real_new(Dictionary *dict)
        if (!broker) {
                gtkaspell_checkers_error_message(
                                g_strdup(_("Couldn't initialize Enchant broker.")));
+               g_free(gtkaspeller);
                return NULL;
        }
        if ((speller = set_dictionary(broker, dict)) == NULL) {
@@ -671,6 +676,7 @@ static GtkAspeller *gtkaspeller_real_new(Dictionary *dict)
                                g_strdup_printf(_("Couldn't initialize %s dictionary:"), dict->fullname));
                gtkaspell_checkers_error_message(
                                g_strdup(enchant_broker_get_error(broker)));
+               g_free(gtkaspeller);
                return NULL;
        }
        gtkaspeller->speller = speller;
@@ -681,7 +687,7 @@ static GtkAspeller *gtkaspeller_real_new(Dictionary *dict)
 
 static GtkAspeller *gtkaspeller_delete(GtkAspeller *gtkaspeller)
 {
-       g_return_val_if_fail(gtkaspellcheckers, NULL);
+       cm_return_val_if_fail(gtkaspellcheckers, NULL);
        
        gtkaspellcheckers->checkers = 
                g_slist_remove(gtkaspellcheckers->checkers, 
@@ -700,8 +706,8 @@ static GtkAspeller *gtkaspeller_delete(GtkAspeller *gtkaspeller)
 
 static GtkAspeller *gtkaspeller_real_delete(GtkAspeller *gtkaspeller)
 {
-       g_return_val_if_fail(gtkaspeller,          NULL);
-       g_return_val_if_fail(gtkaspeller->speller, NULL);
+       cm_return_val_if_fail(gtkaspeller,          NULL);
+       cm_return_val_if_fail(gtkaspeller->speller, NULL);
 
        enchant_broker_free_dict(gtkaspeller->broker, gtkaspeller->speller);
        enchant_broker_free(gtkaspeller->broker);
@@ -721,8 +727,8 @@ static GtkAspeller *gtkaspeller_real_delete(GtkAspeller *gtkaspeller)
 
 static EnchantDict *set_dictionary(EnchantBroker *broker, Dictionary *dict)
 {
-       g_return_val_if_fail(broker, FALSE);
-       g_return_val_if_fail(dict,   FALSE);
+       cm_return_val_if_fail(broker, FALSE);
+       cm_return_val_if_fail(dict,   FALSE);
 
        return enchant_broker_request_dict(broker, dict->dictname );
 }
@@ -742,7 +748,7 @@ static GList *misspelled_suggest(GtkAspell *gtkaspell, gchar *word)
        GList                 *list = NULL;
        char **suggestions;
        size_t num_sug, i;
-       g_return_val_if_fail(word, NULL);
+       cm_return_val_if_fail(word, NULL);
 
        if (*word == 0)
                return NULL;
@@ -750,12 +756,12 @@ static GList *misspelled_suggest(GtkAspell *gtkaspell, gchar *word)
        gtkaspell_free_suggestions_list(gtkaspell);
 
        suggestions = enchant_dict_suggest(gtkaspell->gtkaspeller->speller, word, strlen(word), &num_sug);
+       list = g_list_append(list, g_strdup(word)); 
        if (suggestions == NULL || num_sug == 0) {
-               gtkaspell->max_sug          = - 1;
-               gtkaspell->suggestions_list = NULL;
-               return NULL;
+               gtkaspell->max_sug          = -1;
+               gtkaspell->suggestions_list = list;
+               return list;
        }
-       list = g_list_append(list, g_strdup(word)); 
        for (i = 0; i < num_sug; i++)
                list = g_list_append(list, g_strdup((gchar *)suggestions[i]));
 
@@ -769,7 +775,7 @@ static GList *misspelled_suggest(GtkAspell *gtkaspell, gchar *word)
 int gtkaspell_misspelled_test(GtkAspell *gtkaspell, char *word) 
 {
        gint result = 0;
-       g_return_val_if_fail(word, 0);
+       cm_return_val_if_fail(word, 0);
 
        if (*word == 0)
                return 0;
@@ -913,7 +919,7 @@ static gboolean check_at(GtkAspell *gtkaspell, gint from_pos)
        char buf[GTKASPELLWORDSIZE];
        GtkTextView     *gtktext;
 
-       g_return_val_if_fail(from_pos >= 0, FALSE);
+       cm_return_val_if_fail(from_pos >= 0, FALSE);
     
        gtktext = gtkaspell->gtktext;
 
@@ -1061,8 +1067,8 @@ void gtkaspell_check_all(GtkAspell *gtkaspell)
        GtkTextBuffer *buffer;
        GtkTextIter startiter, enditer;
 
-       g_return_if_fail(gtkaspell);
-       g_return_if_fail(gtkaspell->gtktext);
+       cm_return_if_fail(gtkaspell);
+       cm_return_if_fail(gtkaspell->gtktext);
 
        gtktext = gtkaspell->gtktext;
        buffer = gtk_text_view_get_buffer(gtktext);
@@ -1107,7 +1113,7 @@ void gtkaspell_highlight_all(GtkAspell *gtkaspell)
        guint     len;
        GtkTextView *gtktext;
 
-       g_return_if_fail(gtkaspell->gtkaspeller->speller);      
+       cm_return_if_fail(gtkaspell->gtkaspeller->speller);     
 
        gtktext = gtkaspell->gtktext;
 
@@ -1182,6 +1188,38 @@ static void replace_word_cb(GtkWidget *w, gpointer data)
        set_point_continue(gtkaspell);
 }
 
+void gtkaspell_block_check(GtkAspell *gtkaspell)
+{
+       GtkTextView *gtktext;
+       
+       if (gtkaspell == NULL)
+               return;
+               
+       gtktext = gtkaspell->gtktext;
+       g_signal_handlers_block_by_func(G_OBJECT(gtktext),
+                                        G_CALLBACK(entry_insert_cb),
+                                        gtkaspell);
+       g_signal_handlers_block_by_func(G_OBJECT(gtktext),
+                                        G_CALLBACK(entry_delete_cb),
+                                        gtkaspell);
+}
+
+void gtkaspell_unblock_check(GtkAspell *gtkaspell)
+{
+       GtkTextView *gtktext;
+
+       if (gtkaspell == NULL)
+               return;
+               
+       gtktext = gtkaspell->gtktext;
+       g_signal_handlers_unblock_by_func(G_OBJECT(gtktext),
+                                        G_CALLBACK(entry_insert_cb),
+                                        gtkaspell);
+       g_signal_handlers_unblock_by_func(G_OBJECT(gtktext),
+                                        G_CALLBACK(entry_delete_cb),
+                                        gtkaspell);
+}
+
 static void replace_real_word(GtkAspell *gtkaspell, const gchar *newword)
 {
        int             oldlen, newlen, wordlen;
@@ -1343,10 +1381,10 @@ static gboolean replace_key_pressed(GtkWidget *widget,
                                   GdkEventKey *event,
                                   GtkAspell *gtkaspell)
 {
-       if (event && event->keyval == GDK_Escape) {
+       if (event && event->keyval == GDK_KEY_Escape) {
                gtk_widget_destroy(widget);
                return TRUE;
-       } else if (event && event->keyval == GDK_Return) {
+       } else if (event && event->keyval == GDK_KEY_Return) {
                replace_with_supplied_word_cb(widget, gtkaspell);
                return TRUE;
        }
@@ -1378,7 +1416,6 @@ static void replace_with_create_dialog_cb(GtkWidget *w, gpointer data)
 
        gtk_window_set_resizable(GTK_WINDOW(dialog), FALSE);
        gtk_window_set_title(GTK_WINDOW(dialog),_("Replace unknown word"));
-       gtk_dialog_set_has_separator (GTK_DIALOG (dialog), FALSE);
        gtk_window_move(GTK_WINDOW(dialog), xx, yy);
 
        g_signal_connect_swapped(G_OBJECT(dialog), "destroy",
@@ -1592,7 +1629,7 @@ GtkTreeModel *gtkaspell_dictionary_store_new_with_refresh(gboolean refresh)
        Dictionary *dict;
 
        dict_list = gtkaspell_get_dictionary_list(refresh);
-       g_return_val_if_fail(dict_list, NULL);
+       cm_return_val_if_fail(dict_list, NULL);
 
        store = gtk_list_store_new(SET_GTKASPELL_SIZE,
                                   G_TYPE_STRING,
@@ -1642,8 +1679,8 @@ gchar *gtkaspell_get_dictionary_menu_active_item(GtkComboBox *combo)
        GtkTreeModel *model;
        gchar *dict_fullname = NULL;
        
-       g_return_val_if_fail(GTK_IS_COMBO_BOX(combo), NULL);
-       g_return_val_if_fail(gtk_combo_box_get_active_iter(combo, &iter), NULL);
+       cm_return_val_if_fail(GTK_IS_COMBO_BOX(combo), NULL);
+       cm_return_val_if_fail(gtk_combo_box_get_active_iter(combo, &iter), NULL);
        
        model = gtk_combo_box_get_model(combo);
        if(model == NULL)
@@ -1663,9 +1700,9 @@ gint gtkaspell_set_dictionary_menu_active_item(GtkComboBox *combo,
        GtkTreeIter iter;
        gchar *dict_name = NULL;
        
-       g_return_val_if_fail(combo != NULL, 0);
-       g_return_val_if_fail(dictionary != NULL, 0);
-       g_return_val_if_fail(GTK_IS_COMBO_BOX(combo), 0);
+       cm_return_val_if_fail(combo != NULL, 0);
+       cm_return_val_if_fail(dictionary != NULL, 0);
+       cm_return_val_if_fail(GTK_IS_COMBO_BOX(combo), 0);
 
        if((model = gtk_combo_box_get_model(combo)) == NULL)
                return 0;
@@ -1714,11 +1751,11 @@ static gboolean aspell_key_pressed(GtkWidget *widget,
                                   GdkEventKey *event,
                                   GtkAspell *gtkaspell)
 {
-       if (event && (isascii(event->keyval) || event->keyval == GDK_Return)) {
+       if (event && (isascii(event->keyval) || event->keyval == GDK_KEY_Return)) {
                gtk_accel_groups_activate(
                                G_OBJECT(gtkaspell->parent_window),
                                event->keyval, event->state);
-       } else if (event && event->keyval == GDK_Escape) {
+       } else if (event && event->keyval == GDK_KEY_Escape) {
                destroy_menu(NULL, gtkaspell);
        }
        return FALSE;
@@ -1770,7 +1807,7 @@ static GSList *make_sug_menu(GtkAspell *gtkaspell)
         g_signal_connect(G_OBJECT(item), "activate",
                         G_CALLBACK(add_word_to_session_cb), 
                         gtkaspell);
-       gtk_widget_add_accelerator(item, "activate", accel, GDK_space,
+       gtk_widget_add_accelerator(item, "activate", accel, GDK_KEY_space,
                                   GDK_CONTROL_MASK,
                                   GTK_ACCEL_LOCKED | GTK_ACCEL_VISIBLE);
 
@@ -1780,7 +1817,7 @@ static GSList *make_sug_menu(GtkAspell *gtkaspell)
         g_signal_connect(G_OBJECT(item), "activate",
                         G_CALLBACK(add_word_to_personal_cb), 
                         gtkaspell);
-       gtk_widget_add_accelerator(item, "activate", accel, GDK_Return,
+       gtk_widget_add_accelerator(item, "activate", accel, GDK_KEY_Return,
                                   GDK_CONTROL_MASK,
                                   GTK_ACCEL_LOCKED | GTK_ACCEL_VISIBLE);
 
@@ -1790,9 +1827,9 @@ static GSList *make_sug_menu(GtkAspell *gtkaspell)
         g_signal_connect(G_OBJECT(item), "activate",
                         G_CALLBACK(replace_with_create_dialog_cb), 
                         gtkaspell);
-       gtk_widget_add_accelerator(item, "activate", accel, GDK_R, 0,
+       gtk_widget_add_accelerator(item, "activate", accel, GDK_KEY_R, 0,
                                   GTK_ACCEL_LOCKED | GTK_ACCEL_VISIBLE);
-       gtk_widget_add_accelerator(item, "activate", accel, GDK_R, 
+       gtk_widget_add_accelerator(item, "activate", accel, GDK_KEY_R, 
                                   GDK_CONTROL_MASK,
                                   GTK_ACCEL_LOCKED);
 
@@ -1806,9 +1843,9 @@ static GSList *make_sug_menu(GtkAspell *gtkaspell)
                g_signal_connect(G_OBJECT(item), "activate",
                                 G_CALLBACK(check_with_alternate_cb),
                                 gtkaspell);
-               gtk_widget_add_accelerator(item, "activate", accel, GDK_X, 0,
+               gtk_widget_add_accelerator(item, "activate", accel, GDK_KEY_X, 0,
                                           GTK_ACCEL_LOCKED | GTK_ACCEL_VISIBLE);
-               gtk_widget_add_accelerator(item, "activate", accel, GDK_X, 
+               gtk_widget_add_accelerator(item, "activate", accel, GDK_KEY_X, 
                                           GDK_CONTROL_MASK,
                                           GTK_ACCEL_LOCKED);
        }
@@ -1859,12 +1896,12 @@ static GSList *make_sug_menu(GtkAspell *gtkaspell)
                        if (curmenu == NULL && count < MENUCOUNT) {
                                gtk_widget_add_accelerator(item, "activate",
                                                           accel,
-                                                          GDK_A + count, 0,
+                                                          GDK_KEY_A + count, 0,
                                                           GTK_ACCEL_LOCKED | 
                                                           GTK_ACCEL_VISIBLE);
                                gtk_widget_add_accelerator(item, "activate", 
                                                           accel,
-                                                          GDK_A + count, 
+                                                          GDK_KEY_A + count, 
                                                           GDK_CONTROL_MASK,
                                                           GTK_ACCEL_LOCKED);
                                }
@@ -2061,8 +2098,8 @@ gboolean gtkaspell_change_dict(GtkAspell *gtkaspell, const gchar *dictionary,
        Dictionary      *dict;       
        GtkAspeller     *gtkaspeller;
 
-       g_return_val_if_fail(gtkaspell, FALSE);
-       g_return_val_if_fail(dictionary, FALSE);
+       cm_return_val_if_fail(gtkaspell, FALSE);
+       cm_return_val_if_fail(dictionary, FALSE);
   
        dict = g_new0(Dictionary, 1);
        
@@ -2117,8 +2154,8 @@ gboolean gtkaspell_change_alt_dict(GtkAspell *gtkaspell, const gchar *alt_dictio
        Dictionary      *dict;       
        GtkAspeller     *gtkaspeller;
 
-       g_return_val_if_fail(gtkaspell, FALSE);
-       g_return_val_if_fail(alt_dictionary, FALSE);
+       cm_return_val_if_fail(gtkaspell, FALSE);
+       cm_return_val_if_fail(alt_dictionary, FALSE);
   
        dict = g_new0(Dictionary, 1);
        if (strrchr(alt_dictionary, '/')) {
@@ -2320,7 +2357,7 @@ static void free_checkers(gpointer elt, gpointer data)
 {
        GtkAspeller *gtkaspeller = elt;
 
-       g_return_if_fail(gtkaspeller);
+       cm_return_if_fail(gtkaspeller);
 
        gtkaspeller_real_delete(gtkaspeller);
 }