Use GdkRGBA instead of GdkColor.

Sun, 04 Sep 2016 04:45:09 -0400

author
Elliott Sales de Andrade <qulogic@pidgin.im>
date
Sun, 04 Sep 2016 04:45:09 -0400
changeset 37992
0185eb26ac7d
parent 37991
b344343d3cf0
child 37993
b84212f9f022

Use GdkRGBA instead of GdkColor.

pidgin/gtk3compat.h file | annotate | diff | comparison | revisions
pidgin/gtkblist-theme-loader.c file | annotate | diff | comparison | revisions
pidgin/gtkblist-theme.c file | annotate | diff | comparison | revisions
pidgin/gtkblist-theme.h file | annotate | diff | comparison | revisions
pidgin/gtkblist.c file | annotate | diff | comparison | revisions
pidgin/gtkconv-theme.c file | annotate | diff | comparison | revisions
pidgin/gtkconv.c file | annotate | diff | comparison | revisions
pidgin/gtknickcolors.h file | annotate | diff | comparison | revisions
pidgin/gtkwebviewtoolbar.c file | annotate | diff | comparison | revisions
pidgin/gtkwhiteboard.c file | annotate | diff | comparison | revisions
pidgin/plugins/screencap.c file | annotate | diff | comparison | revisions
--- a/pidgin/gtk3compat.h	Sat Sep 03 02:50:16 2016 -0400
+++ b/pidgin/gtk3compat.h	Sun Sep 04 04:45:09 2016 -0400
@@ -32,7 +32,6 @@
  */
 
 #include <gtk/gtk.h>
-#include <math.h>
 
 #if GTK_CHECK_VERSION(3,16,0)
 
@@ -53,34 +52,5 @@
 
 #endif /* 3.16.0 */
 
-
-#if GTK_CHECK_VERSION(3,4,0)
-
-static inline void
-pidgin_color_chooser_set_rgb(GtkColorChooser *chooser, const GdkColor *rgb)
-{
-	GdkRGBA rgba;
-
-	rgba.red = rgb->red / 65535.0;
-	rgba.green = rgb->green / 65535.0;
-	rgba.blue = rgb->blue / 65535.0;
-	rgba.alpha = 1.0;
-
-	gtk_color_chooser_set_rgba(chooser, &rgba);
-}
-
-static inline void
-pidgin_color_chooser_get_rgb(GtkColorChooser *chooser, GdkColor *rgb)
-{
-	GdkRGBA rgba;
-
-	gtk_color_chooser_get_rgba(chooser, &rgba);
-	rgb->red = (int)round(rgba.red * 65535.0);
-	rgb->green = (int)round(rgba.green * 65535.0);
-	rgb->blue = (int)round(rgba.blue * 65535.0);
-}
-
-#endif /* 3.4.0 and gtk_color_chooser_ */
-
 #endif /* _PIDGINGTK3COMPAT_H_ */
 
--- a/pidgin/gtkblist-theme-loader.c	Sat Sep 03 02:50:16 2016 -0400
+++ b/pidgin/gtkblist-theme-loader.c	Sun Sep 04 04:45:09 2016 -0400
@@ -47,25 +47,25 @@
 {
 	const char *font;
 	const char *colordesc;
-	GdkColor color;
+	GdkRGBA color;
 
 	font = purple_xmlnode_get_attrib(node, "font");
 
 	if ((colordesc = purple_xmlnode_get_attrib(node, "color")) == NULL ||
-			!gdk_color_parse(colordesc, &color))
-		gdk_color_parse(DEFAULT_TEXT_COLOR, &color);
+			!gdk_rgba_parse(&color, colordesc))
+		gdk_rgba_parse(&color, DEFAULT_TEXT_COLOR);
 
 	return pidgin_theme_font_new(font, &color);
 }
 
-static GdkColor *
+static GdkRGBA *
 parse_color(PurpleXmlNode *node, const char *tag)
 {
 	const char *temp = purple_xmlnode_get_attrib(node, tag);
-	GdkColor color;
+	GdkRGBA color;
 
-	if (temp && gdk_color_parse(temp, &color)) {
-		return gdk_color_copy(&color);
+	if (temp && gdk_rgba_parse(&color, temp)) {
+		return gdk_rgba_copy(&color);
 	} else {
 		return NULL;
 	}
@@ -78,7 +78,7 @@
 	gchar *dir, *filename_full, *data = NULL;
 	const gchar *temp, *name;
 	gboolean success = TRUE;
-	GdkColor *bgcolor, *expanded_bgcolor, *collapsed_bgcolor, *contact_color;
+	GdkRGBA *bgcolor, *expanded_bgcolor, *collapsed_bgcolor, *contact_color;
 	PidginThemeFont *expanded, *collapsed, *contact, *online, *away, *offline, *idle, *message, *message_nick_said, *status;
 	PidginBlistLayout layout;
 	PidginBlistTheme *theme;
@@ -238,13 +238,13 @@
 	}
 
 	if (bgcolor)
-		gdk_color_free(bgcolor);
+		gdk_rgba_free(bgcolor);
 	if (expanded_bgcolor)
-		gdk_color_free(expanded_bgcolor);
+		gdk_rgba_free(expanded_bgcolor);
 	if (collapsed_bgcolor)
-		gdk_color_free(collapsed_bgcolor);
+		gdk_rgba_free(collapsed_bgcolor);
 	if (contact_color)
-		gdk_color_free(contact_color);
+		gdk_rgba_free(contact_color);
 
 	return PURPLE_THEME(theme);
 }
--- a/pidgin/gtkblist-theme.c	Sat Sep 03 02:50:16 2016 -0400
+++ b/pidgin/gtkblist-theme.c	Sun Sep 04 04:45:09 2016 -0400
@@ -35,18 +35,18 @@
 typedef struct {
 	/* Buddy list */
 	gdouble opacity;
-	GdkColor *bgcolor;
+	GdkRGBA *bgcolor;
 	PidginBlistLayout *layout;
 
 	/* groups */
-	GdkColor *expanded_color;
+	GdkRGBA *expanded_color;
 	PidginThemeFont *expanded;
 
-	GdkColor *collapsed_color;
+	GdkRGBA *collapsed_color;
 	PidginThemeFont *collapsed;
 
 	/* buddy */
-	GdkColor *contact_color;
+	GdkRGBA *contact_color;
 
 	PidginThemeFont *contact;
 
@@ -65,7 +65,7 @@
 {
 	gchar *font;
 	gchar color[10];
-	GdkColor *gdkcolor;
+	GdkRGBA *gdkcolor;
 };
 
 /******************************************************************************
@@ -105,7 +105,7 @@
  *****************************************************************************/
 
 PidginThemeFont *
-pidgin_theme_font_new(const gchar *face, GdkColor *color)
+pidgin_theme_font_new(const gchar *face, GdkRGBA *color)
 {
 	PidginThemeFont *font = g_new0(PidginThemeFont, 1);
 	font->font = g_strdup(face);
@@ -120,7 +120,7 @@
 	if (pair != NULL) {
 		g_free(pair->font);
 		if (pair->gdkcolor)
-			gdk_color_free(pair->gdkcolor);
+			gdk_rgba_free(pair->gdkcolor);
 		g_free(pair);
 	}
 }
@@ -137,7 +137,7 @@
 	copy->font  = g_strdup(pair->font);
 	strncpy(copy->color, pair->color, sizeof(copy->color) - 1);
 	if (pair->gdkcolor)
-		copy->gdkcolor = pair->gdkcolor ? gdk_color_copy(pair->gdkcolor) : NULL;
+		copy->gdkcolor = pair->gdkcolor ? gdk_rgba_copy(pair->gdkcolor) : NULL;
 	return copy;
 }
 
@@ -152,17 +152,20 @@
 }
 
 void
-pidgin_theme_font_set_color(PidginThemeFont *font, const GdkColor *color)
+pidgin_theme_font_set_color(PidginThemeFont *font, const GdkRGBA *color)
 {
 	g_return_if_fail(font);
 
 	if (font->gdkcolor)
-		gdk_color_free(font->gdkcolor);
+		gdk_rgba_free(font->gdkcolor);
 
-	font->gdkcolor = color ? gdk_color_copy(color) : NULL;
+	font->gdkcolor = color ? gdk_rgba_copy(color) : NULL;
 	if (color)
 		g_snprintf(font->color, sizeof(font->color),
-				"#%02x%02x%02x", color->red >> 8, color->green >> 8, color->blue >> 8);
+				"#%02x%02x%02x",
+				(unsigned int)(color->red * 255),
+				(unsigned int)(color->green * 255),
+				(unsigned int)(color->blue * 255));
 	else
 		font->color[0] = '\0';
 }
@@ -174,7 +177,7 @@
 	return font->font;
 }
 
-const GdkColor *
+const GdkRGBA *
 pidgin_theme_font_get_color(PidginThemeFont *font)
 {
 	g_return_val_if_fail(font, NULL);
@@ -323,20 +326,20 @@
 
 	/* Buddy List */
 	if (priv->bgcolor)
-		gdk_color_free(priv->bgcolor);
+		gdk_rgba_free(priv->bgcolor);
 	g_free(priv->layout);
 
 	/* Group */
 	if (priv->expanded_color)
-		gdk_color_free(priv->expanded_color);
+		gdk_rgba_free(priv->expanded_color);
 	pidgin_theme_font_free(priv->expanded);
 	if (priv->collapsed_color)
-		gdk_color_free(priv->collapsed_color);
+		gdk_rgba_free(priv->collapsed_color);
 	pidgin_theme_font_free(priv->collapsed);
 
 	/* Buddy */
 	if (priv->contact_color)
-		gdk_color_free(priv->contact_color);
+		gdk_rgba_free(priv->contact_color);
 	pidgin_theme_font_free(priv->contact);
 	pidgin_theme_font_free(priv->online);
 	pidgin_theme_font_free(priv->away);
@@ -372,7 +375,7 @@
 	properties[PROP_BACKGROUND_COLOR] = g_param_spec_boxed("background-color",
 			"Background Color",
 			"The background color for the buddy list",
-			GDK_TYPE_COLOR, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS);
+			GDK_TYPE_RGBA, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS);
 
 	properties[PROP_OPACITY] = g_param_spec_double("opacity", "Opacity",
 			"The opacity of the buddy list",
@@ -386,7 +389,7 @@
 	properties[PROP_EXPANDED_COLOR] = g_param_spec_boxed("expanded-color",
 			"Expanded Background Color",
 			"The background color of an expanded group",
-			GDK_TYPE_COLOR, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS);
+			GDK_TYPE_RGBA, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS);
 
 	properties[PROP_EXPANDED_TEXT] = g_param_spec_pointer("expanded-text",
 			"Expanded Text",
@@ -396,7 +399,7 @@
 	properties[PROP_COLLAPSED_COLOR] = g_param_spec_boxed("collapsed-color",
 			"Collapsed Background Color",
 			"The background color of a collapsed group",
-			GDK_TYPE_COLOR, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS);
+			GDK_TYPE_RGBA, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS);
 
 	properties[PROP_COLLAPSED_TEXT] = g_param_spec_pointer("collapsed-text",
 			"Collapsed Text",
@@ -407,7 +410,7 @@
 	properties[PROP_CONTACT_COLOR] = g_param_spec_boxed("contact-color",
 			"Contact/Chat Background Color",
 			"The background color of a contact or chat",
-			GDK_TYPE_COLOR, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS);
+			GDK_TYPE_RGBA, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS);
 
 	properties[PROP_CONTACT] = g_param_spec_pointer("contact",
 			"Contact Text",
@@ -530,7 +533,7 @@
 
 /* get methods */
 
-GdkColor *
+GdkRGBA *
 pidgin_blist_theme_get_background_color(PidginBlistTheme *theme)
 {
 	PidginBlistThemePrivate *priv;
@@ -566,7 +569,7 @@
 	return priv->layout;
 }
 
-GdkColor *
+GdkRGBA *
 pidgin_blist_theme_get_expanded_background_color(PidginBlistTheme *theme)
 {
 	PidginBlistThemePrivate *priv;
@@ -590,7 +593,7 @@
 	return priv->expanded;
 }
 
-GdkColor *
+GdkRGBA *
 pidgin_blist_theme_get_collapsed_background_color(PidginBlistTheme *theme)
 {
 	PidginBlistThemePrivate *priv;
@@ -614,7 +617,7 @@
 	return priv->collapsed;
 }
 
-GdkColor *
+GdkRGBA *
 pidgin_blist_theme_get_contact_color(PidginBlistTheme *theme)
 {
 	PidginBlistThemePrivate *priv;
@@ -724,7 +727,7 @@
 
 /* Set Methods */
 void
-pidgin_blist_theme_set_background_color(PidginBlistTheme *theme, const GdkColor *color)
+pidgin_blist_theme_set_background_color(PidginBlistTheme *theme, const GdkRGBA *color)
 {
 	PidginBlistThemePrivate *priv;
 
@@ -733,8 +736,8 @@
 	priv = PIDGIN_BLIST_THEME_GET_PRIVATE(theme);
 
 	if (priv->bgcolor)
-		gdk_color_free(priv->bgcolor);
-	priv->bgcolor = color ? gdk_color_copy(color) : NULL;
+		gdk_rgba_free(priv->bgcolor);
+	priv->bgcolor = color ? gdk_rgba_copy(color) : NULL;
 
 	g_object_notify_by_pspec(G_OBJECT(theme), properties[PROP_BACKGROUND_COLOR]);
 }
@@ -769,7 +772,7 @@
 }
 
 void
-pidgin_blist_theme_set_expanded_background_color(PidginBlistTheme *theme, const GdkColor *color)
+pidgin_blist_theme_set_expanded_background_color(PidginBlistTheme *theme, const GdkRGBA *color)
 {
 	PidginBlistThemePrivate *priv;
 
@@ -778,8 +781,8 @@
 	priv = PIDGIN_BLIST_THEME_GET_PRIVATE(theme);
 
 	if (priv->expanded_color)
-		gdk_color_free(priv->expanded_color);
-	priv->expanded_color = color ? gdk_color_copy(color) : NULL;
+		gdk_rgba_free(priv->expanded_color);
+	priv->expanded_color = color ? gdk_rgba_copy(color) : NULL;
 
 	g_object_notify_by_pspec(G_OBJECT(theme), properties[PROP_EXPANDED_COLOR]);
 }
@@ -800,7 +803,7 @@
 }
 
 void
-pidgin_blist_theme_set_collapsed_background_color(PidginBlistTheme *theme, const GdkColor *color)
+pidgin_blist_theme_set_collapsed_background_color(PidginBlistTheme *theme, const GdkRGBA *color)
 {
 	PidginBlistThemePrivate *priv;
 
@@ -809,8 +812,8 @@
 	priv = PIDGIN_BLIST_THEME_GET_PRIVATE(theme);
 
 	if (priv->collapsed_color)
-		gdk_color_free(priv->collapsed_color);
-	priv->collapsed_color = color ? gdk_color_copy(color) : NULL;
+		gdk_rgba_free(priv->collapsed_color);
+	priv->collapsed_color = color ? gdk_rgba_copy(color) : NULL;
 
 	g_object_notify_by_pspec(G_OBJECT(theme), properties[PROP_COLLAPSED_COLOR]);
 }
@@ -831,7 +834,7 @@
 }
 
 void
-pidgin_blist_theme_set_contact_color(PidginBlistTheme *theme, const GdkColor *color)
+pidgin_blist_theme_set_contact_color(PidginBlistTheme *theme, const GdkRGBA *color)
 {
 	PidginBlistThemePrivate *priv;
 
@@ -840,8 +843,8 @@
 	priv = PIDGIN_BLIST_THEME_GET_PRIVATE(theme);
 
 	if (priv->contact_color)
-		gdk_color_free(priv->contact_color);
-	priv->contact_color = color ? gdk_color_copy(color) : NULL;
+		gdk_rgba_free(priv->contact_color);
+	priv->contact_color = color ? gdk_rgba_copy(color) : NULL;
 
 	g_object_notify_by_pspec(G_OBJECT(theme), properties[PROP_CONTACT_COLOR]);
 }
--- a/pidgin/gtkblist-theme.h	Sat Sep 03 02:50:16 2016 -0400
+++ b/pidgin/gtkblist-theme.h	Sun Sep 04 04:45:09 2016 -0400
@@ -103,7 +103,7 @@
  *
  * Returns: A newly created PidginThemeFont
  */
-PidginThemeFont * pidgin_theme_font_new(const gchar *face, GdkColor *color);
+PidginThemeFont *pidgin_theme_font_new(const gchar *face, GdkRGBA *color);
 
 /**
  * pidgin_theme_font_free:
@@ -129,7 +129,7 @@
  *
  * Set the color of a PidginThemeFont.
  */
-void pidgin_theme_font_set_color(PidginThemeFont *font, const GdkColor *color);
+void pidgin_theme_font_set_color(PidginThemeFont *font, const GdkRGBA *color);
 
 /**
  * pidgin_theme_font_get_font_face:
@@ -145,11 +145,11 @@
  * pidgin_theme_font_get_color:
  * @font:  The PidginThemeFont
  *
- * Get the color of a PidginThemeFont as a GdkColor object.
+ * Get the color of a PidginThemeFont as a GdkRGBA object.
  *
  * Returns: The color, or NULL if none is set.
  */
-const GdkColor * pidgin_theme_font_get_color(PidginThemeFont *font);
+const GdkRGBA *pidgin_theme_font_get_color(PidginThemeFont *font);
 
 /**
  * pidgin_theme_font_get_color_describe:
@@ -189,7 +189,7 @@
  *
  * Returns: A gdk color.
  */
- GdkColor *pidgin_blist_theme_get_background_color(PidginBlistTheme *theme);
+GdkRGBA *pidgin_blist_theme_get_background_color(PidginBlistTheme *theme);
 
 /**
  * pidgin_blist_theme_get_opacity:
@@ -220,7 +220,7 @@
  *
  * Returns: A gdk color.
  */
-GdkColor *pidgin_blist_theme_get_expanded_background_color(PidginBlistTheme *theme);
+GdkRGBA *pidgin_blist_theme_get_expanded_background_color(PidginBlistTheme *theme);
 
 /**
  * pidgin_blist_theme_get_expanded_text_info:
@@ -240,7 +240,7 @@
  *
  * Returns: A gdk color.
  */
-GdkColor *pidgin_blist_theme_get_collapsed_background_color(PidginBlistTheme *theme);
+GdkRGBA *pidgin_blist_theme_get_collapsed_background_color(PidginBlistTheme *theme);
 
 /**
  * pidgin_blist_theme_get_collapsed_text_info:
@@ -260,7 +260,7 @@
  *
  * Returns: A gdkcolor for contacts and chats.
  */
-GdkColor *pidgin_blist_theme_get_contact_color(PidginBlistTheme *theme);
+GdkRGBA *pidgin_blist_theme_get_contact_color(PidginBlistTheme *theme);
 
 /**
  * pidgin_blist_theme_get_contact_text_info:
@@ -352,7 +352,7 @@
  *
  * Sets the background color to be used for this buddy list theme.
  */
-void pidgin_blist_theme_set_background_color(PidginBlistTheme *theme, const GdkColor *color);
+void pidgin_blist_theme_set_background_color(PidginBlistTheme *theme, const GdkRGBA *color);
 
 /**
  * pidgin_blist_theme_set_opacity:
@@ -379,7 +379,7 @@
  *
  * Sets the background color to be used for expanded groups.
  */
-void pidgin_blist_theme_set_expanded_background_color(PidginBlistTheme *theme, const GdkColor *color);
+void pidgin_blist_theme_set_expanded_background_color(PidginBlistTheme *theme, const GdkRGBA *color);
 
 /**
  * pidgin_blist_theme_set_expanded_text_info:
@@ -397,7 +397,7 @@
  *
  * Sets the background color to be used for collapsed groups.
  */
-void pidgin_blist_theme_set_collapsed_background_color(PidginBlistTheme *theme, const GdkColor *color);
+void pidgin_blist_theme_set_collapsed_background_color(PidginBlistTheme *theme, const GdkRGBA *color);
 
 /**
  * pidgin_blist_theme_set_collapsed_text_info:
@@ -415,7 +415,7 @@
  *
  * Sets the background color to be used for contacts and chats.
  */
-void pidgin_blist_theme_set_contact_color(PidginBlistTheme *theme, const GdkColor *color);
+void pidgin_blist_theme_set_contact_color(PidginBlistTheme *theme, const GdkRGBA *color);
 
 /**
  * pidgin_blist_theme_set_contact_text_info:
--- a/pidgin/gtkblist.c	Sat Sep 03 02:50:16 2016 -0400
+++ b/pidgin/gtkblist.c	Sun Sep 04 04:45:09 2016 -0400
@@ -5617,7 +5617,7 @@
 					    "visible", GROUP_EXPANDER_VISIBLE_COLUMN,
 					    "expander-visible", GROUP_EXPANDER_COLUMN,
 					    "sensitive", GROUP_EXPANDER_COLUMN,
-					    "cell-background-gdk", BGCOLOR_COLUMN,
+					    "cell-background-rgba", BGCOLOR_COLUMN,
 					    NULL);
 
 	/* contact */
@@ -5627,7 +5627,7 @@
 					    "visible", CONTACT_EXPANDER_VISIBLE_COLUMN,
 					    "expander-visible", CONTACT_EXPANDER_COLUMN,
 					    "sensitive", CONTACT_EXPANDER_COLUMN,
-					    "cell-background-gdk", BGCOLOR_COLUMN,
+					    "cell-background-rgba", BGCOLOR_COLUMN,
 					    NULL);
 
 	for (i = 0; i < 5; i++) {
@@ -5639,7 +5639,7 @@
 			gtk_tree_view_column_set_attributes(column, rend,
 							    "pixbuf", STATUS_ICON_COLUMN,
 							    "visible", STATUS_ICON_VISIBLE_COLUMN,
-							    "cell-background-gdk", BGCOLOR_COLUMN,
+							    "cell-background-rgba", BGCOLOR_COLUMN,
 							    NULL);
 			g_object_set(rend, "xalign", 0.0, "xpad", 6, "ypad", 0, NULL);
 
@@ -5648,7 +5648,7 @@
 			gtkblist->text_rend = rend = gtk_cell_renderer_text_new();
 			gtk_tree_view_column_pack_start(column, rend, TRUE);
 			gtk_tree_view_column_set_attributes(column, rend,
-							    "cell-background-gdk", BGCOLOR_COLUMN,
+							    "cell-background-rgba", BGCOLOR_COLUMN,
 							    "markup", NAME_COLUMN,
 							    NULL);
 			g_signal_connect(G_OBJECT(rend), "editing-started", G_CALLBACK(gtk_blist_renderer_editing_started_cb), NULL);
@@ -5664,7 +5664,7 @@
 			gtk_tree_view_column_set_attributes(column, rend,
 							    "markup", IDLE_COLUMN,
 							    "visible", IDLE_VISIBLE_COLUMN,
-							    "cell-background-gdk", BGCOLOR_COLUMN,
+							    "cell-background-rgba", BGCOLOR_COLUMN,
 							    NULL);
 		} else if (emblem == i) {
 			/* emblem */
@@ -5672,7 +5672,7 @@
 			g_object_set(rend, "xalign", 1.0, "yalign", 0.5, "ypad", 0, "xpad", 3, NULL);
 			gtk_tree_view_column_pack_start(column, rend, FALSE);
 			gtk_tree_view_column_set_attributes(column, rend, "pixbuf", EMBLEM_COLUMN,
-									  "cell-background-gdk", BGCOLOR_COLUMN,
+									  "cell-background-rgba", BGCOLOR_COLUMN,
 									  "visible", EMBLEM_VISIBLE_COLUMN, NULL);
 
 		} else if (protocol_icon == i) {
@@ -5682,7 +5682,7 @@
 			gtk_tree_view_column_set_attributes(column, rend,
 							   "pixbuf", PROTOCOL_ICON_COLUMN,
 							   "visible", PROTOCOL_ICON_VISIBLE_COLUMN,
-							   "cell-background-gdk", BGCOLOR_COLUMN,
+							   "cell-background-rgba", BGCOLOR_COLUMN,
 							  NULL);
 			g_object_set(rend, "xalign", 0.0, "xpad", 3, "ypad", 0, NULL);
 
@@ -5692,7 +5692,7 @@
 			g_object_set(rend, "xalign", 1.0, "ypad", 0, NULL);
 			gtk_tree_view_column_pack_start(column, rend, FALSE);
 			gtk_tree_view_column_set_attributes(column, rend, "pixbuf", BUDDY_ICON_COLUMN,
-							    "cell-background-gdk", BGCOLOR_COLUMN,
+							    "cell-background-rgba", BGCOLOR_COLUMN,
 							    "visible", BUDDY_ICON_VISIBLE_COLUMN,
 							    NULL);
 		}
@@ -5924,7 +5924,7 @@
 						 GDK_TYPE_PIXBUF, /* Buddy icon */
 						 G_TYPE_BOOLEAN,  /* Buddy icon visible */
 						 G_TYPE_POINTER,  /* Node */
-						 GDK_TYPE_COLOR,  /* bgcolor */
+						 GDK_TYPE_RGBA,   /* bgcolor */
 						 G_TYPE_BOOLEAN,  /* Group expander */
 						 G_TYPE_BOOLEAN,  /* Group expander visible */
 						 G_TYPE_BOOLEAN,  /* Contact expander */
@@ -6403,7 +6403,7 @@
 		GtkTreeIter iter;
 		GtkTreePath *path;
 		gboolean expanded;
-		GdkColor *bgcolor = NULL;
+		GdkRGBA *bgcolor = NULL;
 		GdkPixbuf *avatar = NULL;
 		PidginBlistTheme *theme = NULL;
 
@@ -6510,7 +6510,7 @@
 {
 	PurplePresence *presence = purple_buddy_get_presence(buddy);
 	GdkPixbuf *status, *avatar, *emblem, *protocol_icon;
-	GdkColor *color = NULL;
+	GdkRGBA *color = NULL;
 	char *mark;
 	char *idle = NULL;
 	gboolean expanded = ((struct _pidgin_blist_node *)purple_blist_node_get_ui_data(node->parent))->contact_expanded;
@@ -6655,7 +6655,7 @@
 			GdkPixbuf *status;
 			gchar *mark, *tmp;
 			const gchar *fg_color, *font;
-			GdkColor *color = NULL;
+			GdkRGBA *color = NULL;
 			PidginBlistTheme *theme;
 			PidginThemeFont *pair;
 			gboolean selected = (gtkblist->selected_node == cnode);
@@ -6767,7 +6767,7 @@
 		PidginBlistNode *ui;
 		PurpleConversation *conv;
 		gboolean hidden = FALSE;
-		GdkColor *bgcolor = NULL;
+		GdkRGBA *bgcolor = NULL;
 		PidginThemeFont *pair;
 		PidginBlistTheme *theme;
 		gboolean selected = (gtkblist->selected_node == node);
--- a/pidgin/gtkconv-theme.c	Sat Sep 03 02:50:16 2016 -0400
+++ b/pidgin/gtkconv-theme.c	Sun Sep 04 04:45:09 2016 -0400
@@ -763,16 +763,15 @@
 	{
 		char *file = g_build_filename(dir, "Contents", "Resources", "Incoming", "SenderColors.txt", NULL);
 		char *contents;
-		priv->nick_colors = g_array_new(FALSE, FALSE, sizeof(GdkColor));
+		priv->nick_colors = g_array_new(FALSE, FALSE, sizeof(GdkRGBA));
 		if (g_file_get_contents(file, &contents, NULL, NULL)) {
 			int i;
 			gchar ** color_strings = g_strsplit_set(contents, "\r\n:", -1);
 
 			for(i=0; color_strings[i]; i++)
 			{
-				GdkColor color;
-				if(gdk_color_parse(color_strings[i], &color))
-				{
+				GdkRGBA color;
+				if (gdk_rgba_parse(&color, color_strings[i])) {
 					g_array_append_val(priv->nick_colors, color);
 				}
 			}
--- a/pidgin/gtkconv.c	Sat Sep 03 02:50:16 2016 -0400
+++ b/pidgin/gtkconv.c	Sun Sep 04 04:45:09 2016 -0400
@@ -140,8 +140,6 @@
 #define BUDDYICON_SIZE_MIN    32
 #define BUDDYICON_SIZE_MAX    96
 
-#define LUMINANCE(c) (float)((0.3*(c.red))+(0.59*(c.green))+(0.11*(c.blue)))
-
 #define MIN_LUMINANCE_CONTRAST_RATIO 4.5
 
 #define NICK_COLOR_GENERATE_COUNT 220
@@ -204,9 +202,9 @@
 static void update_typing_icon(PidginConversation *gtkconv);
 static void update_typing_message(PidginConversation *gtkconv, const char *message);
 gboolean pidgin_conv_has_focus(PurpleConversation *conv);
-static GArray* generate_nick_colors(guint numcolors, GdkColor background);
-gfloat luminance(GdkColor color);
-static gboolean color_is_visible(GdkColor foreground, GdkColor background, gfloat min_contrast_ratio);
+static GArray* generate_nick_colors(guint numcolors, GdkRGBA background);
+gfloat luminance(GdkRGBA color);
+static gboolean color_is_visible(GdkRGBA foreground, GdkRGBA background, gfloat min_contrast_ratio);
 static GtkTextTag *get_buddy_tag(PurpleChatConversation *chat, const char *who, PurpleMessageFlags flag, gboolean create);
 static void pidgin_conv_update_fields(PurpleConversation *conv, PidginConvFields fields);
 static void focus_out_from_menubar(GtkWidget *wid, PidginConvWindow *win);
@@ -218,17 +216,18 @@
 		int width, int height);
 static gboolean pidgin_conv_xy_to_right_infopane(PidginConvWindow *win, int x, int y);
 
-static const GdkColor *
+static const GdkRGBA *
 get_nick_color(PidginConversation *gtkconv, const gchar *name)
 {
-	static GdkColor col;
+	static GdkRGBA col;
 
 	if (name == NULL) {
 		col.red = col.green = col.blue = 0;
+		col.alpha = 1;
 		return &col;
 	}
 
-	col = g_array_index(gtkconv->nick_colors, GdkColor,
+	col = g_array_index(gtkconv->nick_colors, GdkRGBA,
 		g_str_hash(name) % gtkconv->nick_colors->len);
 
 	return &col;
@@ -4295,7 +4294,7 @@
 	const gchar *name, *alias;
 	gchar *tmp, *alias_key;
 	PurpleChatUserFlags flags;
-	GdkColor *color = NULL;
+	GdkRGBA *color = NULL;
 
 	alias = purple_chat_user_get_alias(cb);
 	name  = purple_chat_user_get_name(cb);
@@ -4329,7 +4328,7 @@
 		GtkTextTag *tag = gtk_text_tag_table_lookup(
 				gtk_text_buffer_get_tag_table(GTK_IMHTML(gtkconv->webview)->text_buffer),
 				"send-name");
-		g_object_get(tag, "foreground-gdk", &color, NULL);
+		g_object_get(tag, "foreground-rgba", &color, NULL);
 #endif /* if 0 */
 	} else {
 		GtkTextTag *tag;
@@ -4337,7 +4336,7 @@
 			g_object_set(G_OBJECT(tag), "style", PANGO_STYLE_NORMAL, NULL);
 		if ((tag = get_buddy_tag(chat, name, PURPLE_MESSAGE_NICK, FALSE)))
 			g_object_set(G_OBJECT(tag), "style", PANGO_STYLE_NORMAL, NULL);
-		color = (GdkColor*)get_nick_color(gtkconv, name);
+		color = (GdkRGBA*)get_nick_color(gtkconv, name);
 	}
 
 	gtk_list_store_insert_with_values(ls, &iter,
@@ -4369,7 +4368,7 @@
 
 #if 0
 	if (is_me && color)
-		gdk_color_free(color);
+		gdk_rgba_free(color);
 #endif
 	g_free(alias_key);
 }
@@ -5106,7 +5105,7 @@
 
 	ls = gtk_list_store_new(CHAT_USERS_COLUMNS, GDK_TYPE_PIXBUF, G_TYPE_STRING,
 							G_TYPE_STRING, G_TYPE_STRING, G_TYPE_INT,
-							GDK_TYPE_COLOR, G_TYPE_INT, G_TYPE_STRING);
+							GDK_TYPE_RGBA, G_TYPE_INT, G_TYPE_STRING);
 	gtk_tree_sortable_set_sort_func(GTK_TREE_SORTABLE(ls), CHAT_USERS_ALIAS_KEY_COLUMN,
 									sort_chat_users, NULL, NULL);
 
@@ -5151,7 +5150,7 @@
 
 	col = gtk_tree_view_column_new_with_attributes(NULL, rend,
 	                                               "text", CHAT_USERS_ALIAS_COLUMN,
-	                                               "foreground-gdk", CHAT_USERS_COLOR_COLUMN,
+	                                               "foreground-rgba", CHAT_USERS_COLOR_COLUMN,
 	                                               "weight", CHAT_USERS_WEIGHT_COLUMN,
 	                                               NULL);
 
@@ -5892,7 +5891,7 @@
 /* TODO WEBKIT */
 #if 0
 	static PangoFontDescription *font_desc = NULL;
-	static GdkColor *color = NULL;
+	static GdkRGBA *color = NULL;
 	static gboolean enable = TRUE;
 
 	if (font_desc == NULL) {
@@ -5905,13 +5904,13 @@
 		font_desc = pango_font_description_from_string(string);
 		g_free(string);
 		if (color == NULL) {
-			GdkColor def = {0, 0x8888, 0x8888, 0x8888};
-			color = gdk_color_copy(&def);
+			GdkRGBA def = {0x8888/65535.0f, 0x8888/65535.0f, 0x8888/65535.0f, 1.0};
+			color = gdk_rgba_copy(&def);
 		}
 	}
 
 	gtk_text_buffer_create_tag(GTK_IMHTML(widget)->text_buffer, "TYPING-NOTIFICATION",
-			"foreground-gdk", color,
+			"foreground-rgba", color,
 			"font-desc", font_desc,
 			NULL);
 
@@ -6065,7 +6064,15 @@
 		pidgin_conv_placement_place(gtkconv);
 
 	if (generated_nick_colors == NULL) {
-		generated_nick_colors = generate_nick_colors(NICK_COLOR_GENERATE_COUNT, gtk_widget_get_style(gtkconv->webview)->base[GTK_STATE_NORMAL]);
+		GdkColor color;
+		GdkRGBA rgba;
+		/* FIXME: No matter how I ask the GtkStyleContext, it always gives me
+		 * back black instead of the _actual_ background colour. */
+		color = gtk_widget_get_style(gtkconv->webview)->base[GTK_STATE_NORMAL];
+		rgba.red = color.red / 65535.0f;
+		rgba.green = color.green / 65535.0f;
+		rgba.blue = color.blue / 65535.0f;
+		generated_nick_colors = generate_nick_colors(NICK_COLOR_GENERATE_COUNT, rgba);
 	}
 
 	if(NULL == (gtkconv->nick_colors = pidgin_conversation_theme_get_nick_colors(gtkconv->theme)))
@@ -6192,18 +6199,20 @@
 static const char *
 get_text_tag_color(GtkTextTag *tag)
 {
-	GdkColor *color = NULL;
+	GdkRGBA *color = NULL;
 	gboolean set = FALSE;
 	static char colcode[] = "#XXXXXX";
 	if (tag)
-		g_object_get(G_OBJECT(tag), "foreground-set", &set, "foreground-gdk", &color, NULL);
+		g_object_get(G_OBJECT(tag), "foreground-set", &set, "foreground-rgba", &color, NULL);
 	if (set && color)
 		g_snprintf(colcode, sizeof(colcode), "#%02x%02x%02x",
-				color->red >> 8, color->green >> 8, color->blue >> 8);
+				(unsigned int)(color->red * 255),
+				(unsigned int)(color->green * 255),
+				(unsigned int)(color->blue * 255));
 	else
 		colcode[0] = '\0';
 	if (color)
-		gdk_color_free(color);
+		gdk_rgba_free(color);
 	return colcode;
 }
 
@@ -6305,7 +6314,7 @@
 		else
 			buddytag = gtk_text_buffer_create_tag(
 					buffer, str,
-					"foreground-gdk", get_nick_color(gtkconv, who),
+					"foreground-rgba", get_nick_color(gtkconv, who),
 					"weight", purple_blist_find_buddy(purple_conversation_get_account(conv), who) ? PANGO_WEIGHT_BOLD : PANGO_WEIGHT_NORMAL,
 					NULL);
 
@@ -6469,8 +6478,11 @@
 			replace = alias;
 
 		} else if (g_str_has_prefix(cur, "%senderColor%")) {
-			const GdkColor *color = get_nick_color(PIDGIN_CONVERSATION(conv), name);
-			replace = freeval = g_strdup_printf("#%02x%02x%02x", (color->red >> 8), (color->green >> 8), (color->blue >> 8));
+			const GdkRGBA *color = get_nick_color(PIDGIN_CONVERSATION(conv), name);
+			replace = freeval = g_strdup_printf("#%02x%02x%02x",
+					(unsigned int)(color->red * 255),
+					(unsigned int)(color->green * 255),
+					(unsigned int)(color->blue * 255));
 
 		} else if (g_str_has_prefix(cur, "%service%")) {
 			replace = purple_account_get_protocol_name(purple_conversation_get_account(conv));
@@ -11140,18 +11152,16 @@
 }
 
 
-gfloat luminance(GdkColor color)
+gfloat luminance(GdkRGBA color)
 {
 	gfloat r, g, b;
 	gfloat rr, gg, bb;
 	gfloat cutoff = 0.03928, scale = 12.92;
 	gfloat a = 0.055, d = 1.055, p = 2.2;
-	gfloat sRGBScale =  65535.0;
-
-	/* Normalizing color values to [0,1] from the sRGB space.*/
-	rr = (float)(color.red)/sRGBScale;
-	gg = (float)(color.green)/sRGBScale;
-	bb = (float)(color.blue)/sRGBScale;
+
+	rr = color.red;
+	gg = color.green;
+	bb = color.blue;
 
 	r = (rr  > cutoff) ? pow((rr+a)/d, p) : rr/scale;
 	g = (gg  > cutoff) ? pow((gg+a)/d, p) : gg/scale;
@@ -11162,10 +11172,11 @@
 
 /* Algorithm from https://www.w3.org/TR/2008/REC-WCAG20-20081211/relative-luminance.xml */
 static gboolean
-color_is_visible(GdkColor foreground, GdkColor background, gfloat min_contrast_ratio)
+color_is_visible(GdkRGBA foreground, GdkRGBA background, gfloat min_contrast_ratio)
 {
 	gfloat lfg, lbg, lmin, lmax;
 	gfloat luminosity_ratio;
+	gfloat nr, dr;
 
 	lfg = luminance(foreground); 
 	lbg = luminance(background);
@@ -11175,7 +11186,6 @@
 	else
 		lmax = lbg, lmin = lfg;
 
-	gfloat nr, dr;
 	nr = lmax + 0.05, dr = lmin - 0.05;
 	if ( dr == 0 ) 
 		dr += 0.01;
@@ -11188,18 +11198,18 @@
 
 
 static GArray*
-generate_nick_colors(guint numcolors, GdkColor background)
+generate_nick_colors(guint numcolors, GdkRGBA background)
 {
 	guint i = 0, j = 0;
-	GArray *colors = g_array_new(FALSE, FALSE, sizeof(GdkColor));
-	GdkColor nick_highlight;
-	GdkColor send_color;
+	GArray *colors = g_array_new(FALSE, FALSE, sizeof(GdkRGBA));
+	GdkRGBA nick_highlight;
+	GdkRGBA send_color;
 	time_t breakout_time;
 
-	gdk_color_parse(DEFAULT_HIGHLIGHT_COLOR, &nick_highlight);
-	gdk_color_parse(DEFAULT_SEND_COLOR, &send_color);
-
-	srand(background.red + background.green + background.blue + 1);
+	gdk_rgba_parse(&nick_highlight, DEFAULT_HIGHLIGHT_COLOR);
+	gdk_rgba_parse(&send_color, DEFAULT_SEND_COLOR);
+
+	srand(background.red * 65535 + background.green * 65535 + background.blue * 65535 + 1);
 
 	breakout_time = time(NULL) + 3;
 
@@ -11209,7 +11219,7 @@
 	 */
 	while (i < numcolors && j < PIDGIN_NUM_NICK_SEED_COLORS && time(NULL) < breakout_time)
 	{
-		GdkColor color = nick_seed_colors[j];
+		GdkRGBA color = nick_seed_colors[j];
 
 		if (color_is_visible(color, background,     MIN_LUMINANCE_CONTRAST_RATIO) &&
 			color_is_visible(color, nick_highlight, MIN_LUMINANCE_CONTRAST_RATIO) &&
@@ -11228,7 +11238,7 @@
 	 */
 	while(i < numcolors && time(NULL) < breakout_time)
 	{
-		GdkColor color = { 0, rand() % 65536, rand() % 65536, rand() % 65536 };
+		GdkRGBA color = {rand() % 65536 / 65535.f, rand() % 65536 / 65535.f, rand() % 65536 / 65535.f, 1};
 
 		if (color_is_visible(color, background,     MIN_LUMINANCE_CONTRAST_RATIO) &&
 			color_is_visible(color, nick_highlight, MIN_LUMINANCE_CONTRAST_RATIO) &&
@@ -11245,7 +11255,7 @@
 
 	if( i == 0 ) {
 		/* To remove errors caused by an empty array. */
-		GdkColor color = {0, 32768, 32768, 32768};
+		GdkRGBA color = {0.5, 0.5, 0.5, 1.0};
 		g_array_append_val(colors, color);
 	}
 
--- a/pidgin/gtknickcolors.h	Sat Sep 03 02:50:16 2016 -0400
+++ b/pidgin/gtknickcolors.h	Sun Sep 04 04:45:09 2016 -0400
@@ -27,31 +27,31 @@
  * @title: Conversation Nick Colors
  */
 
-static const GdkColor nick_seed_colors[] = {
-	{0, 64764, 59881, 20303},       /* Butter #1 */
-	{0, 60909, 54484, 0},           /* Butter #2 */
-	{0, 50372, 41120, 0},           /* Butter #3 */
-	{0, 64764, 44975, 15934},       /* Orange #1 */
-	{0, 62965, 31097, 0},           /* Orange #2 */
-	{0, 52942, 23644, 0},           /* Orange #3 */
-	{0, 59811, 47545, 28270},       /* Chocolate #1 */
-	{0, 49601, 32125, 4369},        /* Chocolate #2 */
-	{0, 36751, 22873, 514},         /* Chocolate #3 */
-	{0, 35466, 58082,  13364},      /* Chameleon #1 */
-	{0, 29555, 53970, 5654},        /* Chameleon #2 */
-	{0, 20046, 39578, 1542},        /* Chameleon #3 */
-	{0, 29289, 40863, 53199},       /* Sky Blue #1 */
-	{0, 13364, 25957, 42148},       /* Sky Blue #2 */
-	{0, 8224, 19018, 34695},        /* Sky Blue #3 */
-	{0, 44461, 32639, 43167},       /* Plum #1 */
-	{0, 30069, 20560, 31611},       /* Plum #2 */
-	{0, 23644, 13621, 26214},       /* Plum #3 */
-	{0, 61423, 10537,  10537},      /* Scarlet Red #1 */
-	{0, 52428, 0, 0},               /* Scarlet Red #2 */
-	{0, 42148, 0, 0},               /* Scarlet Red #3 */
-	{0,  34952, 35466,  34181},     /* Aluminium #4*/
-	{0,  21845, 22359,  21331},     /* Aluminium #5*/
-	{0,  11822, 13364,  13878}      /* Aluminium #6*/
+static const GdkRGBA nick_seed_colors[] = {
+	{64764/65535.0f, 59881/65535.0f, 20303/65535.0f, 1},    /* Butter #1 */
+	{60909/65535.0f, 54484/65535.0f,     0/65535.0f, 1},    /* Butter #2 */
+	{50372/65535.0f, 41120/65535.0f,     0/65535.0f, 1},    /* Butter #3 */
+	{64764/65535.0f, 44975/65535.0f, 15934/65535.0f, 1},    /* Orange #1 */
+	{62965/65535.0f, 31097/65535.0f,     0/65535.0f, 1},    /* Orange #2 */
+	{52942/65535.0f, 23644/65535.0f,     0/65535.0f, 1},    /* Orange #3 */
+	{59811/65535.0f, 47545/65535.0f, 28270/65535.0f, 1},    /* Chocolate #1 */
+	{49601/65535.0f, 32125/65535.0f,  4369/65535.0f, 1},    /* Chocolate #2 */
+	{36751/65535.0f, 22873/65535.0f,   514/65535.0f, 1},    /* Chocolate #3 */
+	{35466/65535.0f, 58082/65535.0f, 13364/65535.0f, 1},    /* Chameleon #1 */
+	{29555/65535.0f, 53970/65535.0f,  5654/65535.0f, 1},    /* Chameleon #2 */
+	{20046/65535.0f, 39578/65535.0f,  1542/65535.0f, 1},    /* Chameleon #3 */
+	{29289/65535.0f, 40863/65535.0f, 53199/65535.0f, 1},    /* Sky Blue #1 */
+	{13364/65535.0f, 25957/65535.0f, 42148/65535.0f, 1},    /* Sky Blue #2 */
+	{ 8224/65535.0f, 19018/65535.0f, 34695/65535.0f, 1},    /* Sky Blue #3 */
+	{44461/65535.0f, 32639/65535.0f, 43167/65535.0f, 1},    /* Plum #1 */
+	{30069/65535.0f, 20560/65535.0f, 31611/65535.0f, 1},    /* Plum #2 */
+	{23644/65535.0f, 13621/65535.0f, 26214/65535.0f, 1},    /* Plum #3 */
+	{61423/65535.0f, 10537/65535.0f, 10537/65535.0f, 1},    /* Scarlet Red #1 */
+	{52428/65535.0f,     0/65535.0f,     0/65535.0f, 1},    /* Scarlet Red #2 */
+	{42148/65535.0f,     0/65535.0f,     0/65535.0f, 1},    /* Scarlet Red #3 */
+	{34952/65535.0f, 35466/65535.0f, 34181/65535.0f, 1},    /* Aluminium #4*/
+	{21845/65535.0f, 22359/65535.0f, 21331/65535.0f, 1},    /* Aluminium #5*/
+	{11822/65535.0f, 13364/65535.0f, 13878/65535.0f, 1}     /* Aluminium #6*/
 };
 
 #define PIDGIN_NUM_NICK_SEED_COLORS (sizeof(nick_seed_colors) / sizeof(nick_seed_colors[0]))
--- a/pidgin/gtkwebviewtoolbar.c	Sat Sep 03 02:50:16 2016 -0400
+++ b/pidgin/gtkwebviewtoolbar.c	Sun Sep 04 04:45:09 2016 -0400
@@ -103,10 +103,6 @@
 
 static GtkHBoxClass *parent_class = NULL;
 
-/* XXX: I would bet, there is a better way to do this */
-static guint resources_ref_cnt = 0;
-static GRegex *color_parse_rgb = NULL;
-
 /******************************************************************************
  * Prototypes
  *****************************************************************************/
@@ -120,10 +116,9 @@
  *****************************************************************************/
 
 static gboolean
-pidgin_color_parse(const gchar *str, GdkColor *color)
+pidgin_color_parse(const gchar *str, GdkRGBA *color)
 {
-	GdkColor dummy_color;
-	gboolean succ;
+	GdkRGBA dummy_color;
 
 	if (str == NULL)
 		return FALSE;
@@ -139,50 +134,18 @@
 
 	if (strcmp(str, "inherit") == 0) {
 		return FALSE;
-	} else if (strncmp(str, "rgb", 3) == 0) {
-		GMatchInfo *match;
-
-		g_regex_match(color_parse_rgb, str, 0, &match);
-		succ = g_match_info_matches(match);
-		if (succ) {
-			int m_start, val;
-
-			g_match_info_fetch_pos(match, 1, &m_start, NULL);
-			val = strtoul(str + m_start, NULL, 10);
-			if (val >= 0 && val <= 255)
-				color->red = val * 256;
-			else
-				succ = FALSE;
-
-			g_match_info_fetch_pos(match, 2, &m_start, NULL);
-			val = strtoul(str + m_start, NULL, 10);
-			if (val >= 0 && val <= 255)
-				color->green = val * 256;
-			else
-				succ = FALSE;
-
-			g_match_info_fetch_pos(match, 3, &m_start, NULL);
-			val = strtoul(str + m_start, NULL, 10);
-			if (val >= 0 && val <= 255)
-				color->blue = val * 256;
-			else
-				succ = FALSE;
-		}
-
-		g_match_info_free(match);
-		return succ;
+	} else {
+		return gdk_rgba_parse(color, str);
 	}
-
-	purple_debug_warning("gtkwebviewtoolbar",
-		"Invalid color format: \"%s\"", str);
-	return FALSE;
 }
 
 static gchar*
-pidgin_color_to_str(GdkColor *color)
+pidgin_color_to_str(GdkRGBA *color)
 {
-	return g_strdup_printf("#%02X%02X%02X", color->red / 256,
-		color->green / 256, color->blue / 256);
+	return g_strdup_printf("#%02X%02X%02X",
+		(unsigned int)(color->red * 255),
+		(unsigned int)(color->green * 255),
+		(unsigned int)(color->blue * 255));
 }
 
 static void
@@ -341,7 +304,7 @@
 do_fgcolor(GtkDialog *dialog, gint response, gpointer _toolbar)
 {
 	PidginWebViewToolbar *toolbar = _toolbar;
-	GdkColor text_color;
+	GdkRGBA text_color;
 	gchar *open_tag;
 
 	if (response != GTK_RESPONSE_OK) {
@@ -349,7 +312,7 @@
 		return;
 	}
 
-	pidgin_color_chooser_get_rgb(GTK_COLOR_CHOOSER(dialog), &text_color);
+	gtk_color_chooser_get_rgba(GTK_COLOR_CHOOSER(dialog), &text_color);
 	open_tag = pidgin_color_to_str(&text_color);
 	pidgin_webview_toggle_forecolor(PIDGIN_WEBVIEW(toolbar->webview),
 		open_tag);
@@ -365,7 +328,7 @@
 		PIDGIN_WEBVIEWTOOLBAR_GET_PRIVATE(toolbar);
 
 	if (gtk_toggle_action_get_active(GTK_TOGGLE_ACTION(color))) {
-		GdkColor fgcolor;
+		GdkRGBA fgcolor;
 		gchar *color = pidgin_webview_get_current_forecolor(
 			PIDGIN_WEBVIEW(toolbar->webview));
 
@@ -378,7 +341,7 @@
 				GTK_COLOR_CHOOSER(priv->fgcolor_dialog), FALSE);
 
 			if (pidgin_color_parse(color, &fgcolor)) {
-				pidgin_color_chooser_set_rgb(
+				gtk_color_chooser_set_rgba(
 					GTK_COLOR_CHOOSER(priv->fgcolor_dialog),
 					&fgcolor);
 			}
@@ -425,7 +388,7 @@
 do_bgcolor(GtkDialog *dialog, gint response, gpointer _toolbar)
 {
 	PidginWebViewToolbar *toolbar = _toolbar;
-	GdkColor text_color;
+	GdkRGBA text_color;
 	gchar *open_tag;
 
 	if (response != GTK_RESPONSE_OK) {
@@ -433,7 +396,7 @@
 		return;
 	}
 
-	pidgin_color_chooser_get_rgb(GTK_COLOR_CHOOSER(dialog), &text_color);
+	gtk_color_chooser_get_rgba(GTK_COLOR_CHOOSER(dialog), &text_color);
 	open_tag = pidgin_color_to_str(&text_color);
 	pidgin_webview_toggle_backcolor(PIDGIN_WEBVIEW(toolbar->webview),
 		open_tag);
@@ -449,7 +412,7 @@
 		PIDGIN_WEBVIEWTOOLBAR_GET_PRIVATE(toolbar);
 
 	if (gtk_toggle_action_get_active(GTK_TOGGLE_ACTION(color))) {
-		GdkColor bgcolor;
+		GdkRGBA bgcolor;
 		gchar *color = pidgin_webview_get_current_backcolor(
 			PIDGIN_WEBVIEW(toolbar->webview));
 
@@ -462,7 +425,7 @@
 				GTK_COLOR_CHOOSER(priv->bgcolor_dialog), FALSE);
 
 			if (pidgin_color_parse(color, &bgcolor)) {
-				pidgin_color_chooser_set_rgb(
+				gtk_color_chooser_set_rgba(
 					GTK_COLOR_CHOOSER(priv->bgcolor_dialog),
 					&bgcolor);
 			}
@@ -1105,7 +1068,7 @@
 	gboolean bold, italic, underline, strike;
 	char *tmp, *color_str;
 	char *label;
-	GdkColor color;
+	GdkRGBA color;
 
 	label = g_strdup(_("_Font"));
 
@@ -1165,7 +1128,7 @@
 		PIDGIN_WEBVIEW(toolbar->webview));
 	color_str = NULL;
 	if (pidgin_color_parse(tmp, &color) &&
-		(color.red != 0 || color.green != 0 || color.blue != 0))
+		(color.red > 0 || color.green > 0 || color.blue > 0))
 	{
 		color_str = pidgin_color_to_str(&color);
 	}
@@ -1365,11 +1328,6 @@
 
 	purple_prefs_disconnect_by_handle(object);
 
-	if (--resources_ref_cnt == 0) {
-		g_regex_unref(color_parse_rgb);
-		color_parse_rgb = NULL;
-	}
-
 	G_OBJECT_CLASS(parent_class)->finalize(object);
 }
 
@@ -1609,12 +1567,6 @@
 	PidginWebViewToolbarPriv *priv = PIDGIN_WEBVIEWTOOLBAR_GET_PRIVATE(toolbar);
 	GtkWidget *hbox = GTK_WIDGET(toolbar);
 
-	if (resources_ref_cnt++ == 0) {
-		color_parse_rgb = g_regex_new("^rgb\\s*\\(\\s*"
-			"([0-9]+),\\s*([0-9]+),\\s*([0-9]+)\\s*\\)",
-			G_REGEX_OPTIMIZE, 0, NULL);
-	}
-
 	pidgin_webviewtoolbar_create_actions(toolbar);
 	pidgin_webviewtoolbar_create_wide_view(toolbar);
 	pidgin_webviewtoolbar_create_lean_view(toolbar);
--- a/pidgin/gtkwhiteboard.c	Sat Sep 03 02:50:16 2016 -0400
+++ b/pidgin/gtkwhiteboard.c	Sun Sep 04 04:45:09 2016 -0400
@@ -106,7 +106,7 @@
 
 static void pidgin_whiteboard_set_canvas_as_icon(PidginWhiteboard *gtkwb);
 
-static void pidgin_whiteboard_rgb24_to_rgb48(int color_rgb, GdkColor *color);
+static void pidgin_whiteboard_rgb24_to_rgba(int color_rgb, GdkRGBA *color);
 
 static void color_selected(GtkColorButton *button, PidginWhiteboard *gtkwb);
 
@@ -164,7 +164,7 @@
 	GtkWidget *clear_button;
 	GtkWidget *save_button;
 	GtkWidget *color_button;
-	GdkColor color;
+	GdkRGBA color;
 
 	PidginWhiteboard *gtkwb = g_new0(PidginWhiteboard, 1);
 	gtkwb->priv = g_new0(PidginWhiteboardPrivate, 1);
@@ -265,8 +265,8 @@
 	gtk_widget_show(color_button);
 
 	gtk_color_chooser_set_use_alpha(GTK_COLOR_CHOOSER(color_button), FALSE);
-	pidgin_whiteboard_rgb24_to_rgb48(gtkwb->brush_color, &color);
-	pidgin_color_chooser_set_rgb(GTK_COLOR_CHOOSER(color_button), &color);
+	pidgin_whiteboard_rgb24_to_rgba(gtkwb->brush_color, &color);
+	gtk_color_chooser_set_rgba(GTK_COLOR_CHOOSER(color_button), &color);
 
 	g_signal_connect(G_OBJECT(color_button), "color-set",
 	                 G_CALLBACK(color_selected), gtkwb);
@@ -604,16 +604,10 @@
 	PidginWhiteboard *gtkwb = purple_whiteboard_get_ui_data(wb);
 	GtkWidget *widget = gtkwb->drawing_area;
 	cairo_t *gfx_con = gtkwb->priv->cr;
-	GdkColor col;
 	GdkRGBA rgba;
 
 	/* Interpret and convert color */
-	pidgin_whiteboard_rgb24_to_rgb48(color, &col);
-
-	rgba.red = col.red / 0xffff;
-	rgba.green = col.green / 0xffff;
-	rgba.blue = col.blue / 0xffff;
-	rgba.alpha = 1.0;
+	pidgin_whiteboard_rgb24_to_rgba(color, &rgba);
 	gdk_cairo_set_source_rgba(gfx_con, &rgba);
 
 	/* Draw a circle */
@@ -812,26 +806,26 @@
 	g_object_unref(pixbuf);
 }
 
-static void pidgin_whiteboard_rgb24_to_rgb48(int color_rgb, GdkColor *color)
+static void pidgin_whiteboard_rgb24_to_rgba(int color_rgb, GdkRGBA *color)
 {
-	color->red   = (color_rgb >> 8) | 0xFF;
-	color->green = (color_rgb & 0xFF00) | 0xFF;
-	color->blue  = ((color_rgb & 0xFF) << 8) | 0xFF;
+	color->red   = ((color_rgb >> 16) & 0xFF) / 255.0f;
+	color->green = ((color_rgb >> 8) & 0xFF) / 255.0f;
+	color->blue  = (color_rgb & 0xFF) / 255.0f;
 }
 
 static void
 color_selected(GtkColorButton *button, PidginWhiteboard *gtkwb)
 {
-	GdkColor color;
+	GdkRGBA color;
 	PurpleWhiteboard *wb = gtkwb->wb;
 	int old_size, old_color;
 	int new_color;
 
-	pidgin_color_chooser_get_rgb(GTK_COLOR_CHOOSER(button), &color);
+	gtk_color_chooser_get_rgba(GTK_COLOR_CHOOSER(button), &color);
 
-	new_color = (color.red & 0xFF00) << 8;
-	new_color |= (color.green & 0xFF00);
-	new_color |= (color.blue & 0xFF00) >> 8;
+	new_color = (unsigned int)(color.red * 255) << 16;
+	new_color |= (unsigned int)(color.green * 255) << 8;
+	new_color |= (unsigned int)(color.blue * 255);
 
 	purple_whiteboard_get_brush(wb, &old_size, &old_color);
 	purple_whiteboard_send_brush(wb, old_size, new_color);
--- a/pidgin/plugins/screencap.c	Sat Sep 03 02:50:16 2016 -0400
+++ b/pidgin/plugins/screencap.c	Sun Sep 04 04:45:09 2016 -0400
@@ -53,7 +53,7 @@
 static gint draw_origin_x, draw_origin_y;
 static gboolean draw_active;
 
-static GdkColor brush_color = {0, 65535, 0, 0};
+static GdkRGBA brush_color = {1, 0, 0, 1};
 static gint line_width = 2;
 
 /******************************************************************************
@@ -322,14 +322,10 @@
 {
 	gchar *color_str;
 
-	pidgin_color_chooser_get_rgb(GTK_COLOR_CHOOSER(button), &brush_color);
+	gtk_color_chooser_get_rgba(GTK_COLOR_CHOOSER(button), &brush_color);
+	gdk_cairo_set_source_rgba(cr, &brush_color);
 
-	cairo_set_source_rgb(cr,
-		brush_color.red / 65535.0,
-		brush_color.green / 65535.0,
-		brush_color.blue / 65535.0);
-
-	color_str = gdk_color_to_string(&brush_color);
+	color_str = gdk_rgba_to_string(&brush_color);
 	purple_prefs_set_string("/plugins/gtk/screencap/brush_color", color_str);
 	g_free(color_str);
 }
@@ -403,7 +399,7 @@
 		GTK_DIALOG(draw_window))), scroll_area);
 
 	color_button = gtk_color_button_new();
-	pidgin_color_chooser_set_rgb(GTK_COLOR_CHOOSER(color_button),
+	gtk_color_chooser_set_rgba(GTK_COLOR_CHOOSER(color_button),
 		&brush_color);
 	g_signal_connect(G_OBJECT(color_button), "color-set",
 		G_CALLBACK(scrncap_draw_color_selected), cr);
@@ -940,7 +936,7 @@
 
 	color_str = purple_prefs_get_string("/plugins/gtk/screencap/brush_color");
 	if (color_str && color_str[0])
-		gdk_color_parse(color_str, &brush_color);
+		gdk_rgba_parse(&brush_color, color_str);
 
 	purple_signal_connect(pidgin_conversations_get_handle(),
 		"conversation-displayed", plugin,

mercurial