diff -r b344343d3cf0 -r 0185eb26ac7d pidgin/gtkwebviewtoolbar.c --- 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);