comparison src/conversation.c @ 230:83dd297aa363

[gaim-migrate @ 240] Added a few patches from fflewddur to add default away messages, save prefs after deleting an away message, and *duh* *duh* *duh* *duh* presenting..... font face selection dialog! Thanks fflewddur. I also added a pixmap for font face to eventually go on the conversation windows, but I didn't implement it yet. committer: Tailor Script <tailor@pidgin.im>
author Eric Warmenhoven <eric@warmenhoven.org>
date Wed, 10 May 2000 10:56:25 +0000
parents ec0686b3b03f
children 985635758c33
comparison
equal deleted inserted replaced
229:e8ea7f37e28f 230:83dd297aa363
35 #include "pixmaps/bold.xpm" 35 #include "pixmaps/bold.xpm"
36 #include "pixmaps/italic.xpm" 36 #include "pixmaps/italic.xpm"
37 #include "pixmaps/small.xpm" 37 #include "pixmaps/small.xpm"
38 #include "pixmaps/normal.xpm" 38 #include "pixmaps/normal.xpm"
39 #include "pixmaps/big.xpm" 39 #include "pixmaps/big.xpm"
40 /* #include "pixmaps/fontface.xpm" */
40 #include "pixmaps/speaker.xpm" 41 #include "pixmaps/speaker.xpm"
41 /* #include "pixmaps/aimicon2.xpm" */ 42 /* #include "pixmaps/aimicon2.xpm" */
42 #include "pixmaps/wood.xpm" 43 #include "pixmaps/wood.xpm"
43 #include "pixmaps/palette.xpm" 44 #include "pixmaps/palette.xpm"
44 #include "pixmaps/link.xpm" 45 #include "pixmaps/link.xpm"
47 int state_lock=0; 48 int state_lock=0;
48 49
49 GdkPixmap *dark_icon_pm = NULL; 50 GdkPixmap *dark_icon_pm = NULL;
50 GdkBitmap *dark_icon_bm = NULL; 51 GdkBitmap *dark_icon_bm = NULL;
51 52
53 char *fontface;
52 54
53 void check_everything(GtkWidget *entry); 55 void check_everything(GtkWidget *entry);
54 gboolean user_keypress_callback(GtkWidget *entry, GdkEventKey *event, struct conversation *c); 56 gboolean user_keypress_callback(GtkWidget *entry, GdkEventKey *event, struct conversation *c);
55 57 void set_font_face(GtkWidget *widget, struct conversation *c);
56 58
57 /*------------------------------------------------------------------------*/ 59 /*------------------------------------------------------------------------*/
58 /* Helpers */ 60 /* Helpers */
59 /*------------------------------------------------------------------------*/ 61 /*------------------------------------------------------------------------*/
60 62
245 rm_log(find_log_info(p->name)); 247 rm_log(find_log_info(p->name));
246 else 248 else
247 show_log_dialog(p->name); 249 show_log_dialog(p->name);
248 } 250 }
249 251
250
251 static int close_callback(GtkWidget *widget, struct conversation *c) 252 static int close_callback(GtkWidget *widget, struct conversation *c)
252 { 253 {
253 gtk_widget_destroy(c->window); 254 gtk_widget_destroy(c->window);
254 delete_conversation(c); 255 delete_conversation(c);
255 return TRUE; 256 return TRUE;
257 }
258
259 void set_font_face(GtkWidget *widget, struct conversation *c)
260 {
261 char *pre_fontface;
262 int alloc = 0;
263
264 if (!(font_options & OPT_FONT_FACE))
265 return;
266
267 if (fontface)
268 {
269 pre_fontface = g_strconcat("<FONT FACE=\"", fontface, "\">", '\0');
270 alloc++;
271 }
272 else
273 pre_fontface = "<FONT FACE=\"Helvetica\">";
274
275 surround(c->entry, pre_fontface, "</FONT>");
276 gtk_widget_grab_focus(c->entry);
277
278 if (alloc)
279 g_free(pre_fontface);
280 return;
256 } 281 }
257 282
258 static gint delete_event_convo(GtkWidget *w, GdkEventAny *e, struct conversation *c) 283 static gint delete_event_convo(GtkWidget *w, GdkEventAny *e, struct conversation *c)
259 { 284 {
260 delete_conversation(c); 285 delete_conversation(c);
417 442
418 if (awaymessage != NULL) { 443 if (awaymessage != NULL) {
419 do_im_back(); 444 do_im_back();
420 } 445 }
421 446
422 447 set_font_face(NULL, c);
448
423 gtk_widget_grab_focus(c->entry); 449 gtk_widget_grab_focus(c->entry);
424 450
425 g_free(buf2); 451 g_free(buf2);
426 g_free(buf); 452 g_free(buf);
427 } 453 }
500 char *t; 526 char *t;
501 int start = GTK_EDITABLE(entry)->selection_start_pos; 527 int start = GTK_EDITABLE(entry)->selection_start_pos;
502 int finish = GTK_EDITABLE(entry)->selection_end_pos; 528 int finish = GTK_EDITABLE(entry)->selection_end_pos;
503 s = gtk_editable_get_chars(GTK_EDITABLE(entry), 0, -1); 529 s = gtk_editable_get_chars(GTK_EDITABLE(entry), 0, -1);
504 t = s; 530 t = s;
505 while((t = strstr(t, tag))) { 531 if (strstr(tag, "<FONT SIZE="))
506 if (((t-s) < finish) && ((t-s) >= start)) { 532 {
507 gtk_editable_delete_text(GTK_EDITABLE(entry), (t-s), (t-s) + strlen(tag)); 533 while((t = strstr(t, "<FONT SIZE="))) {
508 t = gtk_editable_get_chars(GTK_EDITABLE(entry), 0, -1); 534 if (((t-s) < finish) && ((t-s) >= start)) {
535 gtk_editable_delete_text(GTK_EDITABLE(entry), (t-s), (t-s) + strlen(tag));
536 s = gtk_editable_get_chars(GTK_EDITABLE(entry), 0, -1);
537 t = s;
538 }
539 else t++;
509 } 540 }
510 else t++; 541 }
542 else
543 {
544 while((t = strstr(t, tag))) {
545 if (((t-s) < finish) && ((t-s) >= start)) {
546 gtk_editable_delete_text(GTK_EDITABLE(entry), (t-s), (t-s) + strlen(tag));
547 s = gtk_editable_get_chars(GTK_EDITABLE(entry), 0, -1);
548 t = s;
549 }
550 else t++;
551 }
511 } 552 }
512 g_free(s); 553 g_free(s);
513 } 554 }
514 555
515 void surround(GtkWidget *entry, char *pre, char *post) 556 void surround(GtkWidget *entry, char *pre, char *post)
620 surround(entry, "<I>","</I>"); 661 surround(entry, "<I>","</I>");
621 else 662 else
622 advance_past(entry, "<I>", "</I>"); 663 advance_past(entry, "<I>", "</I>");
623 } 664 }
624 665
666 /* html code to modify font sizes must all be the same length, */
667 /* currently set to 15 chars */
668
625 static void do_small(GtkWidget *small, GtkWidget *entry) 669 static void do_small(GtkWidget *small, GtkWidget *entry)
626 { 670 {
627 if (state_lock) 671 if (state_lock)
628 return; 672 return;
629 surround(entry, "<FONT SIZE=\"-2\">","</FONT>"); 673 surround(entry, "<FONT SIZE=\"1\">","</FONT>");
630 } 674 }
631 675
632 static void do_normal(GtkWidget *normal, GtkWidget *entry) 676 static void do_normal(GtkWidget *normal, GtkWidget *entry)
633 { 677 {
634 if (state_lock) 678 if (state_lock)
638 682
639 static void do_big(GtkWidget *big, GtkWidget *entry) 683 static void do_big(GtkWidget *big, GtkWidget *entry)
640 { 684 {
641 if (state_lock) 685 if (state_lock)
642 return; 686 return;
643 surround(entry, "<FONT SIZE=\"+5\">","</FONT>"); 687 surround(entry, "<FONT SIZE=\"5\">","</FONT>");
644 } 688 }
645 689
646 void check_everything(GtkWidget *entry) 690 void check_everything(GtkWidget *entry)
647 { 691 {
648 struct conversation *c; 692 struct conversation *c;
882 gtk_widget_show(paned); 926 gtk_widget_show(paned);
883 927
884 entry = gtk_text_new(NULL, NULL); 928 entry = gtk_text_new(NULL, NULL);
885 gtk_text_set_editable(GTK_TEXT(entry), TRUE); 929 gtk_text_set_editable(GTK_TEXT(entry), TRUE);
886 gtk_text_set_word_wrap(GTK_TEXT(entry), TRUE); 930 gtk_text_set_word_wrap(GTK_TEXT(entry), TRUE);
887 931
888 /* Toolbar */ 932 /* Toolbar */
889 toolbar = gtk_toolbar_new(GTK_ORIENTATION_HORIZONTAL, GTK_TOOLBAR_ICONS); 933 toolbar = gtk_toolbar_new(GTK_ORIENTATION_HORIZONTAL, GTK_TOOLBAR_ICONS);
890 934
891 link_i = gdk_pixmap_create_from_xpm_d(win->window, &mask, 935 link_i = gdk_pixmap_create_from_xpm_d(win->window, &mask,
892 &win->style->white, link_xpm ); 936 &win->style->white, link_xpm );
1091 1135
1092 gtk_signal_connect(GTK_OBJECT(win), "delete_event", GTK_SIGNAL_FUNC(delete_event_convo), c); 1136 gtk_signal_connect(GTK_OBJECT(win), "delete_event", GTK_SIGNAL_FUNC(delete_event_convo), c);
1093 gtk_signal_connect(GTK_OBJECT(entry), "insert-text", GTK_SIGNAL_FUNC(check_spelling), entry); 1137 gtk_signal_connect(GTK_OBJECT(entry), "insert-text", GTK_SIGNAL_FUNC(check_spelling), entry);
1094 gtk_signal_connect(GTK_OBJECT(entry), "key_press_event", GTK_SIGNAL_FUNC(entry_key_pressed), entry); 1138 gtk_signal_connect(GTK_OBJECT(entry), "key_press_event", GTK_SIGNAL_FUNC(entry_key_pressed), entry);
1095 1139
1140 set_font_face(NULL, c);
1141
1096 gtk_widget_show(win); 1142 gtk_widget_show(win);
1097 1143 }
1098 } 1144
1099 1145
1100