2011-11-05 [wwp] 3.7.10cvs72
[claws.git] / src / gtk / gtkaspell.c
index 6957550f07f20032a2ced990061404c2d99c1738..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>
@@ -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;
                }
 
@@ -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;
@@ -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",
@@ -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);
                                }