src/gtkutils.c

changeset 12067
11fb53722956
parent 12063
9747fa9c89eb
child 12080
2aaca2265a51
equal deleted inserted replaced
12066:58ee6aa007c8 12067:11fb53722956
145 imhtml = gtk_imhtml_new(NULL, NULL); 145 imhtml = gtk_imhtml_new(NULL, NULL);
146 gtk_imhtml_set_editable(GTK_IMHTML(imhtml), editable); 146 gtk_imhtml_set_editable(GTK_IMHTML(imhtml), editable);
147 gtk_imhtml_set_format_functions(GTK_IMHTML(imhtml), GTK_IMHTML_ALL ^ GTK_IMHTML_IMAGE); 147 gtk_imhtml_set_format_functions(GTK_IMHTML(imhtml), GTK_IMHTML_ALL ^ GTK_IMHTML_IMAGE);
148 gtk_text_view_set_wrap_mode(GTK_TEXT_VIEW(imhtml), GTK_WRAP_WORD_CHAR); 148 gtk_text_view_set_wrap_mode(GTK_TEXT_VIEW(imhtml), GTK_WRAP_WORD_CHAR);
149 if (editable && gaim_prefs_get_bool("/gaim/gtk/conversations/spellcheck")) 149 if (editable && gaim_prefs_get_bool("/gaim/gtk/conversations/spellcheck"))
150 gaim_gtk_gtkspell_setup(GTK_TEXT_VIEW(imhtml)); 150 gaim_gtk_setup_gtkspell(GTK_TEXT_VIEW(imhtml));
151 gtk_widget_show(imhtml); 151 gtk_widget_show(imhtml);
152 152
153 if (editable) { 153 if (editable) {
154 gtk_imhtmltoolbar_attach(GTK_IMHTMLTOOLBAR(toolbar), imhtml); 154 gtk_imhtmltoolbar_attach(GTK_IMHTMLTOOLBAR(toolbar), imhtml);
155 gtk_imhtmltoolbar_associate_smileys(GTK_IMHTMLTOOLBAR(toolbar), "default"); 155 gtk_imhtmltoolbar_associate_smileys(GTK_IMHTMLTOOLBAR(toolbar), "default");
895 895
896 g_free(tmp); 896 g_free(tmp);
897 return buf; 897 return buf;
898 } 898 }
899 899
900 void
901 gaim_gtk_setup_gtkspell(GtkTextView *textview)
902 {
900 #ifdef USE_GTKSPELL 903 #ifdef USE_GTKSPELL
901 static GtkSpell* (*gtkspell_get_from_text_view_ptr)(GtkTextView *view);
902 static void (*gtkspell_detach_ptr)(GtkSpell *spell);
903 static GtkSpell* (*gtkspell_new_attach_ptr)(GtkTextView *view, const gchar *lang, GError **error);
904 static int gtkspell_available = -1; /* -1 unknown, 0 false, 1 true */
905
906 #define GTKSPELL_SONAME "libgtkspell." G_MODULE_SUFFIX ".0"
907
908 static void
909 setup_gtkspell()
910 {
911 #if GLIB_CHECK_VERSION(2,3,3)
912 GModule *handle = g_module_open(GTKSPELL_SONAME, G_MODULE_BIND_LAZY | G_MODULE_BIND_LOCAL);
913 #else
914 GModule *handle = g_module_open(GTKSPELL_SONAME, G_MODULE_BIND_LAZY);
915 #endif
916
917 if (handle != NULL)
918 {
919 gpointer ptr; /* squash GCC strict aliasing warnings */
920
921 g_module_symbol(handle, "gtkspell_new_attach", &ptr);
922 gtkspell_new_attach_ptr = ptr;
923
924 g_module_symbol(handle, "gtkspell_detach", &ptr);
925 gtkspell_detach_ptr = ptr;
926
927 g_module_symbol(handle, "gtkspell_get_from_text_view", &ptr);
928 gtkspell_get_from_text_view_ptr = ptr;
929
930 gtkspell_available = TRUE;
931 }
932 else
933 {
934 gaim_debug_warning("gtkspell", "Failed to load %s: %s\n", GTKSPELL_SONAME, g_module_error());
935 gtkspell_available = FALSE;
936 }
937 }
938
939 gboolean
940 gaim_gtk_gtkspell_is_available()
941 {
942 if (gtkspell_available == -1)
943 setup_gtkspell();
944
945 return gtkspell_available;
946 }
947
948 void
949 gaim_gtk_gtkspell_setup(GtkTextView *textview)
950 {
951 GError *error = NULL; 904 GError *error = NULL;
952 char *locale = NULL; 905 char *locale = NULL;
953 906
954 g_return_if_fail(textview != NULL); 907 g_return_if_fail(textview != NULL);
955 g_return_if_fail(GTK_IS_TEXT_VIEW(textview)); 908 g_return_if_fail(GTK_IS_TEXT_VIEW(textview));
956 909
957 if (!gaim_gtk_gtkspell_is_available()) 910 if (gtkspell_new_attach(textview, locale, &error) == NULL && error)
958 return;
959
960 if (gtkspell_new_attach_ptr(textview, locale, &error) == NULL && error)
961 { 911 {
962 gaim_debug_warning("gtkspell", "Failed to setup GtkSpell: %s\n", error->message); 912 gaim_debug_warning("gtkspell", "Failed to setup GtkSpell: %s\n",
913 error->message);
963 g_error_free(error); 914 g_error_free(error);
964 } 915 }
965 } 916 #endif /* USE_GTKSPELL */
966 917 }
967 void
968 gaim_gtk_gtkspell_unsetup(GtkTextView *textview)
969 {
970 GtkSpell *spell;
971
972 if (!gtkspell_available)
973 return;
974
975 spell = gtkspell_get_from_text_view_ptr(textview);
976 gtkspell_detach_ptr(spell);
977 }
978
979 #else /* !USE_GTKSPELL */
980
981 gboolean
982 gaim_gtk_gtkspell_is_available()
983 {
984 return FALSE;
985 }
986
987 void
988 gaim_gtk_gtkspell_setup(GtkTextView *textview)
989 {
990 }
991
992 void
993 gaim_gtk_gtkspell_unsetup(GtkTextView *textview)
994 {
995 }
996
997 #endif /* !USE_GTKSPELL */
998 918
999 void 919 void
1000 gaim_gtk_save_accels_cb(GtkAccelGroup *accel_group, guint arg1, 920 gaim_gtk_save_accels_cb(GtkAccelGroup *accel_group, guint arg1,
1001 GdkModifierType arg2, GClosure *arg3, 921 GdkModifierType arg2, GClosure *arg3,
1002 gpointer data) 922 gpointer data)

mercurial