| Yattm - unified GTK instant-messaging client | ![]() |
| [Generated for version 0.2-17 - Mon Jan 6 19:01:23 GMT+1 2003] |
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.
Defines | |
| #define | GTKSPELL_VERSION "0.3.1" |
Functions | |
| int | gtkspell_start (char *path, char *args[]) |
| void | gtkspell_stop () |
| int | gtkspell_running () |
| void | gtkspell_attach (GtkText *text) |
| void | gtkspell_detach (GtkText *gtktext) |
| void | gtkspell_check_all (GtkText *gtktext) |
| void | gtkspell_uncheck_all (GtkText *gtktext) |
|
|
Definition at line 23 of file gtkspell.h. |
|
|
Definition at line 590 of file gtkspell.c. References button_press_intercept_cb(), entry_delete_cb(), and entry_insert_cb(). Referenced by eb_chat_window_new().
00590 {
00591 gtk_signal_connect(GTK_OBJECT(gtktext), "insert-text",
00592 GTK_SIGNAL_FUNC(entry_insert_cb), NULL);
00593 gtk_signal_connect_after(GTK_OBJECT(gtktext), "delete-text",
00594 GTK_SIGNAL_FUNC(entry_delete_cb), NULL);
00595 gtk_signal_connect(GTK_OBJECT(gtktext), "button-press-event",
00596 GTK_SIGNAL_FUNC(button_press_intercept_cb), NULL);
00597 }
|
|
|
Definition at line 367 of file gtkspell.c. References check_at(), gtkspell_running(), and iswordsep().
00367 {
00368 guint origpos;
00369 guint pos = 0;
00370 guint len;
00371 float adj_value;
00372
00373 if (!gtkspell_running()) return;
00374
00375 len = gtk_text_get_length(gtktext);
00376
00377 adj_value = gtktext->vadj->value;
00378 gtk_text_freeze(gtktext);
00379 origpos = gtk_editable_get_position(GTK_EDITABLE(gtktext));
00380 while (pos < len) {
00381 while (pos < len && iswordsep(GTK_TEXT_INDEX(gtktext, pos)))
00382 pos++;
00383 while (pos < len && !iswordsep(GTK_TEXT_INDEX(gtktext, pos)))
00384 pos++;
00385 if (pos > 0)
00386 check_at(gtktext, pos-1);
00387 }
00388 gtk_text_thaw(gtktext);
00389 gtk_editable_set_position(GTK_EDITABLE(gtktext), origpos);
00390 }
|
|
|
Definition at line 599 of file gtkspell.c. References button_press_intercept_cb(), entry_delete_cb(), entry_insert_cb(), and gtkspell_uncheck_all().
00599 {
00600 gtk_signal_disconnect_by_func(GTK_OBJECT(gtktext),
00601 GTK_SIGNAL_FUNC(entry_insert_cb), NULL);
00602 gtk_signal_disconnect_by_func(GTK_OBJECT(gtktext),
00603 GTK_SIGNAL_FUNC(entry_delete_cb), NULL);
00604 gtk_signal_disconnect_by_func(GTK_OBJECT(gtktext),
00605 GTK_SIGNAL_FUNC(button_press_intercept_cb), NULL);
00606
00607 gtkspell_uncheck_all(gtktext);
00608 }
|
|
|
Definition at line 63 of file gtkspell.c. References spell_pid. Referenced by button_press_intercept_cb(), destroy(), eb_chat_window_new(), entry_delete_cb(), entry_insert_cb(), gtkspell_check_all(), gtkspell_start(), gtkspell_stop(), and sigchld().
00063 {
00064 return (spell_pid > 0);
00065 }
|
|
||||||||||||
|
Definition at line 127 of file gtkspell.c. References BUFSIZE, error_print(), fd_read, fd_write, gtkspell_running(), gtkspell_stop(), readline(), set_up_signal(), signal_set_up, spell_pid, and writetext(). Referenced by eb_chat_window_new().
00127 {
00128 #ifndef __MINGW32__
00129 int fd_error[2];
00130 char buf[BUFSIZE];
00131
00132 if (gtkspell_running()) {
00133 error_print("gtkspell_start called while already running.\n");
00134 gtkspell_stop();
00135 }
00136
00137 if (!signal_set_up) {
00138 set_up_signal();
00139 signal_set_up = 1;
00140 }
00141
00142 pipe(fd_write);
00143 pipe(fd_read);
00144 pipe(fd_error);
00145
00146 spell_pid = fork();
00147 if (spell_pid < 0) {
00148 error_print("fork: %s\n", strerror(errno));
00149 return -1;
00150 } else if (spell_pid == 0) {
00151 dup2(fd_write[0], 0);
00152 dup2(fd_read[1], 1);
00153 dup2(fd_error[1], 2);
00154 close(fd_read[0]);
00155 close(fd_error[0]);
00156 close(fd_write[1]);
00157
00158 if (path == NULL) {
00159 if (execvp(args[0], args) < 0)
00160 error_print("execvp('%s'): %s\n", args[0], strerror(errno));
00161 } else {
00162 if (execv(path, args) < 0)
00163 error_print("execv('%s'): %s\n", path, strerror(errno));
00164 }
00165 /* if we get here, we failed.
00166 * send some text on the pipe to indicate status.
00167 */
00168 write(fd_read[1], "!", 1);
00169
00170 _exit(0);
00171 } else {
00172 /* there are at least two ways to fail:
00173 * - the exec() can fail
00174 * - the exec() can succeed, but the program can dump the help screen
00175 * we must check for both.
00176 */
00177
00178 #if HAVE_POLL_H
00179 struct pollfd fds[2];
00180
00181 fds[0].fd = fd_error[0];
00182 fds[0].events = POLLIN | POLLERR;
00183 fds[1].fd = fd_read[0];
00184 fds[1].events = POLLIN | POLLERR;
00185 if (poll(fds, 2, 2000) <= 0) {
00186 /* FIXME: is this needed? */
00187 error_print("Timed out waiting for spell command.\n");
00188 gtkspell_stop();
00189 return -1;
00190 }
00191
00192
00193 if (fds[0].revents) { /* stderr readable? */
00194 error_print("Spell command printed on stderr -- probably failed.\n");
00195 gtkspell_stop();
00196 return -1;
00197 }
00198
00199 #endif
00200
00201 readline(buf);
00202 /* ispell should print something like this:
00203 * @(#) International Ispell Version 3.1.20 10/10/95
00204 * if it doesn't, it's an error. */
00205 if (buf[0] != '@') {
00206 gtkspell_stop();
00207 return -1;
00208 }
00209 }
00210
00211 /* put ispell into terse mode.
00212 * this makes it not respond on correctly spelled words. */
00213 sprintf(buf, "!\n");
00214 writetext(buf);
00215 #endif
00216 return 0;
00217 }
|
|
|
Definition at line 118 of file gtkspell.c. References gtkspell_running(), and spell_pid. Referenced by destroy(), and gtkspell_start().
00118 {
00119 #ifndef __MINGW32__
00120 if (gtkspell_running()) {
00121 kill(spell_pid, SIGQUIT); /* FIXME: is this the correct signal? */
00122 spell_pid = -1;
00123 }
00124 #endif
00125 }
|
|
|
Definition at line 572 of file gtkspell.c. Referenced by gtkspell_detach().
00572 {
00573 int origpos;
00574 char *text;
00575 float adj_value;
00576
00577 adj_value = gtktext->vadj->value;
00578 gtk_text_freeze(gtktext);
00579 origpos = gtk_editable_get_position(GTK_EDITABLE(gtktext));
00580 text = gtk_editable_get_chars(GTK_EDITABLE(gtktext), 0, -1);
00581 gtk_text_set_point(gtktext, 0);
00582 gtk_text_forward_delete(gtktext, gtk_text_get_length(gtktext));
00583 gtk_text_insert(gtktext, NULL, NULL, NULL, text, strlen(text));
00584 gtk_text_thaw(gtktext);
00585
00586 gtk_editable_set_position(GTK_EDITABLE(gtktext), origpos);
00587 gtk_adjustment_set_value(gtktext->vadj, adj_value);
00588 }
|