Mercurial > pidgin
comparison src/conversation.c @ 472:6a92cd7322cc
[gaim-migrate @ 482]
merged chat and IM windows. /me is now in IM, font/color dialogs in chat, and smileys in chat too. also, fixed the GOOD bug. i don't know what kind of crack rob was smoking when he decided O could be eyes.
committer: Tailor Script <tailor@pidgin.im>
author | Eric Warmenhoven <eric@warmenhoven.org> |
---|---|
date | Sun, 09 Jul 2000 23:19:21 +0000 |
parents | a330017b3aa4 |
children | f9bb7761c52b |
comparison
equal
deleted
inserted
replaced
471:4d0b703a094c | 472:6a92cd7322cc |
---|---|
29 #include <unistd.h> | 29 #include <unistd.h> |
30 #include <stdio.h> | 30 #include <stdio.h> |
31 #include <stdlib.h> | 31 #include <stdlib.h> |
32 #include <ctype.h> | 32 #include <ctype.h> |
33 #include <gtk/gtk.h> | 33 #include <gtk/gtk.h> |
34 #include "gaim.h" | |
35 #include "gtkhtml.h" | 34 #include "gtkhtml.h" |
36 #include <gdk/gdkkeysyms.h> | 35 #include <gdk/gdkkeysyms.h> |
37 #include "pixmaps/underline.xpm" | 36 #include "convo.h" |
38 #include "pixmaps/bold.xpm" | |
39 #include "pixmaps/italic.xpm" | |
40 #include "pixmaps/small.xpm" | |
41 #include "pixmaps/normal.xpm" | |
42 #include "pixmaps/big.xpm" | |
43 #include "pixmaps/fontface.xpm" | |
44 #include "pixmaps/speaker.xpm" | |
45 /* #include "pixmaps/aimicon2.xpm" */ | |
46 #include "pixmaps/wood.xpm" | |
47 #include "pixmaps/palette.xpm" | |
48 #include "pixmaps/link.xpm" | |
49 #include "pixmaps/strike.xpm" | |
50 | |
51 #include "pixmaps/smile_happy.xpm" | |
52 #include "pixmaps/smile_sad.xpm" | |
53 #include "pixmaps/smile_wink.xpm" | |
54 | 37 |
55 int state_lock=0; | 38 int state_lock=0; |
56 | 39 |
57 GdkPixmap *dark_icon_pm = NULL; | 40 GdkPixmap *dark_icon_pm = NULL; |
58 GdkBitmap *dark_icon_bm = NULL; | 41 GdkBitmap *dark_icon_bm = NULL; |
59 | 42 |
60 char *fontface; | 43 char *fontface; |
61 | 44 |
62 void check_everything(GtkWidget *entry); | 45 void check_everything(GtkWidget *entry); |
63 char *get_tag_by_prefix(GtkWidget *entry, const char *prefix); | 46 char *get_tag_by_prefix(GtkWidget *entry, const char *prefix); |
64 gboolean user_keypress_callback(GtkWidget *entry, GdkEventKey *event, struct conversation *c); | 47 gboolean keypress_callback(GtkWidget *entry, GdkEventKey *event, struct conversation *c); |
65 | 48 |
66 /*------------------------------------------------------------------------*/ | 49 /*------------------------------------------------------------------------*/ |
67 /* Helpers */ | 50 /* Helpers */ |
68 /*------------------------------------------------------------------------*/ | 51 /*------------------------------------------------------------------------*/ |
69 | 52 |
233 if (c->log_button) | 216 if (c->log_button) |
234 gtk_widget_set_sensitive(c->log_button, ((general_options & OPT_GEN_LOG_ALL)) ? FALSE : TRUE); | 217 gtk_widget_set_sensitive(c->log_button, ((general_options & OPT_GEN_LOG_ALL)) ? FALSE : TRUE); |
235 | 218 |
236 cnv = cnv->next; | 219 cnv = cnv->next; |
237 } | 220 } |
221 | |
222 cnv = buddy_chats; | |
223 while(cnv) { | |
224 c = (struct conversation *)cnv->data; | |
225 | |
226 if (c->log_button) | |
227 gtk_widget_set_sensitive(c->log_button, ((general_options & OPT_GEN_LOG_ALL)) ? FALSE : TRUE); | |
228 | |
229 cnv = cnv->next; | |
230 } | |
238 } | 231 } |
239 | 232 |
240 void update_font_buttons() | 233 void update_font_buttons() |
241 { | 234 { |
242 GList *cnv = conversations; | 235 GList *cnv = conversations; |
298 rm_log(find_log_info(p->name)); | 291 rm_log(find_log_info(p->name)); |
299 else | 292 else |
300 show_log_dialog(p->name); | 293 show_log_dialog(p->name); |
301 } | 294 } |
302 | 295 |
303 static int close_callback(GtkWidget *widget, struct conversation *c) | 296 int close_callback(GtkWidget *widget, struct conversation *c) |
304 { | 297 { |
305 gtk_widget_destroy(c->window); | 298 if (c->window) |
306 delete_conversation(c); | 299 gtk_widget_destroy(c->window); |
300 c->window = NULL; | |
301 | |
302 if (c->is_chat) | |
303 serv_chat_leave(c->id); | |
304 else | |
305 delete_conversation(c); | |
306 | |
307 return TRUE; | 307 return TRUE; |
308 } | 308 } |
309 | 309 |
310 void set_font_face(GtkWidget *widget, struct conversation *c) | 310 void set_font_face(GtkWidget *widget, struct conversation *c) |
311 { | 311 { |
356 { | 356 { |
357 /* show_color_dialog(c); */ | 357 /* show_color_dialog(c); */ |
358 gtk_widget_grab_focus(c->entry); | 358 gtk_widget_grab_focus(c->entry); |
359 } | 359 } |
360 | 360 |
361 static void add_callback(GtkWidget *widget, struct conversation *c) | 361 void add_callback(GtkWidget *widget, struct conversation *c) |
362 { | 362 { |
363 if (find_buddy(c->name) != NULL) { | 363 if (find_buddy(c->name) != NULL) { |
364 sprintf(debug_buff,_("Removing '%s' from buddylist.\n"), c->name); | 364 sprintf(debug_buff,_("Removing '%s' from buddylist.\n"), c->name); |
365 debug_print(debug_buff); | 365 debug_print(debug_buff); |
366 remove_buddy(find_group_by_buddy(c->name), find_buddy(c->name)); | 366 remove_buddy(find_group_by_buddy(c->name), find_buddy(c->name)); |
374 | 374 |
375 gtk_widget_grab_focus(c->entry); | 375 gtk_widget_grab_focus(c->entry); |
376 } | 376 } |
377 | 377 |
378 | 378 |
379 static void block_callback(GtkWidget *widget, struct conversation *c) | 379 void block_callback(GtkWidget *widget, struct conversation *c) |
380 { | 380 { |
381 show_add_perm(c->name); | 381 show_add_perm(c->name); |
382 gtk_widget_grab_focus(c->entry); | 382 gtk_widget_grab_focus(c->entry); |
383 } | 383 } |
384 | 384 |
385 static void warn_callback(GtkWidget *widget, struct conversation *c) | 385 void warn_callback(GtkWidget *widget, struct conversation *c) |
386 { | 386 { |
387 show_warn_dialog(c->name); | 387 show_warn_dialog(c->name); |
388 gtk_widget_grab_focus(c->entry); | 388 gtk_widget_grab_focus(c->entry); |
389 } | 389 } |
390 | 390 |
391 static void info_callback(GtkWidget *widget, struct conversation *c) | 391 void info_callback(GtkWidget *w, struct conversation *c) |
392 { | 392 { |
393 serv_get_info(c->name); | 393 if (c->is_chat) { |
394 gtk_widget_grab_focus(c->entry); | 394 char *name; |
395 } | 395 GList *i; |
396 | 396 |
397 gboolean user_keypress_callback(GtkWidget *entry, GdkEventKey *event, struct conversation *c) | 397 i = GTK_LIST(c->list)->selection; |
398 if (i) | |
399 name = (char *)gtk_object_get_user_data(GTK_OBJECT(i->data)); | |
400 else | |
401 return; | |
402 | |
403 serv_get_info(name); | |
404 } else { | |
405 serv_get_info(c->name); | |
406 gtk_widget_grab_focus(c->entry); | |
407 } | |
408 } | |
409 | |
410 gboolean keypress_callback(GtkWidget *entry, GdkEventKey *event, struct conversation *c) | |
398 { | 411 { |
399 int pos; | 412 int pos; |
400 if(event->keyval==GDK_Return) { | 413 if(event->keyval==GDK_Return) { |
401 if(!(event->state & GDK_SHIFT_MASK) | 414 if(!(event->state & GDK_SHIFT_MASK) |
402 && (general_options & OPT_GEN_ENTER_SENDS)) { | 415 && (general_options & OPT_GEN_ENTER_SENDS)) { |
413 return TRUE; | 426 return TRUE; |
414 | 427 |
415 } | 428 } |
416 | 429 |
417 | 430 |
418 static void send_callback(GtkWidget *widget, struct conversation *c) | 431 void send_callback(GtkWidget *widget, struct conversation *c) |
419 { | 432 { |
420 char *buf = g_malloc(BUF_LEN * 4); | 433 char *buf = g_malloc(BUF_LEN * 4); |
421 char *buf2; | 434 char *buf2; |
435 char *buf3; | |
422 gchar *buf4; | 436 gchar *buf4; |
423 int hdrlen; | 437 int hdrlen; |
424 | 438 |
425 /* FIXME : for USE_OSCAR, libfaim can send messages much longer | 439 /* FIXME : for USE_OSCAR, libfaim can send messages much longer |
426 * than this (I think it's about 7K rather than 4K. So we need | 440 * than this (I think it's about 7K rather than 4K. So we need |
431 | 445 |
432 if (!strlen(buf)) { | 446 if (!strlen(buf)) { |
433 return; | 447 return; |
434 } | 448 } |
435 | 449 |
450 gtk_editable_delete_text(GTK_EDITABLE(c->entry), 0, -1); | |
451 | |
436 if (general_options & OPT_GEN_SEND_LINKS) { | 452 if (general_options & OPT_GEN_SEND_LINKS) { |
437 linkify_text(buf); | 453 linkify_text(buf); |
438 } | 454 } |
439 | 455 |
440 /* Let us determine how long the message CAN be. | 456 /* Let us determine how long the message CAN be. |
472 { | 488 { |
473 GList *ca = callbacks; | 489 GList *ca = callbacks; |
474 struct gaim_callback *g; | 490 struct gaim_callback *g; |
475 void (*function)(char *, char **, void *); | 491 void (*function)(char *, char **, void *); |
476 char *buffy = g_strdup(buf); | 492 char *buffy = g_strdup(buf); |
493 enum gaim_event evnt = c->is_chat ? event_chat_send : event_im_send; | |
477 while (ca) { | 494 while (ca) { |
478 g = (struct gaim_callback *)(ca->data); | 495 g = (struct gaim_callback *)(ca->data); |
479 if (g->event == event_im_send && g->function != NULL) { | 496 if (g->event == evnt && g->function != NULL) { |
480 function = g->function; | 497 function = g->function; |
481 (*function)(c->name, &buffy, g->data); | 498 (*function)(c->name, &buffy, g->data); |
482 } | 499 } |
483 ca = ca->next; | 500 ca = ca->next; |
484 } | 501 } |
489 g_snprintf(buf, BUF_LONG, "%s", buffy); | 506 g_snprintf(buf, BUF_LONG, "%s", buffy); |
490 g_free(buffy); | 507 g_free(buffy); |
491 } | 508 } |
492 #endif | 509 #endif |
493 | 510 |
494 write_to_conv(c, buf, WFLAG_SEND); | 511 if (!c->is_chat) { |
495 | 512 buf3 = g_strdup(buf); |
496 gtk_editable_delete_text(GTK_EDITABLE(c->entry), 0, -1); | 513 write_to_conv(c, buf3, WFLAG_SEND, NULL); |
514 g_free(buf3); | |
515 } | |
497 | 516 |
498 escape_text(buf); | 517 escape_text(buf); |
499 if (escape_message(buf) > MSG_LEN - hdrlen) { | 518 if (escape_message(buf) > MSG_LEN - hdrlen) { |
500 do_error_dialog(_("Message too long, some data truncated."), _("Error")); | 519 do_error_dialog(_("Message too long, some data truncated."), _("Error")); |
501 } | 520 } |
502 | 521 |
503 serv_send_im(c->name, buf, 0); | 522 if (c->is_chat) { |
523 serv_chat_send(c->id, buf); | |
524 | |
525 /* no sound because we do that when we receive our message */ | |
526 } else { | |
527 serv_send_im(c->name, buf, 0); | |
528 | |
529 if (c->makesound && (sound_options & OPT_SOUND_SEND)) | |
530 play_sound(SEND); | |
531 } | |
504 | 532 |
505 quiet_set(c->bold, FALSE); | 533 quiet_set(c->bold, FALSE); |
506 quiet_set(c->strike, FALSE); | 534 quiet_set(c->strike, FALSE); |
507 quiet_set(c->italic, FALSE); | 535 quiet_set(c->italic, FALSE); |
508 quiet_set(c->underline, FALSE); | 536 quiet_set(c->underline, FALSE); |
509 quiet_set(c->font, FALSE); | 537 quiet_set(c->font, FALSE); |
510 quiet_set(c->palette, FALSE); | 538 quiet_set(c->palette, FALSE); |
511 quiet_set(c->link, FALSE); | 539 quiet_set(c->link, FALSE); |
512 | 540 |
513 if (c->makesound && (sound_options & OPT_SOUND_SEND)) | |
514 play_sound(SEND); | |
515 | |
516 if ((general_options & OPT_GEN_BACK_ON_IM) && awaymessage != NULL) { | 541 if ((general_options & OPT_GEN_BACK_ON_IM) && awaymessage != NULL) { |
517 do_im_back(); | 542 do_im_back(); |
518 } | 543 } |
519 | 544 |
520 set_font_face(NULL, c); | 545 set_font_face(NULL, c); |
521 | 546 |
522 gtk_widget_grab_focus(c->entry); | 547 gtk_widget_grab_focus(c->entry); |
523 | 548 |
524 g_free(buf2); | 549 g_free(buf2); |
525 g_free(buf); | 550 g_free(buf); |
682 debug_print(debug_buff); | 707 debug_print(debug_buff); |
683 gtk_editable_set_position(GTK_EDITABLE(entry), pos); | 708 gtk_editable_set_position(GTK_EDITABLE(entry), pos); |
684 gtk_widget_grab_focus(entry); | 709 gtk_widget_grab_focus(entry); |
685 } | 710 } |
686 | 711 |
687 static void toggle_color(GtkWidget *color, struct conversation *c) | 712 void toggle_color(GtkWidget *color, struct conversation *c) |
688 { | 713 { |
689 if (state_lock) | 714 if (state_lock) |
690 return; | 715 return; |
691 if (GTK_TOGGLE_BUTTON(color)->active) | 716 if (GTK_TOGGLE_BUTTON(color)->active) |
692 show_color_dialog(c, color); | 717 show_color_dialog(c, color); |
693 else | 718 else |
694 advance_past(c->entry, "<FONT COLOR>", "</FONT>" ); | 719 advance_past(c->entry, "<FONT COLOR>", "</FONT>" ); |
695 } | 720 } |
696 | 721 |
697 static void toggle_font(GtkWidget *font, struct conversation *c) | 722 void toggle_font(GtkWidget *font, struct conversation *c) |
698 { | 723 { |
699 if (state_lock) | 724 if (state_lock) |
700 return; | 725 return; |
701 if (GTK_TOGGLE_BUTTON(font)->active) | 726 if (GTK_TOGGLE_BUTTON(font)->active) |
702 show_font_dialog(c, font); | 727 show_font_dialog(c, font); |
839 /*------------------------------------------------------------------------*/ | 864 /*------------------------------------------------------------------------*/ |
840 /* Takin care of the window.. */ | 865 /* Takin care of the window.. */ |
841 /*------------------------------------------------------------------------*/ | 866 /*------------------------------------------------------------------------*/ |
842 | 867 |
843 | 868 |
844 void write_to_conv(struct conversation *c, char *what, int flags) | 869 /* this is going to be interesting since the conversation could either be a |
870 * normal IM conversation or a chat window. but hopefully it won't matter */ | |
871 void write_to_conv(struct conversation *c, char *what, int flags, char *who) | |
845 { | 872 { |
846 char *buf = g_malloc(BUF_LONG); | 873 char *buf = g_malloc(BUF_LONG); |
847 char *buf2 = g_malloc(BUF_LONG); | 874 char *buf2 = g_malloc(BUF_LONG); |
848 char *who = NULL; | 875 char *buf3; |
876 char *str; | |
849 FILE *fd; | 877 FILE *fd; |
850 char colour[10]; | 878 char colour[10]; |
851 GdkBitmap *mask; | 879 GdkBitmap *mask; |
852 GdkPixmap *face; | 880 GdkPixmap *face; |
853 int state; | 881 int state; |
854 int y; | 882 int y; |
855 int i; | 883 int i; |
856 char *smiley = g_malloc(7); | 884 char *smiley = g_malloc(7); |
885 | |
886 if (!who) who = c->name; | |
857 | 887 |
858 if (flags & WFLAG_SYSTEM) { | 888 if (flags & WFLAG_SYSTEM) { |
859 | 889 |
860 gtk_html_freeze(GTK_HTML(c->text)); | 890 gtk_html_freeze(GTK_HTML(c->text)); |
861 | 891 |
881 } | 911 } |
882 } | 912 } |
883 | 913 |
884 } else { | 914 } else { |
885 | 915 |
886 if (flags & WFLAG_RECV) { | 916 buf3 = g_malloc(BUF_LONG); |
887 strcpy(colour, "#ff0000"); | 917 |
888 who = c->name; | 918 if (flags & WFLAG_WHISPER) { |
889 } else if (flags & WFLAG_SEND) { | 919 /* if we're whispering, it's not an autoresponse */ |
890 strcpy(colour, "#0000ff"); | 920 if (meify(what)) { |
891 who = current_user->username; | 921 str = g_malloc(64); |
892 } | 922 g_snprintf(str, 62, "***%s", who); |
893 | 923 strcpy(colour, "#6C2585\0"); |
894 if (flags & WFLAG_AUTO) | 924 } else { |
895 sprintf(buf2, " %s", AUTO_RESPONSE); | 925 str = g_malloc(64); |
896 else | 926 g_snprintf(str, 62, "*%s*:", who); |
897 buf2[0]=0; /* sprintf(buf2, ""); */ | 927 strcpy(colour, "#00ff00\0"); |
898 | 928 } |
899 if (display_options & OPT_DISP_SHOW_TIME) | 929 } else { |
900 g_snprintf(buf, BUF_LONG, "<FONT COLOR=\"%s\"><B>%s %s:%s</B></FONT> ", colour, date(), who, buf2); | 930 if (meify(what)) { |
901 else | 931 str = g_malloc(64); |
902 g_snprintf(buf, BUF_LONG, "<FONT COLOR=\"%s\"><B>%s:%s</B></FONT> ", colour, who, buf2); | 932 if (flags & WFLAG_AUTO) |
933 g_snprintf(str, 62, "%s ***%s", AUTO_RESPONSE, who); | |
934 else | |
935 g_snprintf(str, 62, "***%s", who); | |
936 strcpy(colour, "#062585\0"); | |
937 } else { | |
938 str = g_malloc(64); | |
939 if (flags & WFLAG_AUTO) | |
940 g_snprintf(str, 62, "%s %s", who, AUTO_RESPONSE); | |
941 else | |
942 g_snprintf(str, 62, "%s:", who); | |
943 if (flags & WFLAG_RECV) | |
944 strcpy(colour, "#ff0000"); | |
945 else if (flags & WFLAG_SEND) | |
946 strcpy(colour, "#0000ff"); | |
947 } | |
948 } | |
949 | |
950 if (display_options & OPT_DISP_SHOW_TIME) | |
951 g_snprintf(buf, BUF_LONG, "<FONT COLOR=\"%s\"><B>%s %s</B></FONT> ", colour, date(), str); | |
952 else | |
953 g_snprintf(buf, BUF_LONG, "<FONT COLOR=\"%s\"><B>%s</B></FONT>", colour, str); | |
903 | 954 |
904 gtk_html_freeze(GTK_HTML(c->text)); | 955 gtk_html_freeze(GTK_HTML(c->text)); |
905 | 956 |
906 y = 0; | 957 y = 0; |
907 state = 0; | 958 state = 0; |
915 for (i = 0; i < strlen(what); i++) | 966 for (i = 0; i < strlen(what); i++) |
916 { | 967 { |
917 buf2[y] = what[i]; | 968 buf2[y] = what[i]; |
918 y++; | 969 y++; |
919 | 970 |
920 if ( (what[i] == ':') || (what[i] == ';') || (what[i] == 'O') ) | 971 if ( (what[i] == ':') || (what[i] == ';') || (what[i] == '8') ) |
921 { | 972 { |
922 if (state < 2) | 973 if (state < 2) |
923 { | 974 { |
924 smiley[state] = what[i]; | 975 smiley[state] = what[i]; |
925 state++; | 976 state++; |
1005 | 1056 |
1006 gtk_html_thaw(GTK_HTML(c->text)); | 1057 gtk_html_thaw(GTK_HTML(c->text)); |
1007 | 1058 |
1008 if ((general_options & OPT_GEN_LOG_ALL) || find_log_info(c->name)) { | 1059 if ((general_options & OPT_GEN_LOG_ALL) || find_log_info(c->name)) { |
1009 char *t1, *t2; | 1060 char *t1, *t2; |
1061 char *nm = g_malloc(256); | |
1062 if (c->is_chat) | |
1063 g_snprintf(nm, 256, "%s.chat", c->name); | |
1064 else | |
1065 g_snprintf(nm, 256, "%s", c->name); | |
1010 | 1066 |
1011 if (general_options & OPT_GEN_STRIP_HTML) { | 1067 if (general_options & OPT_GEN_STRIP_HTML) { |
1012 t1 = strip_html(buf); | 1068 t1 = strip_html(buf); |
1013 t2 = strip_html(what); | 1069 t2 = strip_html(what); |
1014 } else { | 1070 } else { |
1015 t1 = buf; | 1071 t1 = buf; |
1016 t2 = what; | 1072 t2 = what; |
1017 } | 1073 } |
1018 fd = open_log_file(c->name); | 1074 fd = open_log_file(nm); |
1019 fprintf(fd, "%s%s\n", t1, t2); | 1075 fprintf(fd, "%s%s\n", t1, t2); |
1020 fclose(fd); | 1076 fclose(fd); |
1021 if (general_options & OPT_GEN_STRIP_HTML) { | 1077 if (general_options & OPT_GEN_STRIP_HTML) { |
1022 g_free(t1); | 1078 g_free(t1); |
1023 g_free(t2); | 1079 g_free(t2); |
1024 } | 1080 } |
1081 g_free(nm); | |
1025 } | 1082 } |
1026 } | 1083 } |
1027 | 1084 |
1028 /* if (!GTK_WIDGET_MAPPED(c->window)) { | 1085 /* if (!GTK_WIDGET_MAPPED(c->window)) { |
1029 | 1086 |
1032 NULL, (gchar **)aimicon2_xpm); | 1089 NULL, (gchar **)aimicon2_xpm); |
1033 gdk_window_set_icon(c->window->window, NULL, dark_icon_pm, dark_icon_bm); | 1090 gdk_window_set_icon(c->window->window, NULL, dark_icon_pm, dark_icon_bm); |
1034 } | 1091 } |
1035 */ | 1092 */ |
1036 | 1093 |
1037 if (general_options & OPT_GEN_POPUP_WINDOWS) | 1094 if ((c->is_chat && (general_options & OPT_GEN_POPUP_CHAT)) || |
1095 (!c->is_chat && (general_options & OPT_GEN_POPUP_WINDOWS))) | |
1038 gdk_window_show(c->window->window); | 1096 gdk_window_show(c->window->window); |
1039 | 1097 |
1040 g_free(smiley); | 1098 g_free(smiley); |
1041 g_free(buf); | 1099 g_free(buf); |
1042 g_free(buf2); | 1100 g_free(buf2); |
1065 gtk_signal_emit_stop_by_name(GTK_OBJECT(editable), "insert-text"); | 1123 gtk_signal_emit_stop_by_name(GTK_OBJECT(editable), "insert-text"); |
1066 } | 1124 } |
1067 } | 1125 } |
1068 | 1126 |
1069 | 1127 |
1070 void show_conv(struct conversation *c) | 1128 GtkWidget *build_conv_toolbar(struct conversation *c) { |
1071 { | |
1072 GtkWidget *win; | |
1073 char buf[256]; | |
1074 GtkWidget *text; | |
1075 GtkWidget *sw; | |
1076 GtkWidget *send; | |
1077 GtkWidget *info; | |
1078 GtkWidget *warn; | |
1079 GtkWidget *block; | |
1080 /* GtkWidget *color; */ | |
1081 GtkWidget *close; | |
1082 GtkWidget *entry; | |
1083 GtkWidget *toolbar; | |
1084 GtkWidget *bbox; | |
1085 GtkWidget *vbox; | |
1086 GtkWidget *vbox2; | |
1087 GtkWidget *paned; | |
1088 GtkWidget *add; | |
1089 GdkPixmap *strike_i, *small_i, *normal_i, *big_i, *bold_i, *italic_i, *underline_i, *speaker_i, *wood_i, *palette_i, *link_i, *font_i; | 1129 GdkPixmap *strike_i, *small_i, *normal_i, *big_i, *bold_i, *italic_i, *underline_i, *speaker_i, *wood_i, *palette_i, *link_i, *font_i; |
1090 GtkWidget *strike_p, *small_p, *normal_p, *big_p, *bold_p, *italic_p, *underline_p, *speaker_p, *wood_p, *palette_p, *link_p, *font_p; | 1130 GtkWidget *strike_p, *small_p, *normal_p, *big_p, *bold_p, *italic_p, *underline_p, *speaker_p, *wood_p, *palette_p, *link_p, *font_p; |
1091 GtkWidget *strike, *small, *normal, *big, *bold, *italic, *underline, *speaker, *wood, *palette, *link, *font; | 1131 GtkWidget *strike, *small, *normal, *big, *bold, *italic, *underline, *speaker, *wood, *palette, *link, *font; |
1092 GdkBitmap *mask; | 1132 GdkBitmap *mask; |
1093 | 1133 GtkWidget *toolbar; |
1094 win = gtk_window_new(GTK_WINDOW_TOPLEVEL); | 1134 GtkWidget *win; |
1095 gtk_window_set_policy(GTK_WINDOW(win), TRUE, TRUE, TRUE); | 1135 GtkWidget *entry; |
1096 | 1136 |
1097 gtk_widget_realize(win); | |
1098 aol_icon(win->window); | |
1099 | |
1100 | |
1101 c->window = win; | |
1102 | |
1103 send = gtk_button_new_with_label(_("Send")); | |
1104 info = gtk_button_new_with_label(_("Info")); | |
1105 warn = gtk_button_new_with_label(_("Warn")); | |
1106 /* color = gtk_button_new_with_label("Color"); */ | |
1107 close = gtk_button_new_with_label(_("Close")); | |
1108 if (find_buddy(c->name) != NULL) { | |
1109 add = gtk_button_new_with_label(_("Remove")); | |
1110 } | |
1111 else { | |
1112 add = gtk_button_new_with_label(_("Add")); | |
1113 } | |
1114 block = gtk_button_new_with_label(_("Block")); | |
1115 | |
1116 | |
1117 bbox = gtk_hbox_new(TRUE, 0); | |
1118 vbox = gtk_vbox_new(FALSE, 0); | |
1119 vbox2 = gtk_vbox_new(FALSE, 0); | |
1120 paned = gtk_vpaned_new(); | |
1121 | |
1122 gtk_paned_pack1(GTK_PANED(paned), vbox, FALSE, TRUE); | |
1123 gtk_paned_pack2(GTK_PANED(paned), vbox2, FALSE, FALSE); | |
1124 gtk_widget_show(vbox2); | |
1125 gtk_widget_show(paned); | |
1126 | |
1127 entry = gtk_text_new(NULL, NULL); | |
1128 gtk_text_set_editable(GTK_TEXT(entry), TRUE); | |
1129 gtk_text_set_word_wrap(GTK_TEXT(entry), TRUE); | |
1130 | |
1131 /* Toolbar */ | |
1132 toolbar = gtk_toolbar_new(GTK_ORIENTATION_HORIZONTAL, GTK_TOOLBAR_ICONS); | 1137 toolbar = gtk_toolbar_new(GTK_ORIENTATION_HORIZONTAL, GTK_TOOLBAR_ICONS); |
1138 win = c->window; | |
1139 entry = c->entry; | |
1133 | 1140 |
1134 link_i = gdk_pixmap_create_from_xpm_d(win->window, &mask, | 1141 link_i = gdk_pixmap_create_from_xpm_d(win->window, &mask, |
1135 &win->style->white, link_xpm ); | 1142 &win->style->white, link_xpm ); |
1136 link_p = gtk_pixmap_new(link_i, mask); | 1143 link_p = gtk_pixmap_new(link_i, mask); |
1137 gtk_widget_show(link_p); | 1144 gtk_widget_show(link_p); |
1237 gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(wood), FALSE); | 1244 gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(wood), FALSE); |
1238 state_lock = 0; | 1245 state_lock = 0; |
1239 | 1246 |
1240 gtk_widget_show(toolbar); | 1247 gtk_widget_show(toolbar); |
1241 | 1248 |
1242 c->entry = entry; | |
1243 c->bold = bold; | 1249 c->bold = bold; |
1244 c->strike = strike; | 1250 c->strike = strike; |
1245 c->italic = italic; | 1251 c->italic = italic; |
1246 c->underline = underline; | 1252 c->underline = underline; |
1247 c->log_button = wood; | 1253 c->log_button = wood; |
1248 c->palette = palette; | 1254 c->palette = palette; |
1249 c->link = link; | 1255 c->link = link; |
1250 c->add_button = add; | |
1251 c->font = font; | 1256 c->font = font; |
1252 | 1257 |
1253 gtk_widget_set_sensitive(c->log_button, ((general_options & OPT_GEN_LOG_ALL)) ? FALSE : TRUE); | 1258 gtk_widget_set_sensitive(c->log_button, ((general_options & OPT_GEN_LOG_ALL)) ? FALSE : TRUE); |
1254 | 1259 |
1255 gtk_widget_set_sensitive(c->bold, ((font_options & OPT_FONT_BOLD)) ? FALSE : TRUE); | 1260 gtk_widget_set_sensitive(c->bold, ((font_options & OPT_FONT_BOLD)) ? FALSE : TRUE); |
1256 gtk_widget_set_sensitive(c->italic, ((font_options & OPT_FONT_ITALIC)) ? FALSE : TRUE); | 1261 gtk_widget_set_sensitive(c->italic, ((font_options & OPT_FONT_ITALIC)) ? FALSE : TRUE); |
1257 gtk_widget_set_sensitive(c->underline, ((font_options & OPT_FONT_UNDERLINE)) ? FALSE : TRUE); | 1262 gtk_widget_set_sensitive(c->underline, ((font_options & OPT_FONT_UNDERLINE)) ? FALSE : TRUE); |
1258 gtk_widget_set_sensitive(c->strike, ((font_options & OPT_FONT_STRIKE)) ? FALSE : TRUE); | 1263 gtk_widget_set_sensitive(c->strike, ((font_options & OPT_FONT_STRIKE)) ? FALSE : TRUE); |
1264 | |
1265 return toolbar; | |
1266 } | |
1267 | |
1268 | |
1269 void show_conv(struct conversation *c) | |
1270 { | |
1271 GtkWidget *win; | |
1272 char buf[256]; | |
1273 GtkWidget *text; | |
1274 GtkWidget *sw; | |
1275 GtkWidget *send; | |
1276 GtkWidget *info; | |
1277 GtkWidget *warn; | |
1278 GtkWidget *block; | |
1279 /* GtkWidget *color; */ | |
1280 GtkWidget *close; | |
1281 GtkWidget *entry; | |
1282 GtkWidget *toolbar; | |
1283 GtkWidget *bbox; | |
1284 GtkWidget *vbox; | |
1285 GtkWidget *vbox2; | |
1286 GtkWidget *paned; | |
1287 GtkWidget *add; | |
1288 | |
1289 win = gtk_window_new(GTK_WINDOW_TOPLEVEL); | |
1290 gtk_window_set_policy(GTK_WINDOW(win), TRUE, TRUE, TRUE); | |
1291 | |
1292 gtk_widget_realize(win); | |
1293 aol_icon(win->window); | |
1294 | |
1259 | 1295 |
1296 c->window = win; | |
1297 | |
1298 send = gtk_button_new_with_label(_("Send")); | |
1299 info = gtk_button_new_with_label(_("Info")); | |
1300 warn = gtk_button_new_with_label(_("Warn")); | |
1301 /* color = gtk_button_new_with_label("Color"); */ | |
1302 close = gtk_button_new_with_label(_("Close")); | |
1303 if (find_buddy(c->name) != NULL) { | |
1304 add = gtk_button_new_with_label(_("Remove")); | |
1305 } | |
1306 else { | |
1307 add = gtk_button_new_with_label(_("Add")); | |
1308 } | |
1309 block = gtk_button_new_with_label(_("Block")); | |
1310 | |
1311 | |
1312 bbox = gtk_hbox_new(TRUE, 0); | |
1313 vbox = gtk_vbox_new(FALSE, 0); | |
1314 vbox2 = gtk_vbox_new(FALSE, 0); | |
1315 paned = gtk_vpaned_new(); | |
1316 | |
1317 gtk_paned_pack1(GTK_PANED(paned), vbox, FALSE, TRUE); | |
1318 gtk_paned_pack2(GTK_PANED(paned), vbox2, FALSE, FALSE); | |
1319 gtk_widget_show(vbox2); | |
1320 gtk_widget_show(paned); | |
1321 | |
1322 entry = gtk_text_new(NULL, NULL); | |
1323 gtk_text_set_editable(GTK_TEXT(entry), TRUE); | |
1324 gtk_text_set_word_wrap(GTK_TEXT(entry), TRUE); | |
1260 gtk_object_set_user_data(GTK_OBJECT(entry), c); | 1325 gtk_object_set_user_data(GTK_OBJECT(entry), c); |
1261 | 1326 c->entry = entry; |
1327 | |
1328 /* Toolbar */ | |
1329 toolbar = build_conv_toolbar(c); | |
1330 | |
1331 | |
1332 c->add_button = add; | |
1262 | 1333 |
1263 | 1334 |
1264 gtk_signal_connect(GTK_OBJECT(entry), "activate", GTK_SIGNAL_FUNC(send_callback),c); | 1335 gtk_signal_connect(GTK_OBJECT(entry), "activate", GTK_SIGNAL_FUNC(send_callback),c); |
1265 | 1336 |
1266 /* Text box */ | 1337 /* Text box */ |
1298 gtk_signal_connect(GTK_OBJECT(info), "clicked", GTK_SIGNAL_FUNC(info_callback), c); | 1369 gtk_signal_connect(GTK_OBJECT(info), "clicked", GTK_SIGNAL_FUNC(info_callback), c); |
1299 gtk_signal_connect(GTK_OBJECT(warn), "clicked", GTK_SIGNAL_FUNC(warn_callback), c); | 1370 gtk_signal_connect(GTK_OBJECT(warn), "clicked", GTK_SIGNAL_FUNC(warn_callback), c); |
1300 gtk_signal_connect(GTK_OBJECT(block), "clicked", GTK_SIGNAL_FUNC(block_callback), c); | 1371 gtk_signal_connect(GTK_OBJECT(block), "clicked", GTK_SIGNAL_FUNC(block_callback), c); |
1301 /* gtk_signal_connect(GTK_OBJECT(color), "clicked", GTK_SIGNAL_FUNC(color_callback), c); */ | 1372 /* gtk_signal_connect(GTK_OBJECT(color), "clicked", GTK_SIGNAL_FUNC(color_callback), c); */ |
1302 | 1373 |
1303 gtk_signal_connect(GTK_OBJECT(entry), "key_press_event", GTK_SIGNAL_FUNC(user_keypress_callback), c); | 1374 gtk_signal_connect(GTK_OBJECT(entry), "key_press_event", GTK_SIGNAL_FUNC(keypress_callback), c); |
1304 gtk_widget_set_usize(entry, 300, 25); | 1375 gtk_widget_set_usize(entry, 300, 25); |
1305 | 1376 |
1306 gtk_box_pack_start(GTK_BOX(bbox), send, TRUE, TRUE, 5); | 1377 gtk_box_pack_start(GTK_BOX(bbox), send, TRUE, TRUE, 5); |
1307 gtk_box_pack_start(GTK_BOX(bbox), info, TRUE, TRUE, 5); | 1378 gtk_box_pack_start(GTK_BOX(bbox), info, TRUE, TRUE, 5); |
1308 gtk_box_pack_start(GTK_BOX(bbox), warn, TRUE, TRUE, 5); | 1379 gtk_box_pack_start(GTK_BOX(bbox), warn, TRUE, TRUE, 5); |