# HG changeset patch # User Sean Egan # Date 1112500319 0 # Node ID ffa44a5159e0e8d05ddee135689c7cd3f205127f # Parent b640d066eb51d46589281527342f8280c6283be5 [gaim-migrate @ 12392] To test Tim's new code, I needed a way to set background colors, so I changed gtkimhtmltoolbar such that now it will set the body background color unless text is selected in which case it will set the font background color on that text only. That seems sensible. Then I tested Tim's new code and it went into an infinite loop. Twice ;). Maybe I'll have time to check that out later. committer: Tailor Script diff -r b640d066eb51 -r ffa44a5159e0 src/gtkimhtml.c --- a/src/gtkimhtml.c Sat Apr 02 23:59:49 2005 +0000 +++ b/src/gtkimhtml.c Sun Apr 03 03:51:59 2005 +0000 @@ -531,7 +531,9 @@ int buf_x, buf_y; GSList *tags, *l; GdkRectangle visible_rect; - + GdkGC *gc = gdk_gc_new(GDK_DRAWABLE(event->window)); + GdkColor gcolor; + gtk_text_view_get_visible_rect(GTK_TEXT_VIEW(widget), &visible_rect); gtk_text_view_buffer_to_window_coords(GTK_TEXT_VIEW(widget), GTK_TEXT_WINDOW_TEXT, @@ -543,6 +545,29 @@ gtk_text_view_window_to_buffer_coords(GTK_TEXT_VIEW(widget), GTK_TEXT_WINDOW_TEXT, event->area.x, event->area.y, &buf_x, &buf_y); + if (GTK_IMHTML(widget)->editable || GTK_IMHTML(widget)->wbfo) { + + if (GTK_IMHTML(widget)->edit.background) { + gdk_color_parse(GTK_IMHTML(widget)->edit.background, &gcolor); + gdk_gc_set_rgb_fg_color(gc, &gcolor); + } else { + gdk_gc_set_rgb_fg_color(gc, &(widget->style->base[GTK_WIDGET_STATE(widget)])); + } + + gdk_draw_rectangle(event->window, + gc, + TRUE, + visible_rect.x, visible_rect.y, visible_rect.width, visible_rect.height); + gdk_gc_unref(gc); + + if (GTK_WIDGET_CLASS (parent_class)->expose_event) + return (* GTK_WIDGET_CLASS (parent_class)->expose_event) + (widget, event); + + return FALSE; + + } + gtk_text_view_get_iter_at_location(GTK_TEXT_VIEW(widget), &start, buf_x, buf_y); gtk_text_view_get_iter_at_location(GTK_TEXT_VIEW(widget), &end, buf_x + event->area.width, buf_y + event->area.height); @@ -552,7 +577,6 @@ cur = start; while (gtk_text_iter_in_range(&cur, &start, &end)) { - GdkGC *gc = gdk_gc_new(GDK_DRAWABLE(event->window)); tags = gtk_text_iter_get_tags(&cur); for (l = tags; l; l = l->next) { @@ -560,8 +584,7 @@ GdkRectangle rect; GdkRectangle tag_area; const char *color; - GdkColor gcolor; - + if (strncmp(tag->name, "BACKGROUND ", 11)) continue; @@ -612,7 +635,6 @@ } g_slist_free(tags); - gdk_gc_unref(gc); gtk_text_iter_forward_to_tag_toggle(&cur, NULL); } #if 0 @@ -684,6 +706,8 @@ l = l->next; } #endif + gdk_gc_unref(gc); + if (GTK_WIDGET_CLASS (parent_class)->expose_event) return (* GTK_WIDGET_CLASS (parent_class)->expose_event) (widget, event); diff -r b640d066eb51 -r ffa44a5159e0 src/gtkimhtmltoolbar.c --- a/src/gtkimhtmltoolbar.c Sat Apr 02 23:59:49 2005 +0000 +++ b/src/gtkimhtmltoolbar.c Sun Apr 03 03:51:59 2005 +0000 @@ -315,7 +315,10 @@ text_color.red / 256, text_color.green / 256, text_color.blue / 256); - gtk_imhtml_toggle_backcolor(GTK_IMHTML(toolbar->imhtml), open_tag); + if (gtk_text_buffer_get_selection_bounds(GTK_IMHTML(toolbar->imhtml)->text_buffer, NULL, NULL)) + gtk_imhtml_toggle_backcolor(GTK_IMHTML(toolbar->imhtml), open_tag); + else + gtk_imhtml_toggle_background(GTK_IMHTML(toolbar->imhtml), open_tag); g_free(open_tag); cancel_toolbar_bgcolor(NULL, toolbar);