annotate src/gtkspell.c @ 3655:1861b94f4da1

[gaim-migrate @ 3784] history plugin segfault fix courtesy of jstuart committer: Tailor Script <tailor@pidgin.im>
author Luke Schierer <lschiere@pidgin.im>
date Sat, 12 Oct 2002 18:48:33 +0000
parents 9682c0e022c6
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1117
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1 /* gtkspell - a spell-checking addon for GtkText
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2 * Copyright (c) 2000 Evan Martin.
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
3 * vim: ts=4 sw=4
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
4 * This library is free software; you can redistribute it and/or
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
5 * modify it under the terms of the GNU Lesser General Public
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
6 * License as published by the Free Software Foundation; either
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
7 * version 2 of the License, or (at your option) any later version.
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
8 *
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
9 * This library is distributed in the hope that it will be useful,
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
12 * Lesser General Public License for more details.
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
13 *
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
14 * You should have received a copy of the GNU Lesser General Public
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
15 * License along with this library; if not, write to the Free Software
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
16 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
17 */
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
18
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
19 #include <gtk/gtk.h>
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
20
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
21 #include <sys/types.h>
3630
9682c0e022c6 [gaim-migrate @ 3753]
Rob Flynn <gaim@robflynn.com>
parents: 3252
diff changeset
22
9682c0e022c6 [gaim-migrate @ 3753]
Rob Flynn <gaim@robflynn.com>
parents: 3252
diff changeset
23 #ifndef _WIN32
1117
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
24 #include <sys/wait.h>
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
25 #include <sys/time.h>
3630
9682c0e022c6 [gaim-migrate @ 3753]
Rob Flynn <gaim@robflynn.com>
parents: 3252
diff changeset
26 #include <unistd.h>
9682c0e022c6 [gaim-migrate @ 3753]
Rob Flynn <gaim@robflynn.com>
parents: 3252
diff changeset
27 #else
9682c0e022c6 [gaim-migrate @ 3753]
Rob Flynn <gaim@robflynn.com>
parents: 3252
diff changeset
28 #include <io.h>
9682c0e022c6 [gaim-migrate @ 3753]
Rob Flynn <gaim@robflynn.com>
parents: 3252
diff changeset
29 #endif
9682c0e022c6 [gaim-migrate @ 3753]
Rob Flynn <gaim@robflynn.com>
parents: 3252
diff changeset
30
1117
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
31 #include <stdio.h>
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
32 #include <signal.h>
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
33 #include <ctype.h>
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
34 #include <string.h>
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
35 #include <stdlib.h>
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
36 #include <errno.h>
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
37
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
38 /* TODO:
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
39 * handle dictionary changes
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
40 * asynchronous lookups
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
41 */
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
42
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
43 /* size of the text buffer used in various word-processing routines. */
2454
64e20158271e [gaim-migrate @ 2467]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1815
diff changeset
44 /* #define BUFSIZE 1024 */
1117
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
45 /* number of suggestions to display on each menu. */
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
46 #define MENUCOUNT 10
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
47 #define BUGEMAIL "gtkspell-devel@lists.sourceforge.net"
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
48
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
49 /* because we keep only one copy of the spell program running,
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
50 * all ispell-related variables can be static.
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
51 */
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
52 static pid_t spell_pid = -1;
1496
d33bf6548543 [gaim-migrate @ 1506]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1467
diff changeset
53 static int fd_write[2] = {0}, fd_read[2] = {0};
1117
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
54
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
55 /* FIXME? */
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
56 static GdkColor highlight = { 0, 255*256, 0, 0 };
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
57
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
58 static void entry_insert_cb(GtkText *gtktext,
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
59 gchar *newtext, guint len, guint *ppos, gpointer d);
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
60
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
61 int gtkspell_running() {
3105
da324fe688b3 [gaim-migrate @ 3119]
Sean Egan <seanegan@gmail.com>
parents: 2727
diff changeset
62 return (spell_pid > 0? spell_pid : 0);
da324fe688b3 [gaim-migrate @ 3119]
Sean Egan <seanegan@gmail.com>
parents: 2727
diff changeset
63 }
da324fe688b3 [gaim-migrate @ 3119]
Sean Egan <seanegan@gmail.com>
parents: 2727
diff changeset
64
da324fe688b3 [gaim-migrate @ 3119]
Sean Egan <seanegan@gmail.com>
parents: 2727
diff changeset
65 /*
da324fe688b3 [gaim-migrate @ 3119]
Sean Egan <seanegan@gmail.com>
parents: 2727
diff changeset
66 * Set to "gtkspell not running" status
da324fe688b3 [gaim-migrate @ 3119]
Sean Egan <seanegan@gmail.com>
parents: 2727
diff changeset
67 *
da324fe688b3 [gaim-migrate @ 3119]
Sean Egan <seanegan@gmail.com>
parents: 2727
diff changeset
68 * May seem a bit silly, but it allows us to keep the file-global
da324fe688b3 [gaim-migrate @ 3119]
Sean Egan <seanegan@gmail.com>
parents: 2727
diff changeset
69 * variable from going program-global. And if we need to do
da324fe688b3 [gaim-migrate @ 3119]
Sean Egan <seanegan@gmail.com>
parents: 2727
diff changeset
70 * something else additional later, well...
da324fe688b3 [gaim-migrate @ 3119]
Sean Egan <seanegan@gmail.com>
parents: 2727
diff changeset
71 */
da324fe688b3 [gaim-migrate @ 3119]
Sean Egan <seanegan@gmail.com>
parents: 2727
diff changeset
72 void gtkspell_notrunning() {
da324fe688b3 [gaim-migrate @ 3119]
Sean Egan <seanegan@gmail.com>
parents: 2727
diff changeset
73 spell_pid = 0;
1117
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
74 }
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
75
1794
60b3fd819cce [gaim-migrate @ 1804]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1496
diff changeset
76 /*
1117
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
77 static void error_print(const char *fmt, ...) {
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
78 va_list ap;
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
79 va_start(ap, fmt);
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
80 fprintf(stderr, "gtkspell: ");
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
81 vfprintf(stderr, fmt, ap);
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
82 va_end(ap);
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
83 }
1794
60b3fd819cce [gaim-migrate @ 1804]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1496
diff changeset
84 */
1815
f15d449b3167 [gaim-migrate @ 1825]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1794
diff changeset
85 extern void debug_printf(char *, ...);
1794
60b3fd819cce [gaim-migrate @ 1804]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1496
diff changeset
86 #define error_print debug_printf
1117
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
87
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
88 /* functions to interface with pipe */
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
89 static void writetext(char *text) {
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
90 write(fd_write[1], text, strlen(text));
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
91 }
2454
64e20158271e [gaim-migrate @ 2467]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1815
diff changeset
92
64e20158271e [gaim-migrate @ 2467]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1815
diff changeset
93 static char *readline() {
2670
f6f2871d77c2 [gaim-migrate @ 2683]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2517
diff changeset
94 static gchar *buf = NULL;
f6f2871d77c2 [gaim-migrate @ 2683]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2517
diff changeset
95 char *end;
f6f2871d77c2 [gaim-migrate @ 2683]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2517
diff changeset
96 char *ret;
f6f2871d77c2 [gaim-migrate @ 2683]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2517
diff changeset
97 char *tmp;
f6f2871d77c2 [gaim-migrate @ 2683]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2517
diff changeset
98
f6f2871d77c2 [gaim-migrate @ 2683]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2517
diff changeset
99 /* read until we get a newline */
f6f2871d77c2 [gaim-migrate @ 2683]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2517
diff changeset
100 while (!buf || (end = strchr(buf, '\n')) == NULL) {
f6f2871d77c2 [gaim-migrate @ 2683]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2517
diff changeset
101 char space[1024];
f6f2871d77c2 [gaim-migrate @ 2683]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2517
diff changeset
102 int ret = read(fd_read[0], space, 1023);
2727
4c6ad3d9db3f [gaim-migrate @ 2740]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2725
diff changeset
103 if (ret <= 0) {
2454
64e20158271e [gaim-migrate @ 2467]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1815
diff changeset
104 error_print("read: %s\n", strerror(errno));
64e20158271e [gaim-migrate @ 2467]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1815
diff changeset
105 return NULL;
64e20158271e [gaim-migrate @ 2467]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1815
diff changeset
106 }
2670
f6f2871d77c2 [gaim-migrate @ 2683]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2517
diff changeset
107 space[ret] = 0;
f6f2871d77c2 [gaim-migrate @ 2683]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2517
diff changeset
108 if (buf) {
f6f2871d77c2 [gaim-migrate @ 2683]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2517
diff changeset
109 tmp = buf;
f6f2871d77c2 [gaim-migrate @ 2683]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2517
diff changeset
110 buf = g_strconcat(tmp, space, NULL);
f6f2871d77c2 [gaim-migrate @ 2683]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2517
diff changeset
111 g_free(tmp);
f6f2871d77c2 [gaim-migrate @ 2683]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2517
diff changeset
112 } else
f6f2871d77c2 [gaim-migrate @ 2683]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2517
diff changeset
113 buf = g_strdup(space);
f6f2871d77c2 [gaim-migrate @ 2683]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2517
diff changeset
114 }
f6f2871d77c2 [gaim-migrate @ 2683]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2517
diff changeset
115
f6f2871d77c2 [gaim-migrate @ 2683]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2517
diff changeset
116 /* we got a newline, and end points to it.
f6f2871d77c2 [gaim-migrate @ 2683]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2517
diff changeset
117 * copy out the data, reset buf, return */
2454
64e20158271e [gaim-migrate @ 2467]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1815
diff changeset
118
2670
f6f2871d77c2 [gaim-migrate @ 2683]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2517
diff changeset
119 if (end[1] == 0) {
f6f2871d77c2 [gaim-migrate @ 2683]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2517
diff changeset
120 /* only one line is in the buffer */
f6f2871d77c2 [gaim-migrate @ 2683]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2517
diff changeset
121 ret = buf;
f6f2871d77c2 [gaim-migrate @ 2683]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2517
diff changeset
122 buf = NULL;
f6f2871d77c2 [gaim-migrate @ 2683]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2517
diff changeset
123 return ret;
f6f2871d77c2 [gaim-migrate @ 2683]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2517
diff changeset
124 }
f6f2871d77c2 [gaim-migrate @ 2683]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2517
diff changeset
125
f6f2871d77c2 [gaim-migrate @ 2683]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2517
diff changeset
126 ret = g_strndup(buf, end - buf + 1);
f6f2871d77c2 [gaim-migrate @ 2683]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2517
diff changeset
127 tmp = buf;
f6f2871d77c2 [gaim-migrate @ 2683]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2517
diff changeset
128 buf = g_strdup(end + 1);
f6f2871d77c2 [gaim-migrate @ 2683]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2517
diff changeset
129 g_free(tmp);
f6f2871d77c2 [gaim-migrate @ 2683]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2517
diff changeset
130
f6f2871d77c2 [gaim-migrate @ 2683]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2517
diff changeset
131 return ret;
2454
64e20158271e [gaim-migrate @ 2467]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1815
diff changeset
132 }
64e20158271e [gaim-migrate @ 2467]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1815
diff changeset
133
64e20158271e [gaim-migrate @ 2467]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1815
diff changeset
134 static char *readresponse() {
64e20158271e [gaim-migrate @ 2467]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1815
diff changeset
135 char *r1, *r2, *result;
64e20158271e [gaim-migrate @ 2467]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1815
diff changeset
136
64e20158271e [gaim-migrate @ 2467]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1815
diff changeset
137 r1 = readline();
64e20158271e [gaim-migrate @ 2467]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1815
diff changeset
138 if (!r1)
64e20158271e [gaim-migrate @ 2467]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1815
diff changeset
139 return NULL;
64e20158271e [gaim-migrate @ 2467]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1815
diff changeset
140 if (*r1 == '\n') {
64e20158271e [gaim-migrate @ 2467]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1815
diff changeset
141 g_strchomp(r1);
64e20158271e [gaim-migrate @ 2467]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1815
diff changeset
142 return r1;
64e20158271e [gaim-migrate @ 2467]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1815
diff changeset
143 }
64e20158271e [gaim-migrate @ 2467]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1815
diff changeset
144 r2 = readline();
64e20158271e [gaim-migrate @ 2467]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1815
diff changeset
145 if (!r2) {
64e20158271e [gaim-migrate @ 2467]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1815
diff changeset
146 g_free(r1);
64e20158271e [gaim-migrate @ 2467]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1815
diff changeset
147 return NULL;
1117
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
148 }
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
149
2454
64e20158271e [gaim-migrate @ 2467]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1815
diff changeset
150 while (r2 && *r2 != '\n') {
64e20158271e [gaim-migrate @ 2467]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1815
diff changeset
151 char *tmp = r1;
64e20158271e [gaim-migrate @ 2467]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1815
diff changeset
152 r1 = g_strconcat(tmp, r2, NULL);
64e20158271e [gaim-migrate @ 2467]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1815
diff changeset
153 g_free(tmp);
64e20158271e [gaim-migrate @ 2467]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1815
diff changeset
154 g_free(r2);
64e20158271e [gaim-migrate @ 2467]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1815
diff changeset
155 r2 = readline();
1117
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
156 }
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
157
2454
64e20158271e [gaim-migrate @ 2467]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1815
diff changeset
158 if (!r2) {
64e20158271e [gaim-migrate @ 2467]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1815
diff changeset
159 g_free(r1);
64e20158271e [gaim-migrate @ 2467]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1815
diff changeset
160 return NULL;
64e20158271e [gaim-migrate @ 2467]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1815
diff changeset
161 }
1117
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
162
2454
64e20158271e [gaim-migrate @ 2467]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1815
diff changeset
163 result = g_strconcat(r1, r2, NULL);
64e20158271e [gaim-migrate @ 2467]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1815
diff changeset
164 g_free(r1);
64e20158271e [gaim-migrate @ 2467]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1815
diff changeset
165 g_free(r2);
64e20158271e [gaim-migrate @ 2467]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1815
diff changeset
166 g_strchomp(result);
64e20158271e [gaim-migrate @ 2467]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1815
diff changeset
167 return result;
1117
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
168 }
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
169
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
170
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
171 void gtkspell_stop() {
3630
9682c0e022c6 [gaim-migrate @ 3753]
Rob Flynn <gaim@robflynn.com>
parents: 3252
diff changeset
172 #ifndef _WIN32
1117
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
173 if (gtkspell_running()) {
1415
3dfd2a83fb5e [gaim-migrate @ 1425]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1127
diff changeset
174 kill(spell_pid, SIGHUP);
1496
d33bf6548543 [gaim-migrate @ 1506]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1467
diff changeset
175 spell_pid = 0;
d33bf6548543 [gaim-migrate @ 1506]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1467
diff changeset
176 close(fd_read[0]);
d33bf6548543 [gaim-migrate @ 1506]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1467
diff changeset
177 close(fd_write[1]);
1117
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
178 }
3630
9682c0e022c6 [gaim-migrate @ 3753]
Rob Flynn <gaim@robflynn.com>
parents: 3252
diff changeset
179 #endif
1117
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
180 }
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
181
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
182 int gtkspell_start(char *path, char * args[]) {
3630
9682c0e022c6 [gaim-migrate @ 3753]
Rob Flynn <gaim@robflynn.com>
parents: 3252
diff changeset
183 #ifndef _WIN32
1117
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
184 int fd_error[2];
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
185
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
186 if (gtkspell_running()) {
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
187 error_print("gtkspell_start called while already running.\n");
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
188 gtkspell_stop();
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
189 }
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
190
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
191 pipe(fd_write);
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
192 pipe(fd_read);
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
193 pipe(fd_error);
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
194
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
195 spell_pid = fork();
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
196 if (spell_pid < 0) {
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
197 error_print("fork: %s\n", strerror(errno));
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
198 return -1;
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
199 } else if (spell_pid == 0) {
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
200 dup2(fd_write[0], 0);
1496
d33bf6548543 [gaim-migrate @ 1506]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1467
diff changeset
201 close(fd_write[0]);
d33bf6548543 [gaim-migrate @ 1506]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1467
diff changeset
202 close(fd_write[1]);
d33bf6548543 [gaim-migrate @ 1506]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1467
diff changeset
203
1117
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
204 dup2(fd_read[1], 1);
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
205 close(fd_read[0]);
1496
d33bf6548543 [gaim-migrate @ 1506]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1467
diff changeset
206 close(fd_read[1]);
d33bf6548543 [gaim-migrate @ 1506]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1467
diff changeset
207
d33bf6548543 [gaim-migrate @ 1506]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1467
diff changeset
208 dup2(fd_error[1], 2);
1117
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
209 close(fd_error[0]);
1496
d33bf6548543 [gaim-migrate @ 1506]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1467
diff changeset
210 close(fd_error[1]);
1117
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
211
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
212 if (path == NULL) {
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
213 if (execvp(args[0], args) < 0)
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
214 error_print("execvp('%s'): %s\n", args[0], strerror(errno));
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
215 } else {
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
216 if (execv(path, args) < 0)
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
217 error_print("execv('%s'): %s\n", path, strerror(errno));
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
218 }
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
219 /* if we get here, we failed.
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
220 * send some text on the pipe to indicate status.
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
221 */
1496
d33bf6548543 [gaim-migrate @ 1506]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1467
diff changeset
222 write(0, "!", 1); /* stdout _is_ the pipe. */
1117
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
223
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
224 _exit(0);
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
225 } else {
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
226 /* there are at least two ways to fail:
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
227 * - the exec() can fail
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
228 * - the exec() can succeed, but the program can dump the help screen
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
229 * we must check for both.
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
230 */
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
231 fd_set rfds;
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
232 struct timeval tv;
2454
64e20158271e [gaim-migrate @ 2467]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1815
diff changeset
233 char *buf;
1117
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
234
1496
d33bf6548543 [gaim-migrate @ 1506]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1467
diff changeset
235 close(fd_write[0]);
d33bf6548543 [gaim-migrate @ 1506]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1467
diff changeset
236 close(fd_read[1]);
d33bf6548543 [gaim-migrate @ 1506]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1467
diff changeset
237
1117
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
238 FD_ZERO(&rfds);
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
239 FD_SET(fd_error[0], &rfds);
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
240 FD_SET(fd_read[0], &rfds);
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
241 tv.tv_sec = 2;
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
242 tv.tv_usec = 0;
1496
d33bf6548543 [gaim-migrate @ 1506]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1467
diff changeset
243
1117
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
244 if (select(MAX(fd_error[0], fd_read[0])+1,
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
245 &rfds, NULL, NULL, &tv) < 0) {
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
246 /* FIXME: is this needed? */
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
247 error_print("Timed out waiting for spell command.\n");
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
248 gtkspell_stop();
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
249 return -1;
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
250 }
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
251
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
252 if (FD_ISSET(fd_error[0], &rfds)) { /* stderr readable? */
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
253 error_print("Spell command printed on stderr -- probably failed.\n");
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
254 gtkspell_stop();
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
255 return -1;
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
256 }
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
257
1496
d33bf6548543 [gaim-migrate @ 1506]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1467
diff changeset
258 /* we're done with stderr, now. */
d33bf6548543 [gaim-migrate @ 1506]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1467
diff changeset
259 close(fd_error[0]);
d33bf6548543 [gaim-migrate @ 1506]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1467
diff changeset
260 close(fd_error[1]);
d33bf6548543 [gaim-migrate @ 1506]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1467
diff changeset
261
1117
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
262 /* otherwise, fd_read[0] is set. */
2454
64e20158271e [gaim-migrate @ 2467]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1815
diff changeset
263 buf = readline();
1117
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
264
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
265 /* ispell should print something like this:
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
266 * @(#) International Ispell Version 3.1.20 10/10/95
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
267 * if it doesn't, it's an error. */
2454
64e20158271e [gaim-migrate @ 2467]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1815
diff changeset
268 if (!buf || buf[0] != '@') {
64e20158271e [gaim-migrate @ 2467]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1815
diff changeset
269 if (buf)
64e20158271e [gaim-migrate @ 2467]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1815
diff changeset
270 g_free(buf);
1117
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
271 gtkspell_stop();
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
272 return -1;
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
273 }
2454
64e20158271e [gaim-migrate @ 2467]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1815
diff changeset
274 g_free(buf);
1117
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
275 }
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
276
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
277 /* put ispell into terse mode.
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
278 * this makes it not respond on correctly spelled words. */
2454
64e20158271e [gaim-migrate @ 2467]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1815
diff changeset
279 writetext("!\n");
3630
9682c0e022c6 [gaim-migrate @ 3753]
Rob Flynn <gaim@robflynn.com>
parents: 3252
diff changeset
280 #endif /*!_WIN32*/
1117
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
281 return 0;
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
282 }
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
283
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
284 static GList* misspelled_suggest(char *word) {
2454
64e20158271e [gaim-migrate @ 2467]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1815
diff changeset
285 char *buf;
1117
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
286 char *newword;
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
287 GList *l = NULL;
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
288 int count;
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
289
2461
0edec72bc72f [gaim-migrate @ 2474]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2457
diff changeset
290 if (!word)
0edec72bc72f [gaim-migrate @ 2474]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2457
diff changeset
291 return NULL;
0edec72bc72f [gaim-migrate @ 2474]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2457
diff changeset
292
2454
64e20158271e [gaim-migrate @ 2467]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1815
diff changeset
293 buf = g_strdup_printf("^%s\n", word); /* guard against ispell control chars */
1117
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
294 writetext(buf);
2454
64e20158271e [gaim-migrate @ 2467]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1815
diff changeset
295 g_free(buf);
64e20158271e [gaim-migrate @ 2467]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1815
diff changeset
296 buf = readresponse();
64e20158271e [gaim-migrate @ 2467]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1815
diff changeset
297
64e20158271e [gaim-migrate @ 2467]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1815
diff changeset
298 if (!buf)
64e20158271e [gaim-migrate @ 2467]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1815
diff changeset
299 return NULL;
1117
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
300
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
301 switch (buf[0]) { /* first char is ispell command. */
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
302 case 0: /* no response: word is ok. */
2454
64e20158271e [gaim-migrate @ 2467]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1815
diff changeset
303 g_free(buf);
1117
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
304 return NULL;
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
305 case '&': /* misspelled, with suggestions */
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
306 /* & <orig> <count> <ofs>: <miss>, <miss>, <guess>, ... */
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
307 strtok(buf, " "); /* & */
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
308 newword = strtok(NULL, " "); /* orig */
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
309 l = g_list_append(l, g_strdup(newword));
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
310 newword = strtok(NULL, " "); /* count */
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
311 count = atoi(newword);
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
312 strtok(NULL, " "); /* ofs: */
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
313
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
314 while ((newword = strtok(NULL, ",")) != NULL) {
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
315 int len = strlen(newword);
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
316 if (newword[len-1] == ' ' || newword[len-1] == '\n')
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
317 newword[len-1] = 0;
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
318 if (count == 0) {
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
319 g_list_append(l, NULL); /* signal the "suggestions" */
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
320 }
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
321 /* add it to the list, skipping the initial space. */
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
322 l = g_list_append(l,
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
323 g_strdup(newword[0] == ' ' ? newword+1 : newword));
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
324
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
325 count--;
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
326 }
2454
64e20158271e [gaim-migrate @ 2467]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1815
diff changeset
327 g_free(buf);
1117
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
328 return l;
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
329
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
330 case '#': /* misspelled, no suggestions */
1467
7f7857c5036e [gaim-migrate @ 1477]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1415
diff changeset
331 case '?': /* ispell is guessing. */
1117
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
332 /* # <orig> <ofs> */
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
333 strtok(buf, " "); /* & */
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
334 newword = strtok(NULL, " "); /* orig */
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
335 l = g_list_append(l, g_strdup(newword));
2454
64e20158271e [gaim-migrate @ 2467]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1815
diff changeset
336 g_free(buf);
1117
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
337 return l;
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
338 default:
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
339 error_print("Unsupported spell command '%c'.\n"
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
340 "This is a bug; mail " BUGEMAIL " about it.\n", buf[0]);
1467
7f7857c5036e [gaim-migrate @ 1477]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1415
diff changeset
341 error_print("Input [%s]\nOutput [%s]\n", word, buf);
7f7857c5036e [gaim-migrate @ 1477]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1415
diff changeset
342
1117
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
343 }
2454
64e20158271e [gaim-migrate @ 2467]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1815
diff changeset
344 g_free(buf);
1117
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
345 return NULL;
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
346 }
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
347
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
348 static int misspelled_test(char *word) {
2454
64e20158271e [gaim-migrate @ 2467]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1815
diff changeset
349 char *buf;
2517
9cee43e4903d [gaim-migrate @ 2530]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2461
diff changeset
350
9cee43e4903d [gaim-migrate @ 2530]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2461
diff changeset
351 if (word == NULL)
9cee43e4903d [gaim-migrate @ 2530]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2461
diff changeset
352 return 0;
9cee43e4903d [gaim-migrate @ 2530]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2461
diff changeset
353
2454
64e20158271e [gaim-migrate @ 2467]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1815
diff changeset
354 buf = g_strdup_printf("^%s\n", word); /* guard against ispell control chars */
1117
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
355 writetext(buf);
2454
64e20158271e [gaim-migrate @ 2467]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1815
diff changeset
356 g_free(buf);
64e20158271e [gaim-migrate @ 2467]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1815
diff changeset
357 buf = readresponse();
64e20158271e [gaim-migrate @ 2467]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1815
diff changeset
358
64e20158271e [gaim-migrate @ 2467]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1815
diff changeset
359 if (!buf)
64e20158271e [gaim-migrate @ 2467]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1815
diff changeset
360 return 0;
1117
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
361
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
362 if (buf[0] == 0) {
2454
64e20158271e [gaim-migrate @ 2467]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1815
diff changeset
363 g_free(buf);
1117
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
364 return 0;
1467
7f7857c5036e [gaim-migrate @ 1477]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1415
diff changeset
365 } else if (buf[0] == '&' || buf[0] == '#' || buf[0] == '?') {
2454
64e20158271e [gaim-migrate @ 2467]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1815
diff changeset
366 g_free(buf);
1117
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
367 return 1;
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
368 }
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
369
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
370 error_print("Unsupported spell command '%c'.\n"
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
371 "This is a bug; mail " BUGEMAIL " about it.\n", buf[0]);
1467
7f7857c5036e [gaim-migrate @ 1477]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1415
diff changeset
372 error_print("Input [%s]\nOutput [%s]\n", word, buf);
2454
64e20158271e [gaim-migrate @ 2467]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1815
diff changeset
373 g_free(buf);
1117
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
374 return -1;
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
375 }
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
376
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
377 static gboolean iswordsep(char c) {
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
378 return !isalpha(c) && c != '\'';
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
379 }
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
380
2454
64e20158271e [gaim-migrate @ 2467]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1815
diff changeset
381 static gboolean get_word_from_pos(GtkText* gtktext, int pos, char** buf,
1117
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
382 int *pstart, int *pend) {
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
383 gint start, end;
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
384
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
385 if (iswordsep(GTK_TEXT_INDEX(gtktext, pos))) return FALSE;
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
386
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
387 for (start = pos; start >= 0; --start) {
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
388 if (iswordsep(GTK_TEXT_INDEX(gtktext, start))) break;
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
389 }
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
390 start++;
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
391
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
392 for (end = pos; end <= gtk_text_get_length(gtktext); end++) {
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
393 if (iswordsep(GTK_TEXT_INDEX(gtktext, end))) break;
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
394 }
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
395
2457
e6b9246b33fd [gaim-migrate @ 2470]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2456
diff changeset
396 if (buf && (end - start + 1 > 0)) {
e6b9246b33fd [gaim-migrate @ 2470]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2456
diff changeset
397 *buf = g_malloc(end - start + 1);
1117
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
398 for (pos = start; pos < end; pos++)
2457
e6b9246b33fd [gaim-migrate @ 2470]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2456
diff changeset
399 (*buf)[pos-start] = GTK_TEXT_INDEX(gtktext, pos);
e6b9246b33fd [gaim-migrate @ 2470]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2456
diff changeset
400 (*buf)[pos-start] = 0;
1117
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
401 }
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
402
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
403 if (pstart) *pstart = start;
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
404 if (pend) *pend = end;
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
405
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
406 return TRUE;
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
407 }
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
408
2454
64e20158271e [gaim-migrate @ 2467]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1815
diff changeset
409 static gboolean get_curword(GtkText* gtktext, char** buf,
1117
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
410 int *pstart, int *pend) {
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
411 int pos = gtk_editable_get_position(GTK_EDITABLE(gtktext));
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
412 return get_word_from_pos(gtktext, pos, buf, pstart, pend);
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
413 }
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
414
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
415 static void change_color(GtkText *gtktext,
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
416 int start, int end, GdkColor *color) {
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
417 char *newtext = gtk_editable_get_chars(GTK_EDITABLE(gtktext), start, end);
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
418 gtk_text_freeze(gtktext);
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
419 gtk_signal_handler_block_by_func(GTK_OBJECT(gtktext),
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
420 GTK_SIGNAL_FUNC(entry_insert_cb), NULL);
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
421
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
422 gtk_text_set_point(gtktext, start);
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
423 gtk_text_forward_delete(gtktext, end-start);
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
424
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
425 if (newtext && end-start > 0)
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
426 gtk_text_insert(gtktext, NULL, color, NULL, newtext, end-start);
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
427
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
428 gtk_signal_handler_unblock_by_func(GTK_OBJECT(gtktext),
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
429 GTK_SIGNAL_FUNC(entry_insert_cb), NULL);
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
430 gtk_text_thaw(gtktext);
1415
3dfd2a83fb5e [gaim-migrate @ 1425]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1127
diff changeset
431 g_free(newtext);
1117
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
432 }
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
433
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
434 static gboolean check_at(GtkText *gtktext, int from_pos) {
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
435 int start, end;
2454
64e20158271e [gaim-migrate @ 2467]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1815
diff changeset
436 char *buf = NULL;
1117
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
437
2454
64e20158271e [gaim-migrate @ 2467]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1815
diff changeset
438 if (!get_word_from_pos(gtktext, from_pos, &buf, &start, &end)) {
64e20158271e [gaim-migrate @ 2467]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1815
diff changeset
439 if (buf)
64e20158271e [gaim-migrate @ 2467]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1815
diff changeset
440 g_free(buf);
1117
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
441 return FALSE;
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
442 }
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
443
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
444 if (misspelled_test(buf)) {
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
445 if (highlight.pixel == 0) {
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
446 /* add an entry for the highlight in the color map. */
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
447 GdkColormap *gc = gtk_widget_get_colormap(GTK_WIDGET(gtktext));
2725
f3c094e78609 [gaim-migrate @ 2738]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2670
diff changeset
448 gdk_colormap_alloc_color(gc, &highlight, FALSE, TRUE);
1117
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
449 }
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
450 change_color(gtktext, start, end, &highlight);
2454
64e20158271e [gaim-migrate @ 2467]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1815
diff changeset
451 if (buf)
64e20158271e [gaim-migrate @ 2467]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1815
diff changeset
452 g_free(buf);
1117
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
453 return TRUE;
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
454 } else {
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
455 change_color(gtktext, start, end,
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
456 &(GTK_WIDGET(gtktext)->style->fg[0]));
2454
64e20158271e [gaim-migrate @ 2467]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1815
diff changeset
457 if (buf)
64e20158271e [gaim-migrate @ 2467]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1815
diff changeset
458 g_free(buf);
1117
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
459 return FALSE;
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
460 }
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
461 }
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
462
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
463 void gtkspell_check_all(GtkText *gtktext) {
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
464 guint origpos;
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
465 guint pos = 0;
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
466 guint len;
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
467 float adj_value;
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
468
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
469 if (!gtkspell_running()) return;
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
470
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
471 len = gtk_text_get_length(gtktext);
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
472
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
473 adj_value = gtktext->vadj->value;
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
474 gtk_text_freeze(gtktext);
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
475 origpos = gtk_editable_get_position(GTK_EDITABLE(gtktext));
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
476 while (pos < len) {
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
477 while (pos < len && iswordsep(GTK_TEXT_INDEX(gtktext, pos)))
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
478 pos++;
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
479 while (pos < len && !iswordsep(GTK_TEXT_INDEX(gtktext, pos)))
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
480 pos++;
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
481 if (pos > 0)
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
482 check_at(gtktext, pos-1);
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
483 }
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
484 gtk_text_thaw(gtktext);
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
485 gtk_editable_set_position(GTK_EDITABLE(gtktext), origpos);
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
486 }
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
487
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
488 static void entry_insert_cb(GtkText *gtktext,
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
489 gchar *newtext, guint len, guint *ppos, gpointer d) {
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
490 int origpos;
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
491
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
492 if (!gtkspell_running()) return;
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
493
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
494 gtk_signal_handler_block_by_func(GTK_OBJECT(gtktext),
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
495 GTK_SIGNAL_FUNC(entry_insert_cb),
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
496 NULL);
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
497 gtk_text_insert(GTK_TEXT(gtktext), NULL,
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
498 &(GTK_WIDGET(gtktext)->style->fg[0]), NULL, newtext, len);
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
499 gtk_signal_handler_unblock_by_func(GTK_OBJECT(gtktext),
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
500 GTK_SIGNAL_FUNC(entry_insert_cb),
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
501 NULL);
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
502 gtk_signal_emit_stop_by_name(GTK_OBJECT(gtktext), "insert-text");
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
503 *ppos += len;
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
504
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
505 origpos = gtk_editable_get_position(GTK_EDITABLE(gtktext));
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
506
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
507 if (iswordsep(newtext[0])) {
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
508 /* did we just end a word? */
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
509 if (*ppos >= 2) check_at(gtktext, *ppos-2);
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
510
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
511 /* did we just split a word? */
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
512 if (*ppos < gtk_text_get_length(gtktext))
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
513 check_at(gtktext, *ppos+1);
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
514 } else {
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
515 /* check as they type, *except* if they're typing at the end (the most
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
516 * common case.
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
517 */
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
518 if (*ppos < gtk_text_get_length(gtktext) &&
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
519 !iswordsep(GTK_TEXT_INDEX(gtktext, *ppos)))
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
520 check_at(gtktext, *ppos-1);
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
521 }
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
522
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
523 gtk_editable_set_position(GTK_EDITABLE(gtktext), origpos);
1496
d33bf6548543 [gaim-migrate @ 1506]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1467
diff changeset
524 gtk_editable_select_region(GTK_EDITABLE(gtktext), origpos, origpos);
1117
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
525 }
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
526
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
527 static void entry_delete_cb(GtkText *gtktext,
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
528 gint start, gint end, gpointer d) {
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
529 int origpos;
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
530
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
531 if (!gtkspell_running()) return;
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
532
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
533 origpos = gtk_editable_get_position(GTK_EDITABLE(gtktext));
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
534 check_at(gtktext, start-1);
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
535 gtk_editable_set_position(GTK_EDITABLE(gtktext), origpos);
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
536 gtk_editable_select_region(GTK_EDITABLE(gtktext), origpos, origpos);
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
537 /* this is to *UNDO* the selection, in case they were holding shift
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
538 * while hitting backspace. */
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
539 }
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
540
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
541 static void replace_word(GtkWidget *w, gpointer d) {
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
542 int start, end;
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
543 char *newword;
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
544
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
545 /* we don't save their position,
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
546 * because the cursor is moved by the click. */
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
547
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
548 gtk_text_freeze(GTK_TEXT(d));
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
549
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
550 gtk_label_get(GTK_LABEL(GTK_BIN(w)->child), &newword);
2454
64e20158271e [gaim-migrate @ 2467]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1815
diff changeset
551 get_curword(GTK_TEXT(d), NULL, &start, &end);
1117
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
552
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
553 gtk_text_set_point(GTK_TEXT(d), end);
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
554 gtk_text_backward_delete(GTK_TEXT(d), end-start);
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
555 gtk_text_insert(GTK_TEXT(d), NULL, NULL, NULL, newword, strlen(newword));
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
556
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
557 gtk_text_thaw(GTK_TEXT(d));
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
558 }
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
559
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
560 static GtkMenu *make_menu(GList *l, GtkText *gtktext) {
3252
0f8e4835d938 [gaim-migrate @ 3270]
Jim Seymour <jseymour>
parents: 3105
diff changeset
561 static GtkWidget *menu = NULL;
0f8e4835d938 [gaim-migrate @ 3270]
Jim Seymour <jseymour>
parents: 3105
diff changeset
562 GtkWidget *item;
1117
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
563 char *caption;
3252
0f8e4835d938 [gaim-migrate @ 3270]
Jim Seymour <jseymour>
parents: 3105
diff changeset
564
0f8e4835d938 [gaim-migrate @ 3270]
Jim Seymour <jseymour>
parents: 3105
diff changeset
565 /*
0f8e4835d938 [gaim-migrate @ 3270]
Jim Seymour <jseymour>
parents: 3105
diff changeset
566 * If a menu already exists, destroy it before creating a new one,
0f8e4835d938 [gaim-migrate @ 3270]
Jim Seymour <jseymour>
parents: 3105
diff changeset
567 * thus freeing-up the memory it occupied.
0f8e4835d938 [gaim-migrate @ 3270]
Jim Seymour <jseymour>
parents: 3105
diff changeset
568 */
0f8e4835d938 [gaim-migrate @ 3270]
Jim Seymour <jseymour>
parents: 3105
diff changeset
569 if(menu)
0f8e4835d938 [gaim-migrate @ 3270]
Jim Seymour <jseymour>
parents: 3105
diff changeset
570 gtk_widget_destroy(menu);
0f8e4835d938 [gaim-migrate @ 3270]
Jim Seymour <jseymour>
parents: 3105
diff changeset
571
1117
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
572 menu = gtk_menu_new(); {
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
573 caption = g_strdup_printf("Not in dictionary: %s", (char*)l->data);
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
574 item = gtk_menu_item_new_with_label(caption);
2454
64e20158271e [gaim-migrate @ 2467]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1815
diff changeset
575 g_free(caption);
1117
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
576 /* I'd like to make it so this item is never selectable, like
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
577 * the menu titles in the GNOME panel... unfortunately, the GNOME
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
578 * panel creates their own custom widget to do this! */
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
579 gtk_widget_show(item);
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
580 gtk_menu_append(GTK_MENU(menu), item);
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
581
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
582 item = gtk_menu_item_new();
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
583 gtk_widget_show(item);
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
584 gtk_menu_append(GTK_MENU(menu), item);
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
585
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
586 l = l->next;
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
587 if (l == NULL) {
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
588 item = gtk_menu_item_new_with_label("(no suggestions)");
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
589 gtk_widget_show(item);
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
590 gtk_menu_append(GTK_MENU(menu), item);
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
591 } else {
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
592 GtkWidget *curmenu = menu;
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
593 int count = 0;
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
594 do {
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
595 if (l->data == NULL && l->next != NULL) {
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
596 count = 0;
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
597 curmenu = gtk_menu_new();
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
598 item = gtk_menu_item_new_with_label("Other Possibilities...");
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
599 gtk_widget_show(item);
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
600 gtk_menu_item_set_submenu(GTK_MENU_ITEM(item), curmenu);
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
601 gtk_menu_append(GTK_MENU(curmenu), item);
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
602 l = l->next;
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
603 } else if (count > MENUCOUNT) {
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
604 count -= MENUCOUNT;
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
605 item = gtk_menu_item_new_with_label("More...");
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
606 gtk_widget_show(item);
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
607 gtk_menu_append(GTK_MENU(curmenu), item);
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
608 curmenu = gtk_menu_new();
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
609 gtk_menu_item_set_submenu(GTK_MENU_ITEM(item), curmenu);
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
610 }
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
611 item = gtk_menu_item_new_with_label((char*)l->data);
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
612 gtk_signal_connect(GTK_OBJECT(item), "activate",
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
613 GTK_SIGNAL_FUNC(replace_word), gtktext);
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
614 gtk_widget_show(item);
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
615 gtk_menu_append(GTK_MENU(curmenu), item);
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
616 count++;
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
617 } while ((l = l->next) != NULL);
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
618 }
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
619 }
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
620 return GTK_MENU(menu);
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
621 }
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
622
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
623 static void popup_menu(GtkText *gtktext, GdkEventButton *eb) {
2454
64e20158271e [gaim-migrate @ 2467]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1815
diff changeset
624 char *buf = NULL;
1117
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
625 GList *list, *l;
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
626
2454
64e20158271e [gaim-migrate @ 2467]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1815
diff changeset
627 get_curword(gtktext, &buf, NULL, NULL);
1117
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
628
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
629 list = misspelled_suggest(buf);
2454
64e20158271e [gaim-migrate @ 2467]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1815
diff changeset
630 if (buf)
64e20158271e [gaim-migrate @ 2467]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1815
diff changeset
631 g_free(buf);
1117
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
632 if (list != NULL) {
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
633 gtk_menu_popup(make_menu(list, gtktext), NULL, NULL, NULL, NULL,
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
634 eb->button, eb->time);
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
635 for (l = list; l != NULL; l = l->next)
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
636 g_free(l->data);
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
637 g_list_free(list);
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
638 }
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
639 }
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
640
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
641 /* ok, this is pretty wacky:
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
642 * we need to let the right-mouse-click go through, so it moves the cursor,
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
643 * but we *can't* let it go through, because GtkText interprets rightclicks as
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
644 * weird selection modifiers.
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
645 *
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
646 * so what do we do? forge rightclicks as leftclicks, then popup the menu.
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
647 * HACK HACK HACK.
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
648 */
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
649 static gint button_press_intercept_cb(GtkText *gtktext, GdkEvent *e, gpointer d) {
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
650 GdkEventButton *eb;
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
651 gboolean retval;
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
652
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
653 if (!gtkspell_running()) return FALSE;
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
654
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
655 if (e->type != GDK_BUTTON_PRESS) return FALSE;
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
656 eb = (GdkEventButton*) e;
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
657
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
658 if (eb->button != 3) return FALSE;
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
659
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
660 /* forge the leftclick */
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
661 eb->button = 1;
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
662
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
663 gtk_signal_handler_block_by_func(GTK_OBJECT(gtktext),
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
664 GTK_SIGNAL_FUNC(button_press_intercept_cb), d);
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
665 gtk_signal_emit_by_name(GTK_OBJECT(gtktext), "button-press-event",
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
666 e, &retval);
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
667 gtk_signal_handler_unblock_by_func(GTK_OBJECT(gtktext),
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
668 GTK_SIGNAL_FUNC(button_press_intercept_cb), d);
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
669 gtk_signal_emit_stop_by_name(GTK_OBJECT(gtktext), "button-press-event");
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
670
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
671 /* now do the menu wackiness */
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
672 popup_menu(gtktext, eb);
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
673 return TRUE;
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
674 }
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
675
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
676 void gtkspell_uncheck_all(GtkText *gtktext) {
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
677 int origpos;
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
678 char *text;
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
679 float adj_value;
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
680
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
681 adj_value = gtktext->vadj->value;
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
682 gtk_text_freeze(gtktext);
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
683 origpos = gtk_editable_get_position(GTK_EDITABLE(gtktext));
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
684 text = gtk_editable_get_chars(GTK_EDITABLE(gtktext), 0, -1);
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
685 gtk_text_set_point(gtktext, 0);
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
686 gtk_text_forward_delete(gtktext, gtk_text_get_length(gtktext));
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
687 gtk_text_insert(gtktext, NULL, NULL, NULL, text, strlen(text));
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
688 gtk_text_thaw(gtktext);
1794
60b3fd819cce [gaim-migrate @ 1804]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1496
diff changeset
689 g_free(text);
1117
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
690
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
691 gtk_editable_set_position(GTK_EDITABLE(gtktext), origpos);
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
692 gtk_adjustment_set_value(gtktext->vadj, adj_value);
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
693 }
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
694
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
695 void gtkspell_attach(GtkText *gtktext) {
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
696 gtk_signal_connect(GTK_OBJECT(gtktext), "insert-text",
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
697 GTK_SIGNAL_FUNC(entry_insert_cb), NULL);
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
698 gtk_signal_connect_after(GTK_OBJECT(gtktext), "delete-text",
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
699 GTK_SIGNAL_FUNC(entry_delete_cb), NULL);
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
700 gtk_signal_connect(GTK_OBJECT(gtktext), "button-press-event",
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
701 GTK_SIGNAL_FUNC(button_press_intercept_cb), NULL);
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
702 }
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
703
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
704 void gtkspell_detach(GtkText *gtktext) {
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
705 gtk_signal_disconnect_by_func(GTK_OBJECT(gtktext),
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
706 GTK_SIGNAL_FUNC(entry_insert_cb), NULL);
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
707 gtk_signal_disconnect_by_func(GTK_OBJECT(gtktext),
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
708 GTK_SIGNAL_FUNC(entry_delete_cb), NULL);
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
709 gtk_signal_disconnect_by_func(GTK_OBJECT(gtktext),
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
710 GTK_SIGNAL_FUNC(button_press_intercept_cb), NULL);
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
711
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
712 gtkspell_uncheck_all(gtktext);
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
713 }
f3e0f41beddb [gaim-migrate @ 1127]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
714