app: fix gimp_text_buffer_get_color_tag()
Change the generated tag names to use #rrggbb notation and compare the colors on an 8 bit basis to make sure the comparison and the tag names exist in the same set of values (otherwise the text buffer gets into an inconsistent state that can even lead to crashes).
This commit is contained in:
@ -947,26 +947,32 @@ gimp_text_buffer_get_color_tag (GimpTextBuffer *buffer,
|
||||
GtkTextTag *tag;
|
||||
gchar name[256];
|
||||
GdkColor gdk_color;
|
||||
guchar r, g, b;
|
||||
|
||||
gimp_rgb_get_uchar (color, &r, &g, &b);
|
||||
|
||||
for (list = buffer->color_tags; list; list = g_list_next (list))
|
||||
{
|
||||
GimpRGB tag_color;
|
||||
guchar tag_r, tag_g, tag_b;
|
||||
|
||||
tag = list->data;
|
||||
|
||||
gimp_text_tag_get_color (tag, &tag_color);
|
||||
|
||||
gimp_rgb_get_uchar (&tag_color, &tag_r, &tag_g, &tag_b);
|
||||
|
||||
/* Do not compare the alpha channel, since it's unused */
|
||||
if (tag_color.r == color->r &&
|
||||
tag_color.g == color->g &&
|
||||
tag_color.b == color->b)
|
||||
if (tag_r == r &&
|
||||
tag_g == g &&
|
||||
tag_b == b)
|
||||
{
|
||||
return tag;
|
||||
}
|
||||
}
|
||||
|
||||
g_snprintf (name, sizeof (name), "color-(%0.f,%0.f,%0.f)",
|
||||
color->r, color->g, color->b);
|
||||
g_snprintf (name, sizeof (name), "color-#%02x%02x%02x",
|
||||
r, g, b);
|
||||
|
||||
gimp_rgb_get_gdk_color (color, &gdk_color);
|
||||
|
||||
|
Reference in New Issue
Block a user