comparison src/gtkstatusbox.c @ 12651:a74cb5952db4

[gaim-migrate @ 14992] Activate a GtkSpell on the status box. If your message contains a word that GtkSpell doesn't recognize then it will have red squiggles underneath it FOREVER. Is that going to annoy people? committer: Tailor Script <tailor@pidgin.im>
author Mark Doliner <mark@kingant.net>
date Sun, 25 Dec 2005 01:36:31 +0000
parents 8512c990967b
children 4c50dd655c30
comparison
equal deleted inserted replaced
12650:2926e3c3185e 12651:a74cb5952db4
35 #include "gtksavedstatuses.h" 35 #include "gtksavedstatuses.h"
36 #include "gtkstock.h" 36 #include "gtkstock.h"
37 #include "gtkstatusbox.h" 37 #include "gtkstatusbox.h"
38 #include "gtkutils.h" 38 #include "gtkutils.h"
39 39
40 #ifdef USE_GTKSPELL
41 # include <gtkspell/gtkspell.h>
42 # ifdef _WIN32
43 # include "wspell.h"
44 # endif
45 #endif
46
40 #define TYPING_TIMEOUT 4000 47 #define TYPING_TIMEOUT 4000
41 48
42 static void imhtml_changed_cb(GtkTextBuffer *buffer, void *data); 49 static void imhtml_changed_cb(GtkTextBuffer *buffer, void *data);
43 static void imhtml_format_changed_cb(GtkIMHtml *imhtml, GtkIMHtmlButtons buttons, void *data); 50 static void imhtml_format_changed_cb(GtkIMHtml *imhtml, GtkIMHtmlButtons buttons, void *data);
44 static void remove_typing_cb(GtkGaimStatusBox *box); 51 static void remove_typing_cb(GtkGaimStatusBox *box);
70 PROP_0, 77 PROP_0,
71 PROP_ACCOUNT 78 PROP_ACCOUNT
72 }; 79 };
73 80
74 GtkComboBoxClass *parent_class = NULL; 81 GtkComboBoxClass *parent_class = NULL;
75 82
76 static void gtk_gaim_status_box_class_init (GtkGaimStatusBoxClass *klass); 83 static void gtk_gaim_status_box_class_init (GtkGaimStatusBoxClass *klass);
77 static void gtk_gaim_status_box_init (GtkGaimStatusBox *status_box); 84 static void gtk_gaim_status_box_init (GtkGaimStatusBox *status_box);
78 85
79 GType 86 GType
80 gtk_gaim_status_box_get_type (void) 87 gtk_gaim_status_box_get_type (void)
211 if (statusbox->status_changed_signal) { 218 if (statusbox->status_changed_signal) {
212 gaim_signal_disconnect(gaim_accounts_get_handle(), "account-status-changed", 219 gaim_signal_disconnect(gaim_accounts_get_handle(), "account-status-changed",
213 statusbox, GAIM_CALLBACK(account_status_changed_cb)); 220 statusbox, GAIM_CALLBACK(account_status_changed_cb));
214 statusbox->status_changed_signal = 0; 221 statusbox->status_changed_signal = 0;
215 } 222 }
216 gaim_prefs_disconnect_by_handle(statusbox); 223 gaim_prefs_disconnect_by_handle(statusbox);
217 224
218 G_OBJECT_CLASS(parent_class)->finalize(obj); 225 G_OBJECT_CLASS(parent_class)->finalize(obj);
219 } 226 }
220 227
221 static void 228 static void
225 GtkComboBoxClass *combo_class; 232 GtkComboBoxClass *combo_class;
226 GtkWidgetClass *widget_class; 233 GtkWidgetClass *widget_class;
227 GtkContainerClass *container_class = (GtkContainerClass*)klass; 234 GtkContainerClass *container_class = (GtkContainerClass*)klass;
228 235
229 parent_class = g_type_class_peek_parent(klass); 236 parent_class = g_type_class_peek_parent(klass);
230 237
231 combo_class = (GtkComboBoxClass*)klass; 238 combo_class = (GtkComboBoxClass*)klass;
232 combo_class->changed = gtk_gaim_status_box_changed; 239 combo_class->changed = gtk_gaim_status_box_changed;
233 240
234 widget_class = (GtkWidgetClass*)klass; 241 widget_class = (GtkWidgetClass*)klass;
235 combo_box_size_request = widget_class->size_request; 242 combo_box_size_request = widget_class->size_request;
591 cache_pixbufs(status_box); 598 cache_pixbufs(status_box);
592 gtk_gaim_status_box_regenerate(status_box); 599 gtk_gaim_status_box_regenerate(status_box);
593 update_size(status_box); 600 update_size(status_box);
594 } 601 }
595 602
603 static void
604 spellcheck_prefs_cb(const char *name, GaimPrefType type,
605 gpointer value, gpointer data)
606 {
607 #ifdef USE_GTKSPELL
608 GtkGaimStatusBox *status_box = (GtkGaimStatusBox *)data;
609
610 if (value)
611 gaim_gtk_setup_gtkspell(GTK_TEXT_VIEW(status_box->imhtml));
612 else
613 {
614 GtkSpell *spell;
615 spell = gtkspell_get_from_text_view(GTK_TEXT_VIEW(status_box->imhtml));
616 gtkspell_detach(spell);
617 }
618 #endif
619 }
620
596 #if 0 621 #if 0
597 static gboolean button_released_cb(GtkWidget *widget, GdkEventButton *event, GtkGaimStatusBox *box) 622 static gboolean button_released_cb(GtkWidget *widget, GdkEventButton *event, GtkGaimStatusBox *box)
598 { 623 {
599 624
600 if (event->button != 1) 625 if (event->button != 1)
699 G_CALLBACK(imhtml_format_changed_cb), status_box); 724 G_CALLBACK(imhtml_format_changed_cb), status_box);
700 g_signal_connect(G_OBJECT(status_box->imhtml), "key_press_event", 725 g_signal_connect(G_OBJECT(status_box->imhtml), "key_press_event",
701 G_CALLBACK(imhtml_remove_focus), status_box); 726 G_CALLBACK(imhtml_remove_focus), status_box);
702 g_signal_connect_swapped(G_OBJECT(status_box->imhtml), "message_send", G_CALLBACK(remove_typing_cb), status_box); 727 g_signal_connect_swapped(G_OBJECT(status_box->imhtml), "message_send", G_CALLBACK(remove_typing_cb), status_box);
703 gtk_imhtml_set_editable(GTK_IMHTML(status_box->imhtml), TRUE); 728 gtk_imhtml_set_editable(GTK_IMHTML(status_box->imhtml), TRUE);
729 #ifdef USE_GTKSPELL
730 if (gaim_prefs_get_bool("/gaim/gtk/conversations/spellcheck"))
731 gaim_gtk_setup_gtkspell(GTK_TEXT_VIEW(status_box->imhtml));
732 #endif
704 gtk_widget_set_parent(status_box->vbox, GTK_WIDGET(status_box)); 733 gtk_widget_set_parent(status_box->vbox, GTK_WIDGET(status_box));
705 gtk_widget_set_parent(status_box->toggle_button, GTK_WIDGET(status_box)); 734 gtk_widget_set_parent(status_box->toggle_button, GTK_WIDGET(status_box));
706 GTK_BIN(status_box)->child = status_box->toggle_button; 735 GTK_BIN(status_box)->child = status_box->toggle_button;
707 status_box->sw = gtk_scrolled_window_new(NULL, NULL); 736 status_box->sw = gtk_scrolled_window_new(NULL, NULL);
708 gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(status_box->sw), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC); 737 gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(status_box->sw), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
724 753
725 gaim_prefs_connect_callback(status_box, "/core/savedstatus/current", 754 gaim_prefs_connect_callback(status_box, "/core/savedstatus/current",
726 current_status_pref_changed_cb, status_box); 755 current_status_pref_changed_cb, status_box);
727 gaim_prefs_connect_callback(status_box, "/gaim/gtk/blist/show_buddy_icons", 756 gaim_prefs_connect_callback(status_box, "/gaim/gtk/blist/show_buddy_icons",
728 buddy_list_details_pref_changed_cb, status_box); 757 buddy_list_details_pref_changed_cb, status_box);
729 758 gaim_prefs_connect_callback(status_box, "/gaim/gtk/conversations/spellcheck",
759 spellcheck_prefs_cb, status_box);
730 } 760 }
731 761
732 static void 762 static void
733 gtk_gaim_status_box_size_request(GtkWidget *widget, 763 gtk_gaim_status_box_size_request(GtkWidget *widget,
734 GtkRequisition *requisition) 764 GtkRequisition *requisition)