src/gtkconv.c

changeset 5545
a8b1a1262402
parent 5484
6465b2fa6c4a
child 5546
bad75481a8c6
equal deleted inserted replaced
5544:5b623486acb2 5545:a8b1a1262402
43 #include "gtkimhtml.h" 43 #include "gtkimhtml.h"
44 #include "dnd-hints.h" 44 #include "dnd-hints.h"
45 #include "sound.h" 45 #include "sound.h"
46 #include "gtkblist.h" 46 #include "gtkblist.h"
47 #include "notify.h" 47 #include "notify.h"
48 #include "prefs.h"
48 49
49 #ifdef _WIN32 50 #ifdef _WIN32
50 #include "win32dep.h" 51 #include "win32dep.h"
51 #include "wspell.h" 52 #include "wspell.h"
52 #endif 53 #endif
400 } 401 }
401 402
402 buf2 = g_malloc(limit); 403 buf2 = g_malloc(limit);
403 404
404 if (gc && gc->flags & OPT_CONN_HTML) { 405 if (gc && gc->flags & OPT_CONN_HTML) {
405 if (font_options & OPT_FONT_BOLD) { 406 if (gaim_prefs_get_bool("/gaim/gtk/conversations/send_bold")) {
406 g_snprintf(buf2, limit, "<B>%s</B>", buf); 407 g_snprintf(buf2, limit, "<B>%s</B>", buf);
407 strcpy(buf, buf2); 408 strcpy(buf, buf2);
408 } 409 }
409 410
410 if (font_options & OPT_FONT_ITALIC) { 411 if (gaim_prefs_get_bool("/gaim/gtk/conversations/send_italic")) {
411 g_snprintf(buf2, limit, "<I>%s</I>", buf); 412 g_snprintf(buf2, limit, "<I>%s</I>", buf);
412 strcpy(buf, buf2); 413 strcpy(buf, buf2);
413 } 414 }
414 415
415 if (font_options & OPT_FONT_UNDERLINE) { 416 if (gaim_prefs_get_bool("/gaim/gtk/conversations/send_underline")) {
416 g_snprintf(buf2, limit, "<U>%s</U>", buf); 417 g_snprintf(buf2, limit, "<U>%s</U>", buf);
417 strcpy(buf, buf2); 418 strcpy(buf, buf2);
418 } 419 }
419 420
420 if (font_options & OPT_FONT_STRIKE) { 421 if (gaim_prefs_get_bool("/gaim/gtk/conversations/send_strikethrough")) {
421 g_snprintf(buf2, limit, "<STRIKE>%s</STRIKE>", buf); 422 g_snprintf(buf2, limit, "<STRIKE>%s</STRIKE>", buf);
422 strcpy(buf, buf2); 423 strcpy(buf, buf2);
423 } 424 }
424 425
425 if ((font_options & OPT_FONT_FACE) || gtkconv->has_font) { 426 if (gaim_prefs_get_bool("/gaim/gtk/conversations/use_custom_font") ||
427 gtkconv->has_font) {
428
426 g_snprintf(buf2, limit, 429 g_snprintf(buf2, limit,
427 "<FONT FACE=\"%s\">%s</FONT>", gtkconv->fontface, buf); 430 "<FONT FACE=\"%s\">%s</FONT>", gtkconv->fontface, buf);
428 strcpy(buf, buf2); 431 strcpy(buf, buf2);
429 } 432 }
430 433
431 if (font_options & OPT_FONT_SIZE) { 434 if (gaim_prefs_get_bool("/gaim/gtk/conversations/use_custom_size")) {
432 g_snprintf(buf2, limit, 435 g_snprintf(buf2, limit,
433 "<FONT SIZE=\"%d\">%s</FONT>", fontsize, buf); 436 "<FONT SIZE=\"%d\">%s</FONT>", fontsize, buf);
434 strcpy(buf, buf2); 437 strcpy(buf, buf2);
435 } 438 }
436 439
437 if (font_options & OPT_FONT_FGCOL) { 440 if (gaim_prefs_get_bool("/gaim/gtk/conversations/use_custom_fgcolor")) {
438 g_snprintf(buf2, limit, 441 g_snprintf(buf2, limit,
439 "<FONT COLOR=\"#%02X%02X%02X\">%s</FONT>", 442 "<FONT COLOR=\"#%02X%02X%02X\">%s</FONT>",
440 gtkconv->fg_color.red / 256, 443 gtkconv->fg_color.red / 256,
441 gtkconv->fg_color.green / 256, 444 gtkconv->fg_color.green / 256,
442 gtkconv->fg_color.blue / 256, buf); 445 gtkconv->fg_color.blue / 256, buf);
443 strcpy(buf, buf2); 446 strcpy(buf, buf2);
444 } 447 }
445 448
446 if (font_options & OPT_FONT_BGCOL) { 449 if (gaim_prefs_get_bool("/gaim/gtk/conversations/use_custom_bgcolor")) {
447 g_snprintf(buf2, limit, 450 g_snprintf(buf2, limit,
448 "<BODY BGCOLOR=\"#%02X%02X%02X\">%s</BODY>", 451 "<BODY BGCOLOR=\"#%02X%02X%02X\">%s</BODY>",
449 gtkconv->bg_color.red / 256, 452 gtkconv->bg_color.red / 256,
450 gtkconv->bg_color.green / 256, 453 gtkconv->bg_color.green / 256,
451 gtkconv->bg_color.blue / 256, buf); 454 gtkconv->bg_color.blue / 256, buf);
457 460
458 if (gaim_conversation_get_type(conv) == GAIM_CONV_IM) 461 if (gaim_conversation_get_type(conv) == GAIM_CONV_IM)
459 gaim_im_send(GAIM_IM(conv), buf); 462 gaim_im_send(GAIM_IM(conv), buf);
460 else 463 else
461 gaim_chat_send(GAIM_CHAT(conv), buf); 464 gaim_chat_send(GAIM_CHAT(conv), buf);
465
466 if (gaim_prefs_get_bool("/gaim/gtk/conversations/hide_on_send"))
467 gaim_window_hide(gaim_conversation_get_window(conv));
462 468
463 g_free(buf); 469 g_free(buf);
464 470
465 gtk_text_buffer_set_text(gtkconv->entry_buffer, "", -1); 471 gtk_text_buffer_set_text(gtkconv->entry_buffer, "", -1);
466 } 472 }
980 gtkconv = GAIM_GTK_CONVERSATION(conv); 986 gtkconv = GAIM_GTK_CONVERSATION(conv);
981 win = gaim_conversation_get_window(conv); 987 win = gaim_conversation_get_window(conv);
982 gtkwin = GAIM_GTK_WINDOW(win); 988 gtkwin = GAIM_GTK_WINDOW(win);
983 989
984 if (event->keyval == GDK_Escape) { 990 if (event->keyval == GDK_Escape) {
985 if (convo_options & OPT_CONVO_ESC_CAN_CLOSE) { 991 if (gaim_prefs_get_bool("/gaim/gtk/conversations/escape_closes")) {
986 g_signal_stop_emission_by_name(G_OBJECT(entry), "key_press_event"); 992 g_signal_stop_emission_by_name(G_OBJECT(entry), "key_press_event");
987 gaim_conversation_destroy(conv); 993 gaim_conversation_destroy(conv);
988 } 994 }
989 } 995 }
990 else if (event->keyval == GDK_Page_Up) { 996 else if (event->keyval == GDK_Page_Up) {
997 g_signal_stop_emission_by_name(G_OBJECT(entry), "key_press_event"); 1003 g_signal_stop_emission_by_name(G_OBJECT(entry), "key_press_event");
998 1004
999 if (!(event->state & GDK_CONTROL_MASK)) 1005 if (!(event->state & GDK_CONTROL_MASK))
1000 gtk_imhtml_page_down(GTK_IMHTML(gtkconv->imhtml)); 1006 gtk_imhtml_page_down(GTK_IMHTML(gtkconv->imhtml));
1001 } 1007 }
1002 else if ((event->keyval == GDK_F2) && 1008 else if (event->keyval == GDK_F2 &&
1003 (convo_options & OPT_CONVO_F2_TOGGLES)) { 1009 gaim_prefs_get_bool("/gaim/gtk/conversations/f2_toggles_timestamps")) {
1004 gtk_imhtml_show_comments(GTK_IMHTML(gtkconv->imhtml), 1010 gtk_imhtml_show_comments(GTK_IMHTML(gtkconv->imhtml),
1005 !GTK_IMHTML(gtkconv->imhtml)->comments); 1011 !GTK_IMHTML(gtkconv->imhtml)->comments);
1006 } 1012 }
1007 else if (event->keyval == GDK_Return || event->keyval == GDK_KP_Enter) { 1013 else if (event->keyval == GDK_Return || event->keyval == GDK_KP_Enter) {
1008 if ((event->state & GDK_CONTROL_MASK) && 1014 if ((event->state & GDK_CONTROL_MASK) &&
1009 (convo_options & OPT_CONVO_CTL_ENTER)) { 1015 gaim_prefs_get_bool("/gaim/gtk/conversations/ctrl_enter_sends")) {
1010 1016
1011 send_cb(NULL, conv); 1017 send_cb(NULL, conv);
1012 g_signal_stop_emission_by_name(G_OBJECT(entry), "key_press_event"); 1018 g_signal_stop_emission_by_name(G_OBJECT(entry), "key_press_event");
1013 1019
1014 return TRUE; 1020 return TRUE;
1015 } 1021 }
1016 else if (!(event->state & (GDK_SHIFT_MASK | GDK_CONTROL_MASK)) && 1022 else if (!(event->state & (GDK_SHIFT_MASK | GDK_CONTROL_MASK)) &&
1017 (convo_options & OPT_CONVO_ENTER_SENDS)) { 1023 gaim_prefs_get_bool("/gaim/gtk/conversations/enter_sends")) {
1018 1024
1019 send_cb(NULL, conv); 1025 send_cb(NULL, conv);
1020 g_signal_stop_emission_by_name(G_OBJECT(entry), "key_press_event"); 1026 g_signal_stop_emission_by_name(G_OBJECT(entry), "key_press_event");
1021 1027
1022 return TRUE; 1028 return TRUE;
1072 } 1078 }
1073 1079
1074 break; 1080 break;
1075 } 1081 }
1076 1082
1077 if (convo_options & OPT_CONVO_CTL_CHARS) { 1083 if (gaim_prefs_get_bool("/gaim/gtk/conversations/html_shortcuts")) {
1078 switch (event->keyval) { 1084 switch (event->keyval) {
1079 case 'i': 1085 case 'i':
1080 case 'I': 1086 case 'I':
1081 set_toggle(gtkconv->toolbar.italic, 1087 set_toggle(gtkconv->toolbar.italic,
1082 !gtk_toggle_button_get_active( 1088 !gtk_toggle_button_get_active(
1140 "key_press_event"); 1146 "key_press_event");
1141 break; 1147 break;
1142 } 1148 }
1143 } 1149 }
1144 1150
1145 if (convo_options & OPT_CONVO_CTL_SMILEYS) { 1151 if (gaim_prefs_get_bool("/gaim/gtk/conversations/smiley_shortcuts")) {
1146 char buf[7]; 1152 char buf[7];
1147 1153
1148 *buf = '\0'; 1154 *buf = '\0';
1149 1155
1150 switch (event->keyval) { 1156 switch (event->keyval) {
1177 if (event->keyval == 'l') { 1183 if (event->keyval == 'l') {
1178 gtk_imhtml_clear(GTK_IMHTML(gtkconv->imhtml)); 1184 gtk_imhtml_clear(GTK_IMHTML(gtkconv->imhtml));
1179 g_string_free(conv->history, TRUE); 1185 g_string_free(conv->history, TRUE);
1180 conv->history = g_string_new(""); 1186 conv->history = g_string_new("");
1181 } 1187 }
1182 else if ((event->keyval == 'w') && 1188 else if (event->keyval == 'w' &&
1183 (convo_options & OPT_CONVO_CTL_W_CLOSES)) { 1189 gaim_prefs_get_bool("/gaim/gtk/conversations/ctrl_w_closes")) {
1184 1190
1185 g_signal_stop_emission_by_name(G_OBJECT(entry), "key_press_event"); 1191 g_signal_stop_emission_by_name(G_OBJECT(entry), "key_press_event");
1186 gaim_conversation_destroy(conv); 1192 gaim_conversation_destroy(conv);
1187 return TRUE; 1193 return TRUE;
1188 } 1194 }
1214 g_signal_stop_emission_by_name(G_OBJECT(entry), "key_press_event"); 1220 g_signal_stop_emission_by_name(G_OBJECT(entry), "key_press_event");
1215 1221
1216 return TRUE; 1222 return TRUE;
1217 } 1223 }
1218 } 1224 }
1219 else if ((event->keyval == GDK_Tab) && 1225 else if (event->keyval == GDK_Tab &&
1220 gaim_conversation_get_type(conv) == GAIM_CONV_CHAT && 1226 gaim_conversation_get_type(conv) == GAIM_CONV_CHAT &&
1221 (chat_options & OPT_CHAT_TAB_COMPLETE)) { 1227 gaim_prefs_get_bool("/gaim/gtk/conversations/chat/tab_completion")) {
1222 1228
1223 tab_complete(conv); 1229 tab_complete(conv);
1224 1230
1225 g_signal_stop_emission_by_name(G_OBJECT(entry), "key_press_event"); 1231 g_signal_stop_emission_by_name(G_OBJECT(entry), "key_press_event");
1226 1232
1277 struct gaim_conversation *conv = (struct gaim_conversation *)user_data; 1283 struct gaim_conversation *conv = (struct gaim_conversation *)user_data;
1278 1284
1279 if (conv == NULL) 1285 if (conv == NULL)
1280 return; 1286 return;
1281 1287
1282 if (misc_options & OPT_MISC_STEALTH_TYPING) 1288 if (!gaim_prefs_get_bool("/core/conversations/im/send_typing"))
1283 return; 1289 return;
1284 1290
1285 got_typing_keypress(conv, (gtk_text_iter_is_start(position) && 1291 got_typing_keypress(conv, (gtk_text_iter_is_start(position) &&
1286 gtk_text_iter_is_end(position))); 1292 gtk_text_iter_is_end(position)));
1287 } 1293 }
1294 struct gaim_im *im; 1300 struct gaim_im *im;
1295 1301
1296 if (conv == NULL) 1302 if (conv == NULL)
1297 return; 1303 return;
1298 1304
1299 if (misc_options & OPT_MISC_STEALTH_TYPING) 1305 if (!gaim_prefs_get_bool("/core/conversations/im/send_typing"))
1300 return; 1306 return;
1301 1307
1302 im = GAIM_IM(conv); 1308 im = GAIM_IM(conv);
1303 1309
1304 if (gtk_text_iter_is_start(start_pos) && gtk_text_iter_is_end(end_pos)) { 1310 if (gtk_text_iter_is_start(start_pos) && gtk_text_iter_is_end(end_pos)) {
2350 g_free(text); 2356 g_free(text);
2351 2357
2352 entered = gtk_text_buffer_get_text(gtkconv->entry_buffer, &word_start, 2358 entered = gtk_text_buffer_get_text(gtkconv->entry_buffer, &word_start,
2353 &cursor, FALSE); 2359 &cursor, FALSE);
2354 2360
2355 if (chat_options & OPT_CHAT_OLD_STYLE_TAB) { 2361 if (gaim_prefs_get_bool("/gaim/gtk/conversations/chat/old_tab_complete")) {
2356 if (strlen(entered) >= 2 && 2362 if (strlen(entered) >= 2 &&
2357 !strncmp(": ", entered + strlen(entered) - 2, 2)) { 2363 !strncmp(": ", entered + strlen(entered) - 2, 2)) {
2358 2364
2359 entered[strlen(entered) - 2] = 0; 2365 entered[strlen(entered) - 2] = 0;
2360 } 2366 }
2389 } 2395 }
2390 2396
2391 /* if we're here, it's a possible completion */ 2397 /* if we're here, it's a possible completion */
2392 2398
2393 /* if we're doing old-style, just fill in the completion */ 2399 /* if we're doing old-style, just fill in the completion */
2394 if (chat_options & OPT_CHAT_OLD_STYLE_TAB) { 2400 if (gaim_prefs_get_bool("/gaim/gtk/conversations/chat/old_tab_complete")) {
2395 gtk_text_buffer_delete(gtkconv->entry_buffer, 2401 gtk_text_buffer_delete(gtkconv->entry_buffer,
2396 &word_start, &cursor); 2402 &word_start, &cursor);
2397 2403
2398 if (strlen(nick) == strlen(entered)) { 2404 if (strlen(nick) == strlen(entered)) {
2399 nicks = (nicks->next 2405 nicks = (nicks->next
3004 /* Setup gtkihmtml. */ 3010 /* Setup gtkihmtml. */
3005 gtkconv->imhtml = gtk_imhtml_new(NULL, NULL); 3011 gtkconv->imhtml = gtk_imhtml_new(NULL, NULL);
3006 gtk_container_add(GTK_CONTAINER(gtkconv->sw), gtkconv->imhtml); 3012 gtk_container_add(GTK_CONTAINER(gtkconv->sw), gtkconv->imhtml);
3007 3013
3008 gtk_imhtml_show_comments(GTK_IMHTML(gtkconv->imhtml), 3014 gtk_imhtml_show_comments(GTK_IMHTML(gtkconv->imhtml),
3009 (convo_options & OPT_CONVO_SHOW_TIME)); 3015 gaim_prefs_get_bool("/gaim/gtk/conversations/show_timestamps"));
3010 3016
3011 g_signal_connect_after(G_OBJECT(gtkconv->imhtml), "button_press_event", 3017 g_signal_connect_after(G_OBJECT(gtkconv->imhtml), "button_press_event",
3012 G_CALLBACK(entry_stop_rclick_cb), NULL); 3018 G_CALLBACK(entry_stop_rclick_cb), NULL);
3013 3019
3014 gaim_setup_imhtml(gtkconv->imhtml); 3020 gaim_setup_imhtml(gtkconv->imhtml);
3140 G_CALLBACK(entry_stop_rclick_cb), NULL); 3146 G_CALLBACK(entry_stop_rclick_cb), NULL);
3141 g_signal_connect(G_OBJECT(gtkconv->entry), "key_press_event", 3147 g_signal_connect(G_OBJECT(gtkconv->entry), "key_press_event",
3142 G_CALLBACK(entry_key_pressed_cb_2), conv); 3148 G_CALLBACK(entry_key_pressed_cb_2), conv);
3143 3149
3144 #ifdef USE_GTKSPELL 3150 #ifdef USE_GTKSPELL
3145 if (convo_options & OPT_CONVO_CHECK_SPELLING) 3151 if (gaim_prefs_get_bool("/gaim/gtk/conversations/spellcheck"))
3146 gtkspell_new_attach(GTK_TEXT_VIEW(gtkconv->entry), NULL, NULL); 3152 gtkspell_new_attach(GTK_TEXT_VIEW(gtkconv->entry), NULL, NULL);
3147 #endif 3153 #endif
3148 3154
3149 gtk_container_add(GTK_CONTAINER(frame), GTK_WIDGET(gtkconv->entry)); 3155 gtk_container_add(GTK_CONTAINER(frame), GTK_WIDGET(gtkconv->entry));
3150 gtk_widget_show(gtkconv->entry); 3156 gtk_widget_show(gtkconv->entry);
3197 3203
3198 g_signal_connect_after(G_OBJECT(gtkconv->imhtml), "button_press_event", 3204 g_signal_connect_after(G_OBJECT(gtkconv->imhtml), "button_press_event",
3199 G_CALLBACK(entry_stop_rclick_cb), NULL); 3205 G_CALLBACK(entry_stop_rclick_cb), NULL);
3200 3206
3201 gtk_imhtml_show_comments(GTK_IMHTML(gtkconv->imhtml), 3207 gtk_imhtml_show_comments(GTK_IMHTML(gtkconv->imhtml),
3202 (convo_options & OPT_CONVO_SHOW_TIME)); 3208 gaim_prefs_get_bool("/gaim/gtk/conversations/show_timestamps"));
3203 3209
3204 gaim_setup_imhtml(gtkconv->imhtml); 3210 gaim_setup_imhtml(gtkconv->imhtml);
3205 3211
3206 gtk_widget_show(gtkconv->imhtml); 3212 gtk_widget_show(gtkconv->imhtml);
3207 3213
3241 G_CALLBACK(insert_text_cb), conv); 3247 G_CALLBACK(insert_text_cb), conv);
3242 g_signal_connect(G_OBJECT(gtkconv->entry_buffer), "delete_range", 3248 g_signal_connect(G_OBJECT(gtkconv->entry_buffer), "delete_range",
3243 G_CALLBACK(delete_text_cb), conv); 3249 G_CALLBACK(delete_text_cb), conv);
3244 3250
3245 #ifdef USE_GTKSPELL 3251 #ifdef USE_GTKSPELL
3246 if (convo_options & OPT_CONVO_CHECK_SPELLING) 3252 if (gaim_prefs_get_bool("/gaim/gtk/conversations/spellcheck"))
3247 gtkspell_new_attach(GTK_TEXT_VIEW(gtkconv->entry), NULL, NULL); 3253 gtkspell_new_attach(GTK_TEXT_VIEW(gtkconv->entry), NULL, NULL);
3248 #endif 3254 #endif
3249 3255
3250 gtk_container_add(GTK_CONTAINER(frame), GTK_WIDGET(gtkconv->entry)); 3256 gtk_container_add(GTK_CONTAINER(frame), GTK_WIDGET(gtkconv->entry));
3251 gtk_widget_show(gtkconv->entry); 3257 gtk_widget_show(gtkconv->entry);
3369 G_CALLBACK(close_win_cb), win); 3375 G_CALLBACK(close_win_cb), win);
3370 3376
3371 /* Create the notebook. */ 3377 /* Create the notebook. */
3372 gtkwin->notebook = gtk_notebook_new(); 3378 gtkwin->notebook = gtk_notebook_new();
3373 3379
3374 pos = ((im_options & OPT_IM_SIDE_TAB) 3380 pos = gaim_prefs_get_int("/gaim/gtk/conversations/tab_side");
3375 ? ((im_options & OPT_IM_BR_TAB) ? GTK_POS_RIGHT : GTK_POS_LEFT)
3376 : ((im_options & OPT_IM_BR_TAB) ? GTK_POS_BOTTOM : GTK_POS_TOP));
3377 3381
3378 #if 0 3382 #if 0
3379 gtk_notebook_set_tab_hborder(GTK_NOTEBOOK(gtkwin->notebook), 0); 3383 gtk_notebook_set_tab_hborder(GTK_NOTEBOOK(gtkwin->notebook), 0);
3380 gtk_notebook_set_tab_vborder(GTK_NOTEBOOK(gtkwin->notebook), 0); 3384 gtk_notebook_set_tab_vborder(GTK_NOTEBOOK(gtkwin->notebook), 0);
3381 #endif 3385 #endif
3580 (conv_type == GAIM_CONV_CHAT ? ".chat" : "")); 3584 (conv_type == GAIM_CONV_CHAT ? ".chat" : ""));
3581 3585
3582 fd = open_log_file(filename, (conv_type == GAIM_CONV_CHAT)); 3586 fd = open_log_file(filename, (conv_type == GAIM_CONV_CHAT));
3583 3587
3584 if (fd) { 3588 if (fd) {
3585 if (!(logging_options & OPT_LOG_STRIP_HTML)) 3589 if (!gaim_prefs_get_bool("/gaim/gtk/logging/strip_html"))
3586 fprintf(fd, 3590 fprintf(fd,
3587 "<HR><BR><H3 Align=Center> " 3591 "<HR><BR><H3 Align=Center> "
3588 "---- New Conversation @ %s ----</H3><BR>\n", 3592 "---- New Conversation @ %s ----</H3><BR>\n",
3589 full_date()); 3593 full_date());
3590 else 3594 else
3634 3638
3635 /* Pack it all together. */ 3639 /* Pack it all together. */
3636 gtk_box_pack_start(GTK_BOX(tabby), gtkconv->tab_label, TRUE, TRUE, 0); 3640 gtk_box_pack_start(GTK_BOX(tabby), gtkconv->tab_label, TRUE, TRUE, 0);
3637 gtk_widget_show(gtkconv->tab_label); 3641 gtk_widget_show(gtkconv->tab_label);
3638 gtk_box_pack_start(GTK_BOX(tabby), gtkconv->close, FALSE, FALSE, 0); 3642 gtk_box_pack_start(GTK_BOX(tabby), gtkconv->close, FALSE, FALSE, 0);
3639 if (!(convo_options & OPT_CONVO_NO_X_ON_TAB)) 3643
3644 if (gaim_prefs_get_bool("/gaim/gtk/conversations/close_on_tabs"))
3640 gtk_widget_show_all(gtkconv->close); 3645 gtk_widget_show_all(gtkconv->close);
3646
3641 gtk_widget_show(tabby); 3647 gtk_widget_show(tabby);
3642 3648
3643 3649
3644 /* Add this pane to the conversations notebook. */ 3650 /* Add this pane to the conversations notebook. */
3645 gtk_notebook_append_page(GTK_NOTEBOOK(gtkwin->notebook), tab_cont, tabby); 3651 gtk_notebook_append_page(GTK_NOTEBOOK(gtkwin->notebook), tab_cont, tabby);
3650 3656
3651 if (gaim_window_get_conversation_count(win) == 1) { 3657 if (gaim_window_get_conversation_count(win) == 1) {
3652 /* Er, bug in notebooks? Switch to the page manually. */ 3658 /* Er, bug in notebooks? Switch to the page manually. */
3653 gtk_notebook_set_current_page(GTK_NOTEBOOK(gtkwin->notebook), 0); 3659 gtk_notebook_set_current_page(GTK_NOTEBOOK(gtkwin->notebook), 0);
3654 3660
3655 if(conv_type == GAIM_CONV_IM) { 3661 gtk_notebook_set_show_tabs(GTK_NOTEBOOK(gtkwin->notebook),
3656 gtk_notebook_set_show_tabs(GTK_NOTEBOOK(gtkwin->notebook), 3662 gaim_prefs_get_bool("/gaim/gtk/conversations/tabs"));
3657 (im_options & OPT_IM_ONE_WINDOW)); 3663 }
3658 } else if(conv_type == GAIM_CONV_CHAT) { 3664 else
3659 gtk_notebook_set_show_tabs(GTK_NOTEBOOK(gtkwin->notebook),
3660 (chat_options & OPT_CHAT_ONE_WINDOW));
3661 }
3662 } else {
3663 gtk_notebook_set_show_tabs(GTK_NOTEBOOK(gtkwin->notebook), TRUE); 3665 gtk_notebook_set_show_tabs(GTK_NOTEBOOK(gtkwin->notebook), TRUE);
3664 }
3665 3666
3666 focus_conv = g_list_nth_data(gaim_window_get_conversations(win), 3667 focus_conv = g_list_nth_data(gaim_window_get_conversations(win),
3667 gtk_notebook_get_current_page(GTK_NOTEBOOK(gtkwin->notebook))); 3668 gtk_notebook_get_current_page(GTK_NOTEBOOK(gtkwin->notebook)));
3668 focus_gtkconv = GAIM_GTK_CONVERSATION(focus_conv); 3669 focus_gtkconv = GAIM_GTK_CONVERSATION(focus_conv);
3669 gtk_widget_grab_focus(focus_gtkconv->entry); 3670 gtk_widget_grab_focus(focus_gtkconv->entry);
3699 gtk_notebook_remove_page(GTK_NOTEBOOK(gtkwin->notebook), index); 3700 gtk_notebook_remove_page(GTK_NOTEBOOK(gtkwin->notebook), index);
3700 3701
3701 /* go back to tabless if need be */ 3702 /* go back to tabless if need be */
3702 if (gaim_window_get_conversation_count(win) <= 2) { 3703 if (gaim_window_get_conversation_count(win) <= 2) {
3703 gtk_notebook_set_show_tabs(GTK_NOTEBOOK(gtkwin->notebook), 3704 gtk_notebook_set_show_tabs(GTK_NOTEBOOK(gtkwin->notebook),
3704 ((conv_type == GAIM_CONV_IM && 3705 gaim_prefs_get_bool("/gaim/gtk/conversations/tabs"));
3705 (im_options & OPT_IM_ONE_WINDOW)) ||
3706 (conv_type == GAIM_CONV_CHAT &&
3707 (im_options & OPT_CHAT_ONE_WINDOW))));
3708 } 3706 }
3709 3707
3710 3708
3711 /* If this window is setup with an inactive gc, regenerate the menu. */ 3709 /* If this window is setup with an inactive gc, regenerate the menu. */
3712 if (conv_type == GAIM_CONV_IM && 3710 if (conv_type == GAIM_CONV_IM &&
3868 { 3866 {
3869 struct gaim_gtk_conversation *gtkconv; 3867 struct gaim_gtk_conversation *gtkconv;
3870 3868
3871 gtkconv = GAIM_GTK_CONVERSATION(conv); 3869 gtkconv = GAIM_GTK_CONVERSATION(conv);
3872 3870
3871 if (!(flags & WFLAG_NOLOG) &&
3872 gaim_prefs_get_bool("/gaim/gtk/conversations/im/raise_on_events")) {
3873
3874 gaim_window_raise(gaim_conversation_get_window(conv));
3875 }
3876
3873 /* Play a sound, if specified in prefs. */ 3877 /* Play a sound, if specified in prefs. */
3874 if (gtkconv->make_sound) { 3878 if (gtkconv->make_sound) {
3875 if (flags & WFLAG_RECV) { 3879 if (flags & WFLAG_RECV) {
3876 if (gtkconv->u.im->a_virgin && 3880 if (gtkconv->u.im->a_virgin &&
3877 (sound_options & OPT_SOUND_FIRST_RCV)) { 3881 gaim_prefs_get_bool("/gaim/gtk/sound/first_im_recv")) {
3878 3882
3879 gaim_sound_play_event(GAIM_SOUND_FIRST_RECEIVE); 3883 gaim_sound_play_event(GAIM_SOUND_FIRST_RECEIVE);
3880 } 3884 }
3881 else 3885 else
3882 gaim_sound_play_event(GAIM_SOUND_RECEIVE); 3886 gaim_sound_play_event(GAIM_SOUND_RECEIVE);
3902 /* Play a sound, if specified in prefs. */ 3906 /* Play a sound, if specified in prefs. */
3903 if (gtkconv->make_sound) { 3907 if (gtkconv->make_sound) {
3904 if (!(flags & WFLAG_WHISPER) && (flags & WFLAG_SEND)) 3908 if (!(flags & WFLAG_WHISPER) && (flags & WFLAG_SEND))
3905 gaim_sound_play_event(GAIM_SOUND_CHAT_YOU_SAY); 3909 gaim_sound_play_event(GAIM_SOUND_CHAT_YOU_SAY);
3906 else if (flags & WFLAG_RECV) { 3910 else if (flags & WFLAG_RECV) {
3907 if ((flags & WFLAG_NICK) && (sound_options & OPT_SOUND_CHAT_NICK)) 3911 if ((flags & WFLAG_NICK) &&
3912 gaim_prefs_get_bool("/gaim/gtk/sound/nick_said")) {
3913
3908 gaim_sound_play_event(GAIM_SOUND_CHAT_NICK); 3914 gaim_sound_play_event(GAIM_SOUND_CHAT_NICK);
3915 }
3909 else 3916 else
3910 gaim_sound_play_event(GAIM_SOUND_CHAT_SAY); 3917 gaim_sound_play_event(GAIM_SOUND_CHAT_SAY);
3911 } 3918 }
3912 } 3919 }
3913 3920
3914 if (chat_options & OPT_CHAT_COLORIZE) 3921 if (gaim_prefs_get_bool("/gaim/gtk/conversations/chat/color_nicks"))
3915 flags |= WFLAG_COLORIZE; 3922 flags |= WFLAG_COLORIZE;
3923
3924 /* Raise the window, if specified in prefs. */
3925 if (!(flags & WFLAG_NOLOG) &&
3926 gaim_prefs_get_bool("/gaim/gtk/conversations/chat/raise_on_events")) {
3927
3928 gaim_window_raise(gaim_conversation_get_window(conv));
3929 }
3916 3930
3917 gaim_conversation_write(conv, who, message, -1, flags, mtime); 3931 gaim_conversation_write(conv, who, message, -1, flags, mtime);
3918 } 3932 }
3919 3933
3920 static void 3934 static void
3921 gaim_gtkconv_write_conv(struct gaim_conversation *conv, const char *who, 3935 gaim_gtkconv_write_conv(struct gaim_conversation *conv, const char *who,
3922 const char *message, size_t length, int flags, 3936 const char *message, size_t length, int flags,
3923 time_t mtime) 3937 time_t mtime)
3924 { 3938 {
3925 struct gaim_gtk_conversation *gtkconv; 3939 struct gaim_gtk_conversation *gtkconv;
3940 struct gaim_window *win;
3926 struct gaim_connection *gc; 3941 struct gaim_connection *gc;
3927 int gtk_font_options = 0; 3942 int gtk_font_options = 0;
3928 GString *log_str; 3943 GString *log_str;
3929 FILE *fd; 3944 FILE *fd;
3930 char buf[BUF_LONG]; 3945 char buf[BUF_LONG];
3939 length = strlen(message) + 1; 3954 length = strlen(message) + 1;
3940 3955
3941 gtkconv = GAIM_GTK_CONVERSATION(conv); 3956 gtkconv = GAIM_GTK_CONVERSATION(conv);
3942 gc = gaim_conversation_get_gc(conv); 3957 gc = gaim_conversation_get_gc(conv);
3943 3958
3959 win = gaim_conversation_get_window(conv);
3960
3961 if (!(flags & WFLAG_NOLOG) &&
3962 ((gaim_conversation_get_type(conv) == GAIM_CONV_CHAT &&
3963 gaim_prefs_get_bool("/gaim/gtk/conversations/chat/raise_on_events")) ||
3964 (gaim_conversation_get_type(conv) == GAIM_CONV_IM &&
3965 (gaim_prefs_get_bool("/gaim/gtk/conversations/im/raise_on_events") ||
3966 gaim_prefs_get_bool("/gaim/gtk/conversations/im/hide_on_send"))))) {
3967
3968 gaim_window_show(win);
3969 }
3970
3971
3944 if(time(NULL) > mtime + 20*60) /* show date if older than 20 minutes */ 3972 if(time(NULL) > mtime + 20*60) /* show date if older than 20 minutes */
3945 strftime(mdate, sizeof(mdate), "%Y-%m-%d %H:%M:%S", localtime(&mtime)); 3973 strftime(mdate, sizeof(mdate), "%Y-%m-%d %H:%M:%S", localtime(&mtime));
3946 else 3974 else
3947 strftime(mdate, sizeof(mdate), "%H:%M:%S", localtime(&mtime)); 3975 strftime(mdate, sizeof(mdate), "%H:%M:%S", localtime(&mtime));
3948 3976
3949 if(gc) 3977 if(gc)
3950 sml_attrib = g_strdup_printf("sml=\"%s\"", gc->prpl->info->name); 3978 sml_attrib = g_strdup_printf("sml=\"%s\"", gc->prpl->info->name);
3951 3979
3952 gtk_font_options ^= GTK_IMHTML_NO_COMMENTS; 3980 gtk_font_options ^= GTK_IMHTML_NO_COMMENTS;
3953 3981
3954 if (convo_options & OPT_CONVO_IGNORE_COLOUR) 3982 if (gaim_prefs_get_bool("/gaim/gtk/conversations/ignore_colors"))
3955 gtk_font_options ^= GTK_IMHTML_NO_COLOURS; 3983 gtk_font_options ^= GTK_IMHTML_NO_COLOURS;
3956 3984
3957 if (convo_options & OPT_CONVO_IGNORE_FONTS) 3985 if (gaim_prefs_get_bool("/gaim/gtk/conversations/ignore_fonts"))
3958 gtk_font_options ^= GTK_IMHTML_NO_FONTS; 3986 gtk_font_options ^= GTK_IMHTML_NO_FONTS;
3959 3987
3960 if (convo_options & OPT_CONVO_IGNORE_SIZES) 3988 if (gaim_prefs_get_bool("/gaim/gtk/conversations/ignore_font_sizes"))
3961 gtk_font_options ^= GTK_IMHTML_NO_SIZES; 3989 gtk_font_options ^= GTK_IMHTML_NO_SIZES;
3962 3990
3963 if (!(logging_options & OPT_LOG_STRIP_HTML)) 3991 if (!gaim_prefs_get_bool("/gaim/gtk/logging/strip_html"))
3964 gtk_font_options ^= GTK_IMHTML_RETURN_LOG; 3992 gtk_font_options ^= GTK_IMHTML_RETURN_LOG;
3965 if (GAIM_PLUGIN_PROTOCOL_INFO(conv->account->gc->prpl)->options & OPT_PROTO_USE_POINTSIZE) 3993
3994 if (GAIM_PLUGIN_PROTOCOL_INFO(conv->account->gc->prpl)->options &
3995 OPT_PROTO_USE_POINTSIZE) {
3996
3966 gtk_font_options ^= GTK_IMHTML_USE_POINTSIZE; 3997 gtk_font_options ^= GTK_IMHTML_USE_POINTSIZE;
3998 }
3967 3999
3968 if (flags & WFLAG_SYSTEM) { 4000 if (flags & WFLAG_SYSTEM) {
3969 if (convo_options & OPT_CONVO_SHOW_TIME) 4001 if (gaim_prefs_get_bool("/gaim/gtk/conversations/show_timestamps"))
3970 g_snprintf(buf, BUF_LONG, "(%s) <B>%s</B>", 4002 g_snprintf(buf, BUF_LONG, "(%s) <B>%s</B>",
3971 mdate, message); 4003 mdate, message);
3972 else 4004 else
3973 g_snprintf(buf, BUF_LONG, "<B>%s</B>", message); 4005 g_snprintf(buf, BUF_LONG, "<B>%s</B>", message);
3974 4006
3976 "<!--(%s) --><B>%s</B><BR>", 4008 "<!--(%s) --><B>%s</B><BR>",
3977 mdate, message); 4009 mdate, message);
3978 4010
3979 gtk_imhtml_append_text(GTK_IMHTML(gtkconv->imhtml), buf2, -1, 0); 4011 gtk_imhtml_append_text(GTK_IMHTML(gtkconv->imhtml), buf2, -1, 0);
3980 4012
3981 if (logging_options & OPT_LOG_STRIP_HTML) { 4013 if (gaim_prefs_get_bool("/gaim/gtk/logging/strip_html")) {
3982 char *t1 = strip_html(buf); 4014 char *t1 = strip_html(buf);
3983 4015
3984 conv->history = g_string_append(conv->history, t1); 4016 conv->history = g_string_append(conv->history, t1);
3985 conv->history = g_string_append(conv->history, "\n"); 4017 conv->history = g_string_append(conv->history, "\n");
3986 4018
3994 if (!(flags & WFLAG_NOLOG) && gaim_conversation_is_logging(conv)) { 4026 if (!(flags & WFLAG_NOLOG) && gaim_conversation_is_logging(conv)) {
3995 4027
3996 char *t1; 4028 char *t1;
3997 char nm[256]; 4029 char nm[256];
3998 4030
3999 if (logging_options & OPT_LOG_STRIP_HTML) 4031 if (gaim_prefs_get_bool("/gaim/gtk/logging/strip_html"))
4000 t1 = strip_html(buf); 4032 t1 = strip_html(buf);
4001 else 4033 else
4002 t1 = buf; 4034 t1 = buf;
4003 4035
4004 if (gaim_conversation_get_type(conv) == GAIM_CONV_CHAT) 4036 if (gaim_conversation_get_type(conv) == GAIM_CONV_CHAT)
4009 4041
4010 fd = open_log_file(nm, 4042 fd = open_log_file(nm,
4011 (gaim_conversation_get_type(conv) == GAIM_CONV_CHAT)); 4043 (gaim_conversation_get_type(conv) == GAIM_CONV_CHAT));
4012 4044
4013 if (fd) { 4045 if (fd) {
4014 if (logging_options & OPT_LOG_STRIP_HTML) 4046 if (gaim_prefs_get_bool("/gaim/gtk/logging/strip_html"))
4015 fprintf(fd, "%s\n", t1); 4047 fprintf(fd, "%s\n", t1);
4016 else 4048 else
4017 fprintf(fd, "%s<BR>\n", t1); 4049 fprintf(fd, "%s<BR>\n", t1);
4018 4050
4019 fclose(fd); 4051 fclose(fd);
4020 } 4052 }
4021 4053
4022 if (logging_options & OPT_LOG_STRIP_HTML) 4054 if (gaim_prefs_get_bool("/gaim/gtk/logging/strip_html"))
4023 g_free(t1); 4055 g_free(t1);
4024 } 4056 }
4025 } 4057 }
4026 else if (flags & WFLAG_NOLOG) { 4058 else if (flags & WFLAG_NOLOG) {
4027 g_snprintf(buf, BUF_LONG, 4059 g_snprintf(buf, BUF_LONG,
4088 else if (flags & WFLAG_SEND) 4120 else if (flags & WFLAG_SEND)
4089 strcpy(color, "#16569E"); 4121 strcpy(color, "#16569E");
4090 } 4122 }
4091 } 4123 }
4092 4124
4093 if (convo_options & OPT_CONVO_SHOW_TIME) 4125 if (gaim_prefs_get_bool("/gaim/gtk/conversations/show_timestamps"))
4094 g_snprintf(buf, BUF_LONG, 4126 g_snprintf(buf, BUF_LONG,
4095 "<FONT COLOR=\"%s\" %s>(%s) " 4127 "<FONT COLOR=\"%s\" %s>(%s) "
4096 "<B>%s</B></FONT> ", color, 4128 "<B>%s</B></FONT> ", color,
4097 sml_attrib ? sml_attrib : "", mdate, str); 4129 sml_attrib ? sml_attrib : "", mdate, str);
4098 else 4130 else
4131 with_font_tag, length, gtk_font_options); 4163 with_font_tag, length, gtk_font_options);
4132 4164
4133 gtk_imhtml_append_text(GTK_IMHTML(gtkconv->imhtml), "<BR>", -1, 0); 4165 gtk_imhtml_append_text(GTK_IMHTML(gtkconv->imhtml), "<BR>", -1, 0);
4134 4166
4135 /* XXX This needs to be updated for the new length argument. */ 4167 /* XXX This needs to be updated for the new length argument. */
4136 if (logging_options & OPT_LOG_STRIP_HTML) { 4168 if (gaim_prefs_get_bool("/gaim/gtk/logging/strip_html")) {
4137 char *t1, *t2; 4169 char *t1, *t2;
4138 4170
4139 t1 = strip_html(buf); 4171 t1 = strip_html(buf);
4140 t2 = strip_html(new_message); 4172 t2 = strip_html(new_message);
4141 4173
4171 g_snprintf(nm, sizeof(nm), "%s.chat", 4203 g_snprintf(nm, sizeof(nm), "%s.chat",
4172 gaim_conversation_get_name(conv)); 4204 gaim_conversation_get_name(conv));
4173 else 4205 else
4174 strncpy(nm, gaim_conversation_get_name(conv), sizeof(nm)); 4206 strncpy(nm, gaim_conversation_get_name(conv), sizeof(nm));
4175 4207
4176 if (logging_options & OPT_LOG_STRIP_HTML) { 4208 if (gaim_prefs_get_bool("/gaim/gtk/logging/strip_html")) {
4177 t1 = strip_html(buf); 4209 t1 = strip_html(buf);
4178 t2 = strip_html(with_font_tag); 4210 t2 = strip_html(with_font_tag);
4179 } 4211 }
4180 else { 4212 else {
4181 t1 = html_logize(buf); 4213 t1 = html_logize(buf);
4184 4216
4185 fd = open_log_file(nm, 4217 fd = open_log_file(nm,
4186 (gaim_conversation_get_type(conv) == GAIM_CONV_CHAT)); 4218 (gaim_conversation_get_type(conv) == GAIM_CONV_CHAT));
4187 4219
4188 if (fd) { 4220 if (fd) {
4189 if (logging_options & OPT_LOG_STRIP_HTML) 4221 if (gaim_prefs_get_bool("/gaim/gtk/logging/strip_html"))
4190 fprintf(fd, "%s%s\n", t1, t2); 4222 fprintf(fd, "%s%s\n", t1, t2);
4191 else { 4223 else {
4192 fprintf(fd, "%s%s%s<BR>\n", t1, t2, log_str->str); 4224 fprintf(fd, "%s%s%s<BR>\n", t1, t2, log_str->str);
4193 g_string_free(log_str, TRUE); 4225 g_string_free(log_str, TRUE);
4194 } 4226 }
4502 continue; 4534 continue;
4503 4535
4504 gtkconv = GAIM_GTK_CONVERSATION(conv); 4536 gtkconv = GAIM_GTK_CONVERSATION(conv);
4505 4537
4506 gtk_imhtml_show_smileys(GTK_IMHTML(gtkconv->imhtml), 4538 gtk_imhtml_show_smileys(GTK_IMHTML(gtkconv->imhtml),
4507 (convo_options & OPT_CONVO_SHOW_SMILEY)); 4539 gaim_prefs_get_bool("/gaim/gtk/conversations/show_smilies"));
4508 } 4540 }
4509 } 4541 }
4510 4542
4511 void 4543 void
4512 gaim_gtkconv_toggle_timestamps(void) 4544 gaim_gtkconv_toggle_timestamps(void)
4523 continue; 4555 continue;
4524 4556
4525 gtkconv = GAIM_GTK_CONVERSATION(conv); 4557 gtkconv = GAIM_GTK_CONVERSATION(conv);
4526 4558
4527 gtk_imhtml_show_comments(GTK_IMHTML(gtkconv->imhtml), 4559 gtk_imhtml_show_comments(GTK_IMHTML(gtkconv->imhtml),
4528 (convo_options & OPT_CONVO_SHOW_TIME)); 4560 gaim_prefs_get_bool("/gaim/gtk/conversations/show_timestamps"));
4529 } 4561 }
4530 } 4562 }
4531 4563
4532 void 4564 void
4533 gaim_gtkconv_toggle_spellchk(void) 4565 gaim_gtkconv_toggle_spellchk(void)
4545 if (!GAIM_IS_GTK_CONVERSATION(conv)) 4577 if (!GAIM_IS_GTK_CONVERSATION(conv))
4546 continue; 4578 continue;
4547 4579
4548 gtkconv = GAIM_GTK_CONVERSATION(conv); 4580 gtkconv = GAIM_GTK_CONVERSATION(conv);
4549 4581
4550 if (convo_options & OPT_CONVO_CHECK_SPELLING) 4582 if (gaim_prefs_get_bool("/gaim/gtk/conversations/spellcheck"))
4551 gtkspell_new_attach(GTK_TEXT_VIEW(gtkconv->entry), NULL, NULL); 4583 gtkspell_new_attach(GTK_TEXT_VIEW(gtkconv->entry), NULL, NULL);
4552 else { 4584 else {
4553 spell = gtkspell_get_from_text_view(GTK_TEXT_VIEW(gtkconv->entry)); 4585 spell = gtkspell_get_from_text_view(GTK_TEXT_VIEW(gtkconv->entry));
4554 gtkspell_detach(spell); 4586 gtkspell_detach(spell);
4555 } 4587 }
4569 if (!GAIM_IS_GTK_CONVERSATION(conv)) 4601 if (!GAIM_IS_GTK_CONVERSATION(conv))
4570 continue; 4602 continue;
4571 4603
4572 gtkconv = GAIM_GTK_CONVERSATION(conv); 4604 gtkconv = GAIM_GTK_CONVERSATION(conv);
4573 4605
4574 if (convo_options & OPT_CONVO_NO_X_ON_TAB) 4606 if (!gaim_prefs_get_bool("/gaim/gtk/conversations/close_on_tabs"))
4575 gtk_widget_hide(gtkconv->close); 4607 gtk_widget_hide(gtkconv->close);
4576 else 4608 else
4577 gtk_widget_show_all(gtkconv->close); 4609 gtk_widget_show_all(gtkconv->close);
4578 } 4610 }
4579 } 4611 }
4774 if (gtkconv->u.im->icon_timer == 0 && gtkconv->u.im->icon != NULL) 4806 if (gtkconv->u.im->icon_timer == 0 && gtkconv->u.im->icon != NULL)
4775 animate = FALSE; 4807 animate = FALSE;
4776 4808
4777 remove_icon(gtkconv); 4809 remove_icon(gtkconv);
4778 4810
4779 if (im_options & OPT_IM_HIDE_ICONS) 4811 if (!gaim_prefs_get_bool("/gaim/gtk/conversations/im/show_buddy_icons"))
4780 return; 4812 return;
4781 4813
4782 if (gaim_conversation_get_gc(conv) == NULL) 4814 if (gaim_conversation_get_gc(conv) == NULL)
4783 return; 4815 return;
4784 4816
4873 gtkconv->u.im->icon = gtk_image_new_from_pixmap(pm, bm); 4905 gtkconv->u.im->icon = gtk_image_new_from_pixmap(pm, bm);
4874 gtk_widget_set_size_request(gtkconv->u.im->icon, sf, sf); 4906 gtk_widget_set_size_request(gtkconv->u.im->icon, sf, sf);
4875 gtk_container_add(GTK_CONTAINER(event), gtkconv->u.im->icon); 4907 gtk_container_add(GTK_CONTAINER(event), gtkconv->u.im->icon);
4876 gtk_widget_show(gtkconv->u.im->icon); 4908 gtk_widget_show(gtkconv->u.im->icon);
4877 4909
4878 if ((im_options & OPT_IM_NO_ANIMATION) || animate == FALSE) 4910 if (!animate ||
4911 !gaim_prefs_get_bool("/gaim/gtk/conversations/im/animate_buddy_icons")) {
4879 stop_anim(NULL, conv); 4912 stop_anim(NULL, conv);
4913 }
4880 4914
4881 g_object_unref(G_OBJECT(pm)); 4915 g_object_unref(G_OBJECT(pm));
4882 4916
4883 if (bm) 4917 if (bm)
4884 g_object_unref(G_OBJECT(bm)); 4918 g_object_unref(G_OBJECT(bm));
4893 void 4927 void
4894 gaim_gtkconv_set_anim(void) 4928 gaim_gtkconv_set_anim(void)
4895 { 4929 {
4896 GList *l; 4930 GList *l;
4897 4931
4898 if (im_options & OPT_IM_HIDE_ICONS) 4932 if (!gaim_prefs_get_bool("/gaim/gtk/conversations/im/show_buddy_icons"))
4899 return; 4933 return;
4900 4934
4901 if (im_options & OPT_IM_NO_ANIMATION) { 4935 if (!gaim_prefs_get_bool("/gaim/gtk/conversations/im/animate_buddy_icons")) {
4902 for (l = gaim_get_ims(); l != NULL; l = l->next) 4936 for (l = gaim_get_ims(); l != NULL; l = l->next)
4903 stop_anim(NULL, (struct gaim_conversation *)l->data); 4937 stop_anim(NULL, (struct gaim_conversation *)l->data);
4904 } else { 4938 } else {
4905 for (l = gaim_get_ims(); l != NULL; l = l->next) 4939 for (l = gaim_get_ims(); l != NULL; l = l->next)
4906 start_anim(NULL, (struct gaim_conversation *)l->data); 4940 start_anim(NULL, (struct gaim_conversation *)l->data);
4922 4956
4923 gtkconv = GAIM_GTK_CONVERSATION(conv); 4957 gtkconv = GAIM_GTK_CONVERSATION(conv);
4924 4958
4925 if (gtkconv->toolbar.bold != NULL) 4959 if (gtkconv->toolbar.bold != NULL)
4926 gtk_widget_set_sensitive(gtkconv->toolbar.bold, 4960 gtk_widget_set_sensitive(gtkconv->toolbar.bold,
4927 (!(font_options & OPT_FONT_BOLD))); 4961 !gaim_prefs_get_bool("/gaim/gtk/conversations/send_bold"));
4928 4962
4929 if (gtkconv->toolbar.italic != NULL) 4963 if (gtkconv->toolbar.italic != NULL)
4930 gtk_widget_set_sensitive(gtkconv->toolbar.italic, 4964 gtk_widget_set_sensitive(gtkconv->toolbar.italic,
4931 (!(font_options & OPT_FONT_ITALIC))); 4965 !gaim_prefs_get_bool("/gaim/gtk/conversations/send_italic"));
4932 4966
4933 if (gtkconv->toolbar.underline != NULL) 4967 if (gtkconv->toolbar.underline != NULL)
4934 gtk_widget_set_sensitive(gtkconv->toolbar.underline, 4968 gtk_widget_set_sensitive(gtkconv->toolbar.underline,
4935 (!(font_options & OPT_FONT_UNDERLINE))); 4969 !gaim_prefs_get_bool("/gaim/gtk/conversations/send_underline"));
4936 } 4970 }
4937 } 4971 }
4938 4972
4939 void 4973 void
4940 gaim_gtkconv_update_font_colors(struct gaim_conversation *conv) 4974 gaim_gtkconv_update_font_colors(struct gaim_conversation *conv)
4943 4977
4944 if (!GAIM_IS_GTK_CONVERSATION(conv)) 4978 if (!GAIM_IS_GTK_CONVERSATION(conv))
4945 return; 4979 return;
4946 4980
4947 gtkconv = GAIM_GTK_CONVERSATION(conv); 4981 gtkconv = GAIM_GTK_CONVERSATION(conv);
4948 4982
4949 gtkconv->fg_color.red = fgcolor.red; 4983 gdk_color_parse(gaim_prefs_get_string("/gaim/gtk/conversations/fgcolor"),
4950 gtkconv->fg_color.blue = fgcolor.blue; 4984 &gtkconv->fg_color);
4951 gtkconv->fg_color.green = fgcolor.green; 4985
4952 4986 gdk_color_parse(gaim_prefs_get_string("/gaim/gtk/conversations/bgcolor"),
4953 gtkconv->bg_color.red = bgcolor.red; 4987 &gtkconv->bg_color);
4954 gtkconv->bg_color.blue = bgcolor.blue;
4955 gtkconv->bg_color.green = bgcolor.green;
4956 } 4988 }
4957 4989
4958 void 4990 void
4959 gaim_gtkconv_update_font_face(struct gaim_conversation *conv) 4991 gaim_gtkconv_update_font_face(struct gaim_conversation *conv)
4960 { 4992 {
4974 GList *l; 5006 GList *l;
4975 GtkPositionType pos; 5007 GtkPositionType pos;
4976 struct gaim_window *win; 5008 struct gaim_window *win;
4977 struct gaim_gtk_window *gtkwin; 5009 struct gaim_gtk_window *gtkwin;
4978 5010
4979 pos = ((im_options & OPT_IM_SIDE_TAB) 5011 pos = gaim_prefs_get_int("/gaim/gtk/conversations/tab_side");
4980 ? ((im_options & OPT_IM_BR_TAB) ? GTK_POS_RIGHT : GTK_POS_LEFT)
4981 : ((im_options & OPT_IM_BR_TAB) ? GTK_POS_BOTTOM : GTK_POS_TOP));
4982 5012
4983 for (l = gaim_get_windows(); l != NULL; l = l->next) { 5013 for (l = gaim_get_windows(); l != NULL; l = l->next) {
4984 win = (struct gaim_window *)l->data; 5014 win = (struct gaim_window *)l->data;
4985 5015
4986 if (!GAIM_IS_GTK_WINDOW(win)) 5016 if (!GAIM_IS_GTK_WINDOW(win))

mercurial