Mercurial > pidgin
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) |