--- a/pidgin/gtkprefs.c Sun Feb 26 08:26:11 2012 +0000
+++ b/pidgin/gtkprefs.c Mon Feb 27 22:45:47 2012 +0000
@@ -1346,50 +1346,36 @@
purple_prefs_set_int(PIDGIN_PREFS_ROOT "/conversations/font_size",
gtk_webview_get_current_fontsize(webview));
if (buttons & GTK_WEBVIEW_FACE) {
- const char *face = gtk_webview_get_current_fontface(webview);
- purple_prefs_set_string(PIDGIN_PREFS_ROOT "/conversations/font_face", face);
+ char *face = gtk_webview_get_current_fontface(webview); + purple_prefs_set_string(PIDGIN_PREFS_ROOT "/conversations/font_face", face); + purple_prefs_set_string(PIDGIN_PREFS_ROOT "/conversations/font_face", ""); if (buttons & GTK_WEBVIEW_FORECOLOR) {
- const char *color = gtk_webview_get_current_forecolor(webview);
- purple_prefs_set_string(PIDGIN_PREFS_ROOT "/conversations/fgcolor", color);
+ char *color = gtk_webview_get_current_forecolor(webview); + purple_prefs_set_string(PIDGIN_PREFS_ROOT "/conversations/fgcolor", color); + purple_prefs_set_string(PIDGIN_PREFS_ROOT "/conversations/fgcolor", ""); if (buttons & GTK_WEBVIEW_BACKCOLOR) {
- color = gtk_webview_get_current_backcolor(webview);
- /* Block the signal to prevent a loop. */
- object = g_object_ref(G_OBJECT(webview));
- g_signal_handlers_block_matched(object, G_SIGNAL_MATCH_DATA, 0, 0, NULL,
- /* Clear the backcolor. */
- gtk_webview_toggle_backcolor(webview, "");
- /* Unblock the signal. */
- g_signal_handlers_unblock_matched(object, G_SIGNAL_MATCH_DATA, 0, 0,
- g_object_unref(object);
- /* This will fire a toggle signal and get saved below. */
- gtk_webview_toggle_background(webview, color);
- if (buttons & GTK_WEBVIEW_BACKGROUND) {
- const char *color = gtk_webview_get_current_background(webview);
- purple_prefs_set_string(PIDGIN_PREFS_ROOT "/conversations/bgcolor", color);
+ char *color = gtk_webview_get_current_backcolor(webview); + purple_prefs_set_string(PIDGIN_PREFS_ROOT "/conversations/bgcolor", color); + purple_prefs_set_string(PIDGIN_PREFS_ROOT "/conversations/bgcolor", ""); @@ -1743,8 +1729,7 @@
- GTK_WEBVIEW_BACKCOLOR |
- GTK_WEBVIEW_BACKGROUND);
+ GTK_WEBVIEW_BACKCOLOR); gtk_webview_append_html(GTK_WEBVIEW(webview),
_("This is how your outgoing message text will "
--- a/pidgin/gtkwebview.c Sun Feb 26 08:26:11 2012 +0000
+++ b/pidgin/gtkwebview.c Mon Feb 27 22:45:47 2012 +0000
@@ -68,16 +68,6 @@
GtkWebViewButtons format_functions;
gboolean wbfo:1; /* Whole buffer formatting only. */
@@ -313,28 +303,13 @@
webview_clear_formatting(GtkWebView *webview)
- GtkWebViewPriv *priv = GTK_WEBVIEW_GET_PRIVATE(webview);
+ WebKitDOMDocument *dom; if (!webkit_web_view_get_editable(WEBKIT_WEB_VIEW(webview)))
- priv->edit.bold = FALSE;
- priv->edit.italic = FALSE;
- priv->edit.underline = FALSE;
- priv->edit.strike = FALSE;
- priv->edit.fontsize = 0;
- g_free(priv->edit.fontface);
- priv->edit.fontface = NULL;
- g_free(priv->edit.forecolor);
- priv->edit.forecolor = NULL;
- g_free(priv->edit.backcolor);
- priv->edit.backcolor = NULL;
- g_free(priv->edit.background);
- priv->edit.background = NULL;
+ dom = webkit_web_view_get_dom_document(WEBKIT_WEB_VIEW(webview)); + webkit_dom_document_exec_command(dom, "removeFormat", FALSE, ""); @@ -541,6 +516,7 @@
return g_string_free(str, FALSE);
gtk_webview_safe_execute_script(GtkWebView *webview, const char *script)
@@ -607,7 +583,8 @@
-void gtk_webview_page_up(GtkWebView *webview)
+gtk_webview_page_up(GtkWebView *webview) GtkWebViewPriv *priv = GTK_WEBVIEW_GET_PRIVATE(webview);
GtkAdjustment *vadj = priv->vadj;
@@ -624,7 +601,8 @@
gtk_adjustment_set_value(vadj, scroll_val);
-void gtk_webview_page_down(GtkWebView *webview)
+gtk_webview_page_down(GtkWebView *webview) GtkWebViewPriv *priv = GTK_WEBVIEW_GET_PRIVATE(webview);
GtkAdjustment *vadj = priv->vadj;
@@ -653,12 +631,12 @@
gtk_webview_setup_entry(GtkWebView *webview, PurpleConnectionFlags flags)
- GtkWebViewPriv *priv = GTK_WEBVIEW_GET_PRIVATE(webview);
GtkWebViewButtons buttons;
if (flags & PURPLE_CONNECTION_HTML) {
GdkColor fg_color, bg_color;
+ gboolean bold, italic, underline, strike; buttons = GTK_WEBVIEW_ALL;
@@ -672,17 +650,19 @@
if (flags & PURPLE_CONNECTION_NO_URLDESC)
buttons &= ~GTK_WEBVIEW_LINKDESC;
+ gtk_webview_get_current_format(webview, &bold, &italic, &underline, &strike); gtk_webview_set_format_functions(webview, GTK_WEBVIEW_ALL);
- if (purple_prefs_get_bool(PIDGIN_PREFS_ROOT "/conversations/send_bold") != priv->edit.bold)
+ if (purple_prefs_get_bool(PIDGIN_PREFS_ROOT "/conversations/send_bold") != bold) gtk_webview_toggle_bold(webview);
- if (purple_prefs_get_bool(PIDGIN_PREFS_ROOT "/conversations/send_italic") != priv->edit.italic)
+ if (purple_prefs_get_bool(PIDGIN_PREFS_ROOT "/conversations/send_italic") != italic) gtk_webview_toggle_italic(webview);
- if (purple_prefs_get_bool(PIDGIN_PREFS_ROOT "/conversations/send_underline") != priv->edit.underline)
+ if (purple_prefs_get_bool(PIDGIN_PREFS_ROOT "/conversations/send_underline") != underline) gtk_webview_toggle_underline(webview);
- if (purple_prefs_get_bool(PIDGIN_PREFS_ROOT "/conversations/send_strike") != priv->edit.strike)
+ if (purple_prefs_get_bool(PIDGIN_PREFS_ROOT "/conversations/send_strike") != strike) gtk_webview_toggle_strike(webview);
gtk_webview_toggle_fontface(webview,
@@ -701,28 +681,30 @@
gdk_color_parse(purple_prefs_get_string(PIDGIN_PREFS_ROOT "/conversations/fgcolor"),
- g_snprintf(color, sizeof(color), "#%02x%02x%02x",
+ g_snprintf(color, sizeof(color), gtk_webview_toggle_forecolor(webview, color);
- if(!(flags & PURPLE_CONNECTION_NO_BGCOLOR) &&
- strcmp(purple_prefs_get_string(PIDGIN_PREFS_ROOT "/conversations/bgcolor"), "") != 0)
+ if (!(flags & PURPLE_CONNECTION_NO_BGCOLOR) && + strcmp(purple_prefs_get_string(PIDGIN_PREFS_ROOT "/conversations/bgcolor"), "") != 0) gdk_color_parse(purple_prefs_get_string(PIDGIN_PREFS_ROOT "/conversations/bgcolor"),
- g_snprintf(color, sizeof(color), "#%02x%02x%02x",
+ g_snprintf(color, sizeof(color), - gtk_webview_toggle_background(webview, color);
+ gtk_webview_toggle_backcolor(webview, color); if (flags & PURPLE_CONNECTION_FORMATTING_WBFO)
gtk_webview_set_whole_buffer_formatting_only(webview, TRUE);
@@ -773,50 +755,56 @@
gboolean *italic, gboolean *underline,
- GtkWebViewPriv *priv = GTK_WEBVIEW_GET_PRIVATE(webview);
+ WebKitDOMDocument *dom; + dom = webkit_web_view_get_dom_document(WEBKIT_WEB_VIEW(webview)); - *bold = priv->edit.bold;
+ *bold = webkit_dom_document_query_command_state(dom, "bold"); - *italic = priv->edit.italic;
+ *italic = webkit_dom_document_query_command_state(dom, "italic"); - *underline = priv->edit.underline;
+ *underline = webkit_dom_document_query_command_state(dom, "underline"); - *strike = priv->edit.strike;
-gtk_webview_get_current_fontface(GtkWebView *webview)
- GtkWebViewPriv *priv = GTK_WEBVIEW_GET_PRIVATE(webview);
- return priv->edit.fontface;
+ *strike = webkit_dom_document_query_command_state(dom, "strikethrough");
+gtk_webview_get_current_fontface(GtkWebView *webview) + WebKitDOMDocument *dom; + dom = webkit_web_view_get_dom_document(WEBKIT_WEB_VIEW(webview)); + return webkit_dom_document_query_command_value(dom, "fontName"); gtk_webview_get_current_forecolor(GtkWebView *webview)
- GtkWebViewPriv *priv = GTK_WEBVIEW_GET_PRIVATE(webview);
- return priv->edit.forecolor;
+ WebKitDOMDocument *dom; + dom = webkit_web_view_get_dom_document(WEBKIT_WEB_VIEW(webview)); + return webkit_dom_document_query_command_value(dom, "foreColor");
gtk_webview_get_current_backcolor(GtkWebView *webview)
- GtkWebViewPriv *priv = GTK_WEBVIEW_GET_PRIVATE(webview);
- return priv->edit.backcolor;
-gtk_webview_get_current_background(GtkWebView *webview)
- GtkWebViewPriv *priv = GTK_WEBVIEW_GET_PRIVATE(webview);
- return priv->edit.background;
+ WebKitDOMDocument *dom; + dom = webkit_web_view_get_dom_document(WEBKIT_WEB_VIEW(webview)); + return webkit_dom_document_query_command_value(dom, "backColor"); gtk_webview_get_current_fontsize(GtkWebView *webview)
- GtkWebViewPriv *priv = GTK_WEBVIEW_GET_PRIVATE(webview);
- return priv->edit.fontsize;
+ WebKitDOMDocument *dom; + dom = webkit_web_view_get_dom_document(WEBKIT_WEB_VIEW(webview)); + text = webkit_dom_document_query_command_value(dom, "fontSize"); @@ -841,11 +829,8 @@
gtk_webview_toggle_bold(GtkWebView *webview)
- GtkWebViewPriv *priv = GTK_WEBVIEW_GET_PRIVATE(webview);
- priv->edit.bold = !priv->edit.bold;
dom = webkit_web_view_get_dom_document(WEBKIT_WEB_VIEW(webview));
webkit_dom_document_exec_command(dom, "bold", FALSE, "");
@@ -853,11 +838,8 @@
gtk_webview_toggle_italic(GtkWebView *webview)
- GtkWebViewPriv *priv = GTK_WEBVIEW_GET_PRIVATE(webview);
- priv->edit.italic = !priv->edit.italic;
dom = webkit_web_view_get_dom_document(WEBKIT_WEB_VIEW(webview));
webkit_dom_document_exec_command(dom, "italic", FALSE, "");
@@ -865,11 +847,8 @@
gtk_webview_toggle_underline(GtkWebView *webview)
- GtkWebViewPriv *priv = GTK_WEBVIEW_GET_PRIVATE(webview);
- priv->edit.underline = !priv->edit.underline;
dom = webkit_web_view_get_dom_document(WEBKIT_WEB_VIEW(webview));
webkit_dom_document_exec_command(dom, "underline", FALSE, "");
@@ -877,11 +856,8 @@
gtk_webview_toggle_strike(GtkWebView *webview)
- GtkWebViewPriv *priv = GTK_WEBVIEW_GET_PRIVATE(webview);
- priv->edit.strike = !priv->edit.strike;
dom = webkit_web_view_get_dom_document(WEBKIT_WEB_VIEW(webview));
webkit_dom_document_exec_command(dom, "strikethrough", FALSE, "");
@@ -889,14 +865,10 @@
gtk_webview_toggle_forecolor(GtkWebView *webview, const char *color)
- GtkWebViewPriv *priv = GTK_WEBVIEW_GET_PRIVATE(webview);
- g_free(priv->edit.forecolor);
- priv->edit.forecolor = g_strdup(color);
dom = webkit_web_view_get_dom_document(WEBKIT_WEB_VIEW(webview));
- webkit_dom_document_exec_command(dom, "forecolor", FALSE, color);
+ webkit_dom_document_exec_command(dom, "foreColor", FALSE, color); @@ -904,25 +876,10 @@
gtk_webview_toggle_backcolor(GtkWebView *webview, const char *color)
- GtkWebViewPriv *priv = GTK_WEBVIEW_GET_PRIVATE(webview);
- g_free(priv->edit.backcolor);
- priv->edit.backcolor = g_strdup(color);
dom = webkit_web_view_get_dom_document(WEBKIT_WEB_VIEW(webview));
- webkit_dom_document_exec_command(dom, "backcolor", FALSE, color);
-gtk_webview_toggle_background(GtkWebView *webview, const char *color)
- GtkWebViewPriv *priv = GTK_WEBVIEW_GET_PRIVATE(webview);
- g_free(priv->edit.background);
- priv->edit.background = g_strdup(color);
+ webkit_dom_document_exec_command(dom, "backColor", FALSE, color); @@ -930,14 +887,10 @@
gtk_webview_toggle_fontface(GtkWebView *webview, const char *face)
- GtkWebViewPriv *priv = GTK_WEBVIEW_GET_PRIVATE(webview);
- g_free(priv->edit.fontface);
- priv->edit.fontface = g_strdup(face);
dom = webkit_web_view_get_dom_document(WEBKIT_WEB_VIEW(webview));
- webkit_dom_document_exec_command(dom, "fontname", FALSE, face);
+ webkit_dom_document_exec_command(dom, "fontName", FALSE, face); @@ -945,45 +898,44 @@
gtk_webview_font_set_size(GtkWebView *webview, gint size)
- GtkWebViewPriv *priv = GTK_WEBVIEW_GET_PRIVATE(webview);
- priv->edit.fontsize = size;
dom = webkit_web_view_get_dom_document(WEBKIT_WEB_VIEW(webview));
tmp = g_strdup_printf("%d", size);
- webkit_dom_document_exec_command(dom, "fontsize", FALSE, tmp);
+ webkit_dom_document_exec_command(dom, "fontSize", FALSE, tmp); gtk_webview_font_shrink(GtkWebView *webview)
- GtkWebViewPriv *priv = GTK_WEBVIEW_GET_PRIVATE(webview);
- priv->edit.fontsize = MAX(priv->edit.fontsize - 1, 1);
+ fontsize = gtk_webview_get_current_fontsize(webview); + fontsize = MAX(fontsize - 1, 1); dom = webkit_web_view_get_dom_document(WEBKIT_WEB_VIEW(webview));
- tmp = g_strdup_printf("%d", priv->edit.fontsize);
- webkit_dom_document_exec_command(dom, "fontsize", FALSE, tmp);
+ tmp = g_strdup_printf("%d", fontsize); + webkit_dom_document_exec_command(dom, "fontSize", FALSE, tmp); gtk_webview_font_grow(GtkWebView *webview)
- GtkWebViewPriv *priv = GTK_WEBVIEW_GET_PRIVATE(webview);
- priv->edit.fontsize = MIN(priv->edit.fontsize + 1, MAX_FONT_SIZE);
+ fontsize = gtk_webview_get_current_fontsize(webview); + fontsize = MIN(fontsize + 1, MAX_FONT_SIZE); dom = webkit_web_view_get_dom_document(WEBKIT_WEB_VIEW(webview));
- tmp = g_strdup_printf("%d", priv->edit.fontsize);
- webkit_dom_document_exec_command(dom, "fontsize", FALSE, tmp);
+ tmp = g_strdup_printf("%d", fontsize); + webkit_dom_document_exec_command(dom, "fontSize", FALSE, tmp); --- a/pidgin/gtkwebview.h Sun Feb 26 08:26:11 2012 +0000
+++ b/pidgin/gtkwebview.h Mon Feb 27 22:45:47 2012 +0000
@@ -48,14 +48,13 @@
GTK_WEBVIEW_FACE = 1 << 5,
GTK_WEBVIEW_FORECOLOR = 1 << 6,
GTK_WEBVIEW_BACKCOLOR = 1 << 7,
- GTK_WEBVIEW_BACKGROUND = 1 << 8,
- GTK_WEBVIEW_LINK = 1 << 9,
- GTK_WEBVIEW_IMAGE = 1 << 10,
- GTK_WEBVIEW_SMILEY = 1 << 11,
- GTK_WEBVIEW_LINKDESC = 1 << 12,
- GTK_WEBVIEW_STRIKE = 1 << 13,
+ GTK_WEBVIEW_LINK = 1 << 8, + GTK_WEBVIEW_IMAGE = 1 << 9, + GTK_WEBVIEW_SMILEY = 1 << 10, + GTK_WEBVIEW_LINKDESC = 1 << 11, + GTK_WEBVIEW_STRIKE = 1 << 12, /** Show custom smileys when appropriate. */
- GTK_WEBVIEW_CUSTOM_SMILEY = 1 << 14,
+ GTK_WEBVIEW_CUSTOM_SMILEY = 1 << 13, @@ -242,7 +241,7 @@
* @return A string containing the font face or @c NULL if none is set.
-const char *gtk_webview_get_current_fontface(GtkWebView *webview);
+char *gtk_webview_get_current_fontface(GtkWebView *webview); * Returns a string containing the selected foreground color at the current
@@ -252,7 +251,7 @@
* @return A string containing the foreground color or @c NULL if none is set.
-const char *gtk_webview_get_current_forecolor(GtkWebView *webview);
+char *gtk_webview_get_current_forecolor(GtkWebView *webview); * Returns a string containing the selected font background color at the current
@@ -262,17 +261,7 @@
* @return A string containing the background color or @c NULL if none is set.
-const char *gtk_webview_get_current_backcolor(GtkWebView *webview);
- * Returns a string containing the selected background color at the current
- * position in a GtkWebView.
- * @param webview The GtkWebView
- * @return A string containg the background color or @c NULL if none is set.
-const char *gtk_webview_get_current_background(GtkWebView *webview);
+char *gtk_webview_get_current_backcolor(GtkWebView *webview); * Returns a integer containing the selected HTML font size at the current
@@ -351,17 +340,6 @@
gboolean gtk_webview_toggle_backcolor(GtkWebView *webview, const char *color);
- * Toggles a background color at the current location or selection in a
- * @param webview The GtkWebView
- * @param color The HTML-style color, or @c NULL or "" to clear the color.
- * @return @c TRUE if a color was set, or @c FALSE if it was cleared.
-gboolean gtk_webview_toggle_background(GtkWebView *webview, const char *color);
* Toggles a font face at the current location or selection in a GtkWebView.
* @param webview The GtkWebView
--- a/pidgin/gtkwebviewtoolbar.c Sun Feb 26 08:26:11 2012 +0000
+++ b/pidgin/gtkwebviewtoolbar.c Mon Feb 27 22:45:47 2012 +0000
@@ -253,7 +253,7 @@
priv = GTK_WEBVIEWTOOLBAR_GET_PRIVATE(toolbar);
if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(font))) {
- const char *fontname = gtk_webview_get_current_fontface(GTK_WEBVIEW(toolbar->webview));
+ char *fontname = gtk_webview_get_current_fontface(GTK_WEBVIEW(toolbar->webview)); if (!priv->font_dialog) {
priv->font_dialog = gtk_font_selection_dialog_new(_("Select Font"));
@@ -279,6 +279,8 @@
gtk_window_present(GTK_WINDOW(priv->font_dialog));
cancel_toolbar_font(font, toolbar);
@@ -341,7 +343,7 @@
if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(color))) {
- const char *color = gtk_webview_get_current_forecolor(GTK_WEBVIEW(toolbar->webview));
+ char *color = gtk_webview_get_current_forecolor(GTK_WEBVIEW(toolbar->webview)); if (!priv->fgcolor_dialog) {
priv->fgcolor_dialog = gtk_color_selection_dialog_new(_("Select Text Color"));
@@ -360,6 +362,8 @@
gtk_window_present(GTK_WINDOW(priv->fgcolor_dialog));
cancel_toolbar_fgcolor(color, toolbar);
@@ -373,12 +377,7 @@
GtkWebViewToolbarPriv *priv = GTK_WEBVIEWTOOLBAR_GET_PRIVATE(toolbar);
- if (gtk_text_buffer_get_selection_bounds(GTK_WEBVIEW(toolbar->webview)->text_buffer, NULL, NULL))
- gtk_webview_toggle_backcolor(GTK_WEBVIEW(toolbar->webview), "");
- gtk_webview_toggle_background(GTK_WEBVIEW(toolbar->webview), "");
+ gtk_webview_toggle_backcolor(GTK_WEBVIEW(toolbar->webview), ""); if (priv->bgcolor_dialog != NULL)
@@ -414,12 +413,7 @@
- if (gtk_text_buffer_get_selection_bounds(GTK_WEBVIEW(toolbar->webview)->text_buffer, NULL, NULL))
- gtk_webview_toggle_backcolor(GTK_WEBVIEW(toolbar->webview), open_tag);
- gtk_webview_toggle_background(GTK_WEBVIEW(toolbar->webview), open_tag);
+ gtk_webview_toggle_backcolor(GTK_WEBVIEW(toolbar->webview), open_tag); cancel_toolbar_bgcolor(NULL, toolbar);
@@ -432,7 +426,7 @@
if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(color))) {
- const char *color = gtk_webview_get_current_backcolor(GTK_WEBVIEW(toolbar->webview));
+ char *color = gtk_webview_get_current_backcolor(GTK_WEBVIEW(toolbar->webview)); if (!priv->bgcolor_dialog) {
priv->bgcolor_dialog = gtk_color_selection_dialog_new(_("Select Background Color"));
@@ -451,6 +445,8 @@
gtk_window_present(GTK_WINDOW(priv->bgcolor_dialog));
cancel_toolbar_bgcolor(color, toolbar);
@@ -1098,8 +1094,7 @@
GtkWebViewToolbarPriv *priv = GTK_WEBVIEWTOOLBAR_GET_PRIVATE(toolbar);
gboolean bold, italic, underline, strike;
GtkLabel *label = GTK_LABEL(priv->font_label);
gtk_label_set_label(label, _("_Font"));
@@ -1158,6 +1153,7 @@
gtk_label_set_markup_with_mnemonic(label, markup);
tmp = gtk_webview_get_current_forecolor(GTK_WEBVIEW(toolbar->webview));
toggle_button_set_active_block(GTK_TOGGLE_BUTTON(priv->fgcolor),
@@ -1168,17 +1164,18 @@
gtk_label_set_markup_with_mnemonic(label, markup);
tmp = gtk_webview_get_current_backcolor(GTK_WEBVIEW(toolbar->webview));
- tmp2 = gtk_webview_get_current_background(GTK_WEBVIEW(toolbar->webview));
toggle_button_set_active_block(GTK_TOGGLE_BUTTON(priv->bgcolor),
- (tmp != NULL || tmp2 != NULL), toolbar);
+ (tmp != NULL), toolbar); gchar *markup = g_strdup_printf("<span background=\"%s\">%s</span>",
tmp, gtk_label_get_label(label));
gtk_label_set_markup_with_mnemonic(label, markup);