diff -r 777795d0a0ca -r e03d555394c5 pidgin/gtkwebview.c --- a/pidgin/gtkwebview.c Mon Aug 05 21:52:30 2013 +0530 +++ b/pidgin/gtkwebview.c Wed Aug 07 03:36:33 2013 +0530 @@ -32,6 +32,7 @@ #include #include "gtkutils.h" #include "gtkwebview.h" +#include "gtkwebviewtoolbar.h" #include "gtk3compat.h" @@ -120,6 +121,7 @@ /* Format options */ GtkWebViewButtons format_functions; + GtkWebViewToolbar *toolbar; struct { gboolean wbfo:1; /* Whole buffer formatting only. */ gboolean block_changed:1; @@ -1352,11 +1354,16 @@ *****************************************************************************/ GtkWidget * -gtk_webview_new(void) +gtk_webview_new(gboolean editable) { - WebKitWebView *webview = WEBKIT_WEB_VIEW(g_object_new(gtk_webview_get_type(), NULL)); - WebKitWebSettings *settings = webkit_web_view_get_settings(webview); - + GtkWidget *result; + WebKitWebView *webview; + WebKitWebSettings *settings; + + result = g_object_new(gtk_webview_get_type(), NULL); + webview = WEBKIT_WEB_VIEW(result); + settings = webkit_web_view_get_settings(webview); + g_object_set(G_OBJECT(settings), "default-encoding", "utf-8", NULL); #ifdef _WIN32 /* XXX: win32 WebKitGTK replaces backslash with yen sign for @@ -1367,8 +1374,15 @@ g_object_set(G_OBJECT(settings), "default-font-family", "Verdana", NULL); #endif webkit_web_view_set_settings(webview, settings); - - return GTK_WIDGET(webview); + + if (editable) { + webkit_web_view_set_editable(WEBKIT_WEB_VIEW(webview), editable); + + g_signal_connect(G_OBJECT(webview), "user-changed-contents", + G_CALLBACK(editable_input_cb), NULL); + } + + return result; } static void @@ -1405,6 +1419,8 @@ g_type_class_add_private(klass, sizeof(GtkWebViewPriv)); + /* Signals */ + signals[BUTTONS_UPDATE] = g_signal_new("allowed-formats-updated", G_TYPE_FROM_CLASS(gobject_class), G_SIGNAL_RUN_FIRST, @@ -1444,11 +1460,15 @@ G_TYPE_NONE, 1, WEBKIT_TYPE_DOM_RANGE, NULL); + /* Class Methods */ + klass->toggle_format = webview_toggle_format; klass->clear_format = webview_clear_formatting; gobject_class->finalize = gtk_webview_finalize; + /* Key Bindings */ + binding_set = gtk_binding_set_by_class(parent_class); gtk_binding_entry_add_signal(binding_set, GDK_KEY_b, GDK_CONTROL_MASK, "format-toggled", 1, G_TYPE_INT, @@ -1708,27 +1728,6 @@ } void -gtk_webview_set_editable(GtkWebView *webview, gboolean editable) -{ - GtkWebViewPriv *priv; - g_return_if_fail(webview != NULL); - - priv = GTK_WEBVIEW_GET_PRIVATE(webview); - webkit_web_view_set_editable(WEBKIT_WEB_VIEW(webview), editable); - - if (editable) { - g_signal_connect(G_OBJECT(webview), "user-changed-contents", - G_CALLBACK(editable_input_cb), NULL); - } else { - g_signal_handlers_disconnect_by_func(G_OBJECT(webview), - G_CALLBACK(editable_input_cb), - NULL); - } - - priv->format_functions = GTK_WEBVIEW_ALL; -} - -void gtk_webview_setup_entry(GtkWebView *webview, PurpleConnectionFlags flags) { GtkWebViewButtons buttons; @@ -2044,12 +2043,6 @@ return size; } -gboolean -gtk_webview_get_editable(GtkWebView *webview) -{ - return webkit_web_view_get_editable(WEBKIT_WEB_VIEW(webview)); -} - void gtk_webview_clear_formatting(GtkWebView *webview) { @@ -2205,3 +2198,53 @@ g_free(img); } +void +gtk_webview_set_toolbar(GtkWebView *webview, GtkWidget *toolbar) +{ + GtkWebViewPriv *priv; + + g_return_if_fail(webview != NULL); + + priv = GTK_WEBVIEW_GET_PRIVATE(webview); + priv->toolbar = GTK_WEBVIEWTOOLBAR(toolbar); +} + +void +gtk_webview_show_toolbar(GtkWebView *webview) +{ + GtkWebViewPriv *priv; + + g_return_if_fail(webview != NULL); + + priv = GTK_WEBVIEW_GET_PRIVATE(webview); + g_return_if_fail(priv->toolbar != NULL); + + gtk_widget_show(GTK_WIDGET(priv->toolbar)); +} + +void +gtk_webview_hide_toolbar(GtkWebView *webview) +{ + GtkWebViewPriv *priv; + + g_return_if_fail(webview != NULL); + + priv = GTK_WEBVIEW_GET_PRIVATE(webview); + g_return_if_fail(priv->toolbar != NULL); + + gtk_widget_hide(GTK_WIDGET(priv->toolbar)); +} + +void +gtk_webview_activate_toolbar(GtkWebView *webview, GtkWebViewAction action) +{ + GtkWebViewPriv *priv; + + g_return_if_fail(webview != NULL); + + priv = GTK_WEBVIEW_GET_PRIVATE(webview); + g_return_if_fail(priv->toolbar != NULL); + + gtk_webviewtoolbar_activate(priv->toolbar, action); +} +