comparison src/gtkimhtml.c @ 10776:b640d066eb51

[gaim-migrate @ 12387] this makes us do full backgrounds only for body tags, and changes how full backgrounds work. Sean, I left a lot of your code there, #if 0'd out. This probably isn't prefect yet, and I think I might have removed one of Sean's more recent changes. So I'm hoping Sean finishes this for me. Or at least yells at me about what to fix. Or at least tries it. committer: Tailor Script <tailor@pidgin.im>
author Tim Ringenbach <marv@pidgin.im>
date Sat, 02 Apr 2005 23:59:49 +0000
parents cb94f248a74e
children ffa44a5159e0
comparison
equal deleted inserted replaced
10775:d47e82ac9918 10776:b640d066eb51
520 } 520 }
521 521
522 return FALSE; 522 return FALSE;
523 } 523 }
524 524
525 struct backcolor_tag {
526 GtkTextMark *start;
527 GtkTextMark *end;
528 char *color;
529 };
530 525
531 static gint 526 static gint
532 gtk_imhtml_expose_event (GtkWidget *widget, 527 gtk_imhtml_expose_event (GtkWidget *widget,
533 GdkEventExpose *event) 528 GdkEventExpose *event)
534 { 529 {
535 GSList *l = GTK_IMHTML(widget)->backcolor_tags; 530 GtkTextIter start, end, cur;
531 int buf_x, buf_y;
532 GSList *tags, *l;
533 GdkRectangle visible_rect;
534
535 gtk_text_view_get_visible_rect(GTK_TEXT_VIEW(widget), &visible_rect);
536 gtk_text_view_buffer_to_window_coords(GTK_TEXT_VIEW(widget),
537 GTK_TEXT_WINDOW_TEXT,
538 visible_rect.x,
539 visible_rect.y,
540 &visible_rect.x,
541 &visible_rect.y);
542
543 gtk_text_view_window_to_buffer_coords(GTK_TEXT_VIEW(widget), GTK_TEXT_WINDOW_TEXT,
544 event->area.x, event->area.y, &buf_x, &buf_y);
545
546 gtk_text_view_get_iter_at_location(GTK_TEXT_VIEW(widget), &start, buf_x, buf_y);
547 gtk_text_view_get_iter_at_location(GTK_TEXT_VIEW(widget), &end,
548 buf_x + event->area.width, buf_y + event->area.height);
549
550
551
552 cur = start;
553
554 while (gtk_text_iter_in_range(&cur, &start, &end)) {
555 GdkGC *gc = gdk_gc_new(GDK_DRAWABLE(event->window));
556 tags = gtk_text_iter_get_tags(&cur);
557
558 for (l = tags; l; l = l->next) {
559 GtkTextTag *tag = l->data;
560 GdkRectangle rect;
561 GdkRectangle tag_area;
562 const char *color;
563 GdkColor gcolor;
564
565 if (strncmp(tag->name, "BACKGROUND ", 11))
566 continue;
567
568 if (gtk_text_iter_ends_tag(&cur, tag))
569 continue;
570
571 gtk_text_view_get_iter_location(GTK_TEXT_VIEW(widget), &cur, &tag_area);
572 gtk_text_view_buffer_to_window_coords(GTK_TEXT_VIEW(widget),
573 GTK_TEXT_WINDOW_TEXT,
574 tag_area.x,
575 tag_area.y,
576 &tag_area.x,
577 &tag_area.y);
578 rect.x = visible_rect.x;
579 rect.y = tag_area.y;
580
581 while (!gtk_text_iter_is_end(&cur) && gtk_text_iter_begins_tag(&cur, tag))
582 gtk_text_iter_forward_to_tag_toggle(&cur, tag);
583 gtk_text_view_get_iter_location(GTK_TEXT_VIEW(widget), &cur, &tag_area);
584 gtk_text_view_buffer_to_window_coords(GTK_TEXT_VIEW(widget),
585 GTK_TEXT_WINDOW_TEXT,
586 tag_area.x,
587 tag_area.y,
588 &tag_area.x,
589 &tag_area.y);
590
591 rect.width = visible_rect.width;
592 if (gtk_text_iter_is_end(&cur))
593 rect.height = visible_rect.y + visible_rect.height - rect.y;
594 else
595 rect.height = tag_area.y + tag_area.height - rect.y
596 + gtk_text_view_get_pixels_below_lines(GTK_TEXT_VIEW(widget));
597
598 color = tag->name + 11;
599
600 gdk_color_parse(color, &gcolor);
601 gdk_gc_set_rgb_fg_color(gc, &gcolor);
602
603
604 gdk_draw_rectangle(event->window,
605 gc,
606 TRUE,
607 rect.x, rect.y, rect.width, rect.height);
608 gaim_debug_info("gtkimhtml", "drawing rect at %d,%d to %d,%d\n",
609 rect.x, rect.y, rect.x+rect.width, rect.y+rect.height);
610 gtk_text_iter_backward_char(&cur);
611 break;
612 }
613
614 g_slist_free(tags);
615 gdk_gc_unref(gc);
616 gtk_text_iter_forward_to_tag_toggle(&cur, NULL);
617 }
618 #if 0
536 while (l) { 619 while (l) {
537 struct backcolor_tag *tag = (struct backcolor_tag*)l->data; 620 struct backcolor_tag *tag = (struct backcolor_tag*)l->data;
538 GdkRectangle visible_rect; 621 GdkRectangle visible_rect;
539 GdkRectangle redraw_rect; 622 GdkRectangle redraw_rect;
540 int top, bottom, height, win_top, win_bottom; 623 int top, bottom, height, win_top, win_bottom;
541 GtkTextIter start, end; 624 GtkTextIter start, end;
542 625
543 GdkGC *gc = gdk_gc_new(GDK_DRAWABLE(event->window)); 626 GdkGC *gc = gdk_gc_new(GDK_DRAWABLE(event->window));
544 GdkColor color; 627 GdkColor color;
545 628
546 gtk_text_view_get_visible_rect (GTK_TEXT_VIEW(widget), &visible_rect); 629 gtk_text_view_get_visible_rect(GTK_TEXT_VIEW(widget), &visible_rect);
547 gtk_text_view_buffer_to_window_coords (GTK_TEXT_VIEW(widget), 630 gtk_text_view_buffer_to_window_coords (GTK_TEXT_VIEW(widget),
548 GTK_TEXT_WINDOW_TEXT, 631 GTK_TEXT_WINDOW_TEXT,
549 visible_rect.x, 632 visible_rect.x,
550 visible_rect.y, 633 visible_rect.y,
551 &redraw_rect.x, 634 &redraw_rect.x,
598 TRUE, 681 TRUE,
599 redraw_rect.x, win_top, redraw_rect.width, win_bottom - win_top); 682 redraw_rect.x, win_top, redraw_rect.width, win_bottom - win_top);
600 gdk_gc_unref(gc); 683 gdk_gc_unref(gc);
601 l = l->next; 684 l = l->next;
602 } 685 }
686 #endif
603 if (GTK_WIDGET_CLASS (parent_class)->expose_event) 687 if (GTK_WIDGET_CLASS (parent_class)->expose_event)
604 return (* GTK_WIDGET_CLASS (parent_class)->expose_event) 688 return (* GTK_WIDGET_CLASS (parent_class)->expose_event)
605 (widget, event); 689 (widget, event);
690
606 return FALSE; 691 return FALSE;
607 } 692 }
608 693
609 694
610 static void paste_unformatted_cb(GtkMenuItem *menu, GtkIMHtml *imhtml) 695 static void paste_unformatted_cb(GtkMenuItem *menu, GtkIMHtml *imhtml)
1218 1303
1219 #ifdef _WIN32 1304 #ifdef _WIN32
1220 /* Register HTML Format as desired clipboard format */ 1305 /* Register HTML Format as desired clipboard format */
1221 win_html_fmt = RegisterClipboardFormat("HTML Format"); 1306 win_html_fmt = RegisterClipboardFormat("HTML Format");
1222 #endif 1307 #endif
1223 imhtml->backcolor_tags = NULL;
1224 } 1308 }
1225 1309
1226 GtkWidget *gtk_imhtml_new(void *a, void *b) 1310 GtkWidget *gtk_imhtml_new(void *a, void *b)
1227 { 1311 {
1228 return GTK_WIDGET(g_object_new(gtk_imhtml_get_type(), NULL)); 1312 return GTK_WIDGET(g_object_new(gtk_imhtml_get_type(), NULL));
2363 case 31: /* H3 */ 2447 case 31: /* H3 */
2364 case 32: /* /H3 */ 2448 case 32: /* /H3 */
2365 case 33: /* HTML */ 2449 case 33: /* HTML */
2366 case 34: /* /HTML */ 2450 case 34: /* /HTML */
2367 case 35: /* BODY */ 2451 case 35: /* BODY */
2452 break;
2368 case 36: /* /BODY */ 2453 case 36: /* /BODY */
2454 gtk_imhtml_toggle_background(imhtml, NULL);
2455 break;
2369 case 37: /* FONT */ 2456 case 37: /* FONT */
2370 case 38: /* HEAD */ 2457 case 38: /* HEAD */
2371 case 39: /* /HEAD */ 2458 case 39: /* /HEAD */
2372 case 40: /* BINARY */ 2459 case 40: /* BINARY */
2373 case 41: /* /BINARY */ 2460 case 41: /* /BINARY */
2447 ws[0] = '\0'; wpos = 0; 2534 ws[0] = '\0'; wpos = 0;
2448 /* NEW_BIT(NEW_TEXT_BIT); */ 2535 /* NEW_BIT(NEW_TEXT_BIT); */
2449 if (bg) 2536 if (bg)
2450 g_free(bg); 2537 g_free(bg);
2451 bg = bgcolor; 2538 bg = bgcolor;
2452 gtk_imhtml_toggle_backcolor(imhtml, bg); 2539 gtk_imhtml_toggle_background(imhtml, bg);
2453 } 2540 }
2454 } 2541 }
2455 break; 2542 break;
2456 case 45: /* A (opt) */ 2543 case 45: /* A (opt) */
2457 { 2544 {
2791 2878
2792 void 2879 void
2793 gtk_imhtml_clear (GtkIMHtml *imhtml) 2880 gtk_imhtml_clear (GtkIMHtml *imhtml)
2794 { 2881 {
2795 GList *del; 2882 GList *del;
2796 GSList *dels;
2797 GtkTextIter start, end; 2883 GtkTextIter start, end;
2798 GObject *object = g_object_ref(G_OBJECT(imhtml)); 2884 GObject *object = g_object_ref(G_OBJECT(imhtml));
2799
2800 for (dels = imhtml->backcolor_tags; dels; dels = dels->next) {
2801 struct backcolor_tag *tag = dels->data;
2802 g_free(tag->color);
2803 g_free(tag);
2804 }
2805 g_slist_free(imhtml->backcolor_tags);
2806 imhtml->backcolor_tags = NULL;
2807 2885
2808 gtk_text_buffer_get_start_iter(imhtml->text_buffer, &start); 2886 gtk_text_buffer_get_start_iter(imhtml->text_buffer, &start);
2809 gtk_text_buffer_get_end_iter(imhtml->text_buffer, &end); 2887 gtk_text_buffer_get_end_iter(imhtml->text_buffer, &end);
2810 gtk_text_buffer_delete(imhtml->text_buffer, &start, &end); 2888 gtk_text_buffer_delete(imhtml->text_buffer, &start, &end);
2811 2889
3254 tag = gtk_text_buffer_create_tag(imhtml->text_buffer, str, "background", color, NULL); 3332 tag = gtk_text_buffer_create_tag(imhtml->text_buffer, str, "background", color, NULL);
3255 3333
3256 return tag; 3334 return tag;
3257 } 3335 }
3258 3336
3337 static GtkTextTag *find_font_background_tag(GtkIMHtml *imhtml, gchar *color)
3338 {
3339 gchar str[19];
3340 GtkTextTag *tag;
3341
3342 g_snprintf(str, sizeof(str), "BACKGROUND %s", color);
3343
3344 tag = gtk_text_tag_table_lookup(gtk_text_buffer_get_tag_table(imhtml->text_buffer), str);
3345 if (!tag)
3346 tag = gtk_text_buffer_create_tag(imhtml->text_buffer, str, NULL);
3347
3348 return tag;
3349 }
3350
3259 static GtkTextTag *find_font_face_tag(GtkIMHtml *imhtml, gchar *face) 3351 static GtkTextTag *find_font_face_tag(GtkIMHtml *imhtml, gchar *face)
3260 { 3352 {
3261 gchar str[256]; 3353 gchar str[256];
3262 GtkTextTag *tag; 3354 GtkTextTag *tag;
3263 3355
3352 static void remove_font_backcolor(GtkIMHtml *imhtml, GtkTextIter *i, GtkTextIter *e, gboolean homo) 3444 static void remove_font_backcolor(GtkIMHtml *imhtml, GtkTextIter *i, GtkTextIter *e, gboolean homo)
3353 { 3445 {
3354 remove_tag_by_prefix(imhtml, i, e, "BACKCOLOR ", 10, homo); 3446 remove_tag_by_prefix(imhtml, i, e, "BACKCOLOR ", 10, homo);
3355 } 3447 }
3356 3448
3449 static void remove_font_background(GtkIMHtml *imhtml, GtkTextIter *i, GtkTextIter *e, gboolean homo)
3450 {
3451 remove_tag_by_prefix(imhtml, i, e, "BACKGROUND ", 10, homo);
3452 }
3453
3357 static void remove_font_link(GtkIMHtml *imhtml, GtkTextIter *i, GtkTextIter *e, gboolean homo) 3454 static void remove_font_link(GtkIMHtml *imhtml, GtkTextIter *i, GtkTextIter *e, gboolean homo)
3358 { 3455 {
3359 remove_tag_by_prefix(imhtml, i, e, "LINK ", 5, homo); 3456 remove_tag_by_prefix(imhtml, i, e, "LINK ", 5, homo);
3360 } 3457 }
3361 3458
3422 gtk_text_buffer_apply_tag(imhtml->text_buffer, 3519 gtk_text_buffer_apply_tag(imhtml->text_buffer,
3423 find_font_backcolor_tag(imhtml, imhtml->edit.backcolor), 3520 find_font_backcolor_tag(imhtml, imhtml->edit.backcolor),
3424 start, end); 3521 start, end);
3425 } 3522 }
3426 3523
3524 if (imhtml->edit.background) {
3525 remove_font_background(imhtml, start, end, TRUE);
3526 gtk_text_buffer_apply_tag(imhtml->text_buffer,
3527 find_font_background_tag(imhtml, imhtml->edit.background),
3528 start, end);
3529 }
3427 if (imhtml->edit.fontface) { 3530 if (imhtml->edit.fontface) {
3428 remove_font_face(imhtml, start, end, TRUE); 3531 remove_font_face(imhtml, start, end, TRUE);
3429 gtk_text_buffer_apply_tag(imhtml->text_buffer, 3532 gtk_text_buffer_apply_tag(imhtml->text_buffer,
3430 find_font_face_tag(imhtml, imhtml->edit.fontface), 3533 find_font_face_tag(imhtml, imhtml->edit.fontface),
3431 start, end); 3534 start, end);
3786 } 3889 }
3787 object = g_object_ref(G_OBJECT(imhtml)); 3890 object = g_object_ref(G_OBJECT(imhtml));
3788 g_object_unref(object); 3891 g_object_unref(object);
3789 } 3892 }
3790 3893
3894 #define gtk_imhtml_toggle_str_tag(imhtml, color, edit_field, remove_func, find_func) { \
3895 GObject *object; \
3896 GtkTextIter start, end; \
3897 \
3898 g_free(edit_field); \
3899 edit_field = NULL; \
3900 \
3901 if (color && strcmp(color, "") != 0) { \
3902 edit_field = g_strdup(color); \
3903 \
3904 if (imhtml->wbfo) { \
3905 gtk_text_buffer_get_bounds(imhtml->text_buffer, &start, &end); \
3906 remove_func(imhtml, &start, &end, TRUE); \
3907 gtk_text_buffer_apply_tag(imhtml->text_buffer, \
3908 find_func(imhtml, edit_field), &start, &end); \
3909 } else { \
3910 gtk_text_buffer_get_iter_at_mark(imhtml->text_buffer, &start, \
3911 gtk_text_buffer_get_mark(imhtml->text_buffer, "insert")); \
3912 if (imhtml->editable && gtk_text_buffer_get_selection_bounds(imhtml->text_buffer, &start, &end)) { \
3913 remove_func(imhtml, &start, &end, FALSE); \
3914 gtk_text_buffer_apply_tag(imhtml->text_buffer, \
3915 find_func(imhtml, \
3916 edit_field), \
3917 &start, &end); \
3918 } \
3919 } \
3920 } else { \
3921 if (imhtml->wbfo) { \
3922 gtk_text_buffer_get_bounds(imhtml->text_buffer, &start, &end); \
3923 remove_func(imhtml, &start, &end, TRUE); \
3924 } \
3925 } \
3926 \
3927 object = g_object_ref(G_OBJECT(imhtml)); \
3928 g_object_unref(object); \
3929 \
3930 return edit_field != NULL; \
3931 }
3932
3791 gboolean gtk_imhtml_toggle_forecolor(GtkIMHtml *imhtml, const char *color) 3933 gboolean gtk_imhtml_toggle_forecolor(GtkIMHtml *imhtml, const char *color)
3792 { 3934 {
3793 GObject *object; 3935 gtk_imhtml_toggle_str_tag(imhtml, color, imhtml->edit.forecolor, remove_font_forecolor, find_font_forecolor_tag);
3794 GtkTextIter start, end;
3795
3796 if (imhtml->edit.forecolor != NULL)
3797 g_free(imhtml->edit.forecolor);
3798
3799 if (color && strcmp(color, "") != 0) {
3800 imhtml->edit.forecolor = g_strdup(color);
3801 if (imhtml->wbfo) {
3802 gtk_text_buffer_get_bounds(imhtml->text_buffer, &start, &end);
3803 remove_font_forecolor(imhtml, &start, &end, TRUE);
3804 gtk_text_buffer_apply_tag(imhtml->text_buffer,
3805 find_font_forecolor_tag(imhtml, imhtml->edit.forecolor), &start, &end);
3806 } else if (imhtml->editable && gtk_text_buffer_get_selection_bounds(imhtml->text_buffer, &start, &end)) {
3807 remove_font_forecolor(imhtml, &start, &end, FALSE);
3808 gtk_text_buffer_apply_tag(imhtml->text_buffer,
3809 find_font_forecolor_tag(imhtml, imhtml->edit.forecolor),
3810 &start, &end);
3811 }
3812 } else {
3813 imhtml->edit.forecolor = NULL;
3814 if (imhtml->wbfo) {
3815 gtk_text_buffer_get_bounds(imhtml->text_buffer, &start, &end);
3816 remove_font_forecolor(imhtml, &start, &end, TRUE);
3817 }
3818 }
3819
3820 object = g_object_ref(G_OBJECT(imhtml));
3821 g_object_unref(object);
3822
3823 return imhtml->edit.forecolor != NULL;
3824 } 3936 }
3825 3937
3826 gboolean gtk_imhtml_toggle_backcolor(GtkIMHtml *imhtml, const char *color) 3938 gboolean gtk_imhtml_toggle_backcolor(GtkIMHtml *imhtml, const char *color)
3827 { 3939 {
3828 GObject *object; 3940 gtk_imhtml_toggle_str_tag(imhtml, color, imhtml->edit.backcolor, remove_font_backcolor, find_font_backcolor_tag);
3829 GtkTextIter start, end; 3941 }
3830 struct backcolor_tag *bct = NULL; 3942
3831 3943 gboolean gtk_imhtml_toggle_background(GtkIMHtml *imhtml, const char *color)
3832 if (imhtml->edit.backcolor != NULL) 3944 {
3833 g_free(imhtml->edit.backcolor); 3945 gtk_imhtml_toggle_str_tag(imhtml, color, imhtml->edit.background, remove_font_background, find_font_background_tag);
3834
3835 imhtml->edit.backcolor = NULL;
3836
3837 if (color && strcmp(color, "") != 0) {
3838 imhtml->edit.backcolor = g_strdup(color);
3839
3840 if (imhtml->wbfo) {
3841 gtk_text_buffer_get_bounds(imhtml->text_buffer, &start, &end);
3842 remove_font_backcolor(imhtml, &start, &end, TRUE);
3843 gtk_text_buffer_apply_tag(imhtml->text_buffer,
3844 find_font_backcolor_tag(imhtml, imhtml->edit.backcolor), &start, &end);
3845 bct = g_malloc(sizeof(struct backcolor_tag));
3846 bct->color = strdup(imhtml->edit.backcolor);
3847 bct->start = gtk_text_buffer_create_mark(imhtml->text_buffer, NULL, &start, TRUE);
3848 bct->end = gtk_text_buffer_create_mark(imhtml->text_buffer, NULL, &end, TRUE);
3849 imhtml->backcolor_tags = g_slist_prepend(imhtml->backcolor_tags, bct);
3850 } else {
3851 bct = g_malloc(sizeof(struct backcolor_tag));
3852 bct->color = strdup(imhtml->edit.backcolor);
3853 gtk_text_buffer_get_iter_at_mark (imhtml->text_buffer, &start,
3854 gtk_text_buffer_get_mark(imhtml->text_buffer, "insert"));
3855 bct->start = gtk_text_buffer_create_mark(imhtml->text_buffer, NULL, &start, TRUE);
3856 bct->end = NULL;
3857 imhtml->backcolor_tags = g_slist_prepend(imhtml->backcolor_tags, bct);
3858 if (imhtml->editable && gtk_text_buffer_get_selection_bounds(imhtml->text_buffer, &start, &end)) {
3859 remove_font_backcolor(imhtml, &start, &end, FALSE);
3860 gtk_text_buffer_apply_tag(imhtml->text_buffer,
3861 find_font_backcolor_tag(imhtml,
3862 imhtml->edit.backcolor), &start, &end);
3863 }
3864 }
3865 } else {
3866 if (imhtml->backcolor_tags) {
3867 bct = ((struct backcolor_tag*)(imhtml->backcolor_tags->data));
3868 if (bct->end == NULL) {
3869 gtk_text_buffer_get_iter_at_mark (imhtml->text_buffer, &end,
3870 gtk_text_buffer_get_mark(imhtml->text_buffer, "insert"));
3871 bct->end = gtk_text_buffer_create_mark(imhtml->text_buffer, NULL, &end, TRUE);
3872 }
3873 }
3874 if (imhtml->wbfo) {
3875 gtk_text_buffer_get_bounds(imhtml->text_buffer, &start, &end);
3876 remove_font_backcolor(imhtml, &start, &end, TRUE);
3877 }
3878 }
3879
3880 object = g_object_ref(G_OBJECT(imhtml));
3881 g_object_unref(object);
3882
3883 return imhtml->edit.backcolor != NULL;
3884 } 3946 }
3885 3947
3886 gboolean gtk_imhtml_toggle_fontface(GtkIMHtml *imhtml, const char *face) 3948 gboolean gtk_imhtml_toggle_fontface(GtkIMHtml *imhtml, const char *face)
3887 { 3949 {
3888 GObject *object; 3950 gtk_imhtml_toggle_str_tag(imhtml, face, imhtml->edit.fontface, remove_font_face, find_font_face_tag);
3889 GtkTextIter start, end;
3890
3891 if (imhtml->edit.fontface != NULL)
3892 g_free(imhtml->edit.fontface);
3893
3894 if (face && strcmp(face, "") != 0) {
3895 imhtml->edit.fontface = g_strdup(face);
3896
3897 if (imhtml->wbfo) {
3898 gtk_text_buffer_get_bounds(imhtml->text_buffer, &start, &end);
3899 remove_font_face(imhtml, &start, &end, TRUE);
3900 gtk_text_buffer_apply_tag(imhtml->text_buffer,
3901 find_font_face_tag(imhtml, imhtml->edit.fontface), &start, &end);
3902 } else if (imhtml->editable && gtk_text_buffer_get_selection_bounds(imhtml->text_buffer, &start, &end)) {
3903 remove_font_face(imhtml, &start, &end, FALSE);
3904 gtk_text_buffer_apply_tag(imhtml->text_buffer,
3905 find_font_face_tag(imhtml, imhtml->edit.fontface),
3906 &start, &end);
3907 }
3908 } else {
3909 imhtml->edit.fontface = NULL;
3910 if (imhtml->wbfo) {
3911 gtk_text_buffer_get_bounds(imhtml->text_buffer, &start, &end);
3912 remove_font_face(imhtml, &start, &end, TRUE);
3913 }
3914 }
3915
3916 object = g_object_ref(G_OBJECT(imhtml));
3917 g_object_unref(object);
3918
3919 return imhtml->edit.fontface != NULL;
3920 } 3951 }
3921 3952
3922 void gtk_imhtml_toggle_link(GtkIMHtml *imhtml, const char *url) 3953 void gtk_imhtml_toggle_link(GtkIMHtml *imhtml, const char *url)
3923 { 3954 {
3924 GObject *object; 3955 GObject *object;
4114 g_snprintf(buf, sizeof(buf), "<font color=\"%s\">", &name[10]); 4145 g_snprintf(buf, sizeof(buf), "<font color=\"%s\">", &name[10]);
4115 return buf; 4146 return buf;
4116 } else if (strncmp(name, "BACKCOLOR ", 10) == 0) { 4147 } else if (strncmp(name, "BACKCOLOR ", 10) == 0) {
4117 g_snprintf(buf, sizeof(buf), "<font back=\"%s\">", &name[10]); 4148 g_snprintf(buf, sizeof(buf), "<font back=\"%s\">", &name[10]);
4118 return buf; 4149 return buf;
4150 } else if (strncmp(name, "BACKGROUND ", 10) == 0) {
4151 g_snprintf(buf, sizeof(buf), "<body bgcolor=\"%s\">", &name[11]);
4152 return buf;
4119 } else if (strncmp(name, "FONT FACE ", 10) == 0) { 4153 } else if (strncmp(name, "FONT FACE ", 10) == 0) {
4120 g_snprintf(buf, sizeof(buf), "<font face=\"%s\">", &name[10]); 4154 g_snprintf(buf, sizeof(buf), "<font face=\"%s\">", &name[10]);
4121 return buf; 4155 return buf;
4122 } else if (strncmp(name, "FONT SIZE ", 10) == 0) { 4156 } else if (strncmp(name, "FONT SIZE ", 10) == 0) {
4123 g_snprintf(buf, sizeof(buf), "<font size=\"%s\">", &name[10]); 4157 g_snprintf(buf, sizeof(buf), "<font size=\"%s\">", &name[10]);
4146 return "</a>"; 4180 return "</a>";
4147 } else if (strncmp(name, "FORECOLOR ", 10) == 0) { 4181 } else if (strncmp(name, "FORECOLOR ", 10) == 0) {
4148 return "</font>"; 4182 return "</font>";
4149 } else if (strncmp(name, "BACKCOLOR ", 10) == 0) { 4183 } else if (strncmp(name, "BACKCOLOR ", 10) == 0) {
4150 return "</font>"; 4184 return "</font>";
4185 } else if (strncmp(name, "BACKGROUND ", 10) == 0) {
4186 return "</body>";
4151 } else if (strncmp(name, "FONT FACE ", 10) == 0) { 4187 } else if (strncmp(name, "FONT FACE ", 10) == 0) {
4152 return "</font>"; 4188 return "</font>";
4153 } else if (strncmp(name, "FONT SIZE ", 10) == 0) { 4189 } else if (strncmp(name, "FONT SIZE ", 10) == 0) {
4154 return "</font>"; 4190 return "</font>";
4155 } else { 4191 } else {