changeset 10777:ffa44a5159e0

[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 <tailor@pidgin.im>
author Sean Egan <seanegan@gmail.com>
date Sun, 03 Apr 2005 03:51:59 +0000
parents b640d066eb51
children e4cbe9401018
files src/gtkimhtml.c src/gtkimhtmltoolbar.c
diffstat 2 files changed, 33 insertions(+), 6 deletions(-) [+]
line wrap: on
line diff
--- 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);
--- 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);