/pidgin/main: 2b602f67f875: Make editable-ness a construct-only ...
Elliott Sales de Andrade
qulogic at pidgin.im
Mon Aug 5 17:52:42 EDT 2013
Changeset: 2b602f67f875e715bd005db37f6346e8c6c425d2
Author: Elliott Sales de Andrade <qulogic at pidgin.im>
Date: 2013-08-04 16:32 -0400
Branch: default
URL: https://hg.pidgin.im/pidgin/main/rev/2b602f67f875
Description:
Make editable-ness a construct-only property of the GtkWebView.
There's just too much that goes into the editor component to allow
blindly changing between editor and not. If you want to temporarily
make it read-only, you can use the original WebView's editable
setting, but the GtkWebView's editable remains a IM-entry-like thing.
diffstat:
pidgin/gtkstatusbox.c | 4 +-
pidgin/gtkutils.c | 3 +-
pidgin/gtkwebview.c | 57 ++++++++++++++++++-------------------------
pidgin/gtkwebview.h | 21 ++-------------
pidgin/plugins/xmppconsole.c | 6 ++--
5 files changed, 33 insertions(+), 58 deletions(-)
diffs (210 lines):
diff --git a/pidgin/gtkstatusbox.c b/pidgin/gtkstatusbox.c
--- a/pidgin/gtkstatusbox.c
+++ b/pidgin/gtkstatusbox.c
@@ -1836,8 +1836,8 @@ pidgin_status_box_init (PidginStatusBox
g_object_set(status_box->text_rend, "ellipsize", PANGO_ELLIPSIZE_END, NULL);
status_box->vbox = gtk_vbox_new(0, FALSE);
- status_box->sw = pidgin_create_webview(FALSE, &status_box->webview, NULL);
- gtk_webview_set_editable(GTK_WEBVIEW(status_box->webview), TRUE);
+ status_box->sw = pidgin_create_webview(TRUE, &status_box->webview, NULL);
+ gtk_webview_hide_toolbar(GTK_WEBVIEW(status_box->webview));
#if 0
g_signal_connect(G_OBJECT(status_box->toggle_button), "button-press-event",
diff --git a/pidgin/gtkutils.c b/pidgin/gtkutils.c
--- a/pidgin/gtkutils.c
+++ b/pidgin/gtkutils.c
@@ -241,8 +241,7 @@ pidgin_create_webview(gboolean editable,
gtk_widget_show(sep);
}
- webview = gtk_webview_new();
- gtk_webview_set_editable(GTK_WEBVIEW(webview), editable);
+ webview = gtk_webview_new(editable);
if (editable && purple_prefs_get_bool(PIDGIN_PREFS_ROOT "/conversations/spellcheck"))
pidgin_webview_set_spellcheck(GTK_WEBVIEW(webview), TRUE);
gtk_widget_show(webview);
diff --git a/pidgin/gtkwebview.c b/pidgin/gtkwebview.c
--- a/pidgin/gtkwebview.c
+++ b/pidgin/gtkwebview.c
@@ -1354,11 +1354,16 @@ editable_input_cb(GtkWebView *webview, g
*****************************************************************************/
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
@@ -1369,8 +1374,15 @@ gtk_webview_new(void)
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
@@ -1407,6 +1419,8 @@ gtk_webview_class_init(GtkWebViewClass *
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,
@@ -1446,11 +1460,15 @@ gtk_webview_class_init(GtkWebViewClass *
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,
@@ -1710,27 +1728,6 @@ gtk_webview_page_down(GtkWebView *webvie
}
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;
@@ -2046,12 +2043,6 @@ gtk_webview_get_current_fontsize(GtkWebV
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)
{
diff --git a/pidgin/gtkwebview.h b/pidgin/gtkwebview.h
--- a/pidgin/gtkwebview.h
+++ b/pidgin/gtkwebview.h
@@ -118,9 +118,11 @@ GType gtk_webview_get_type(void);
/**
* Create a new GtkWebView object
*
+ * @param editable Whether this GtkWebView will be user-editable
+ *
* @return A GtkWidget corresponding to the GtkWebView object
*/
-GtkWidget *gtk_webview_new(void);
+GtkWidget *gtk_webview_new(gboolean editable);
/**
* A very basic routine to append html, which can be considered
@@ -222,14 +224,6 @@ void gtk_webview_page_up(GtkWebView *web
void gtk_webview_page_down(GtkWebView *webview);
/**
- * Enables or disables editing in a GtkWebView.
- *
- * @param webview The GtkWebView
- * @param editable @c TRUE to make the widget editable, or @c FALSE otherwise.
- */
-void gtk_webview_set_editable(GtkWebView *webview, gboolean editable);
-
-/**
* Setup formatting for a GtkWebView depending on the flags specified.
*
* @param webview The GtkWebView.
@@ -359,15 +353,6 @@ char *gtk_webview_get_current_backcolor(
gint gtk_webview_get_current_fontsize(GtkWebView *webview);
/**
- * Checks whether a GtkWebView is marked as editable.
- *
- * @param webview The GtkWebView
- *
- * @return @c TRUE if the IM/HTML is editable, or @c FALSE otherwise.
- */
-gboolean gtk_webview_get_editable(GtkWebView *webview);
-
-/**
* Gets the content of the head element of a GtkWebView as HTML.
*
* @param webview The GtkWebView
diff --git a/pidgin/plugins/xmppconsole.c b/pidgin/plugins/xmppconsole.c
--- a/pidgin/plugins/xmppconsole.c
+++ b/pidgin/plugins/xmppconsole.c
@@ -796,7 +796,7 @@ create_console(PurplePluginAction *actio
gtk_box_pack_start(GTK_BOX(console->hbox), console->dropdown, TRUE, TRUE, 0);
g_signal_connect(G_OBJECT(console->dropdown), "changed", G_CALLBACK(dropdown_changed_cb), NULL);
- console->webview = gtk_webview_new();
+ console->webview = gtk_webview_new(FALSE);
gtk_webview_load_html_string(GTK_WEBVIEW(console->webview), EMPTY_HTML);
if (console->count == 0) {
char *tmp = g_strdup_printf("<div class=info>%s</div>",
@@ -826,13 +826,13 @@ create_console(PurplePluginAction *actio
gtk_box_pack_start(GTK_BOX(vbox), toolbar, FALSE, FALSE, 0);
- console->entry = gtk_webview_new();
+ console->entry = gtk_webview_new(TRUE);
+ gtk_webview_hide_toolbar(GTK_WEBVIEW(console->entry));
gtk_webview_set_whole_buffer_formatting_only(GTK_WEBVIEW(console->entry), TRUE);
g_signal_connect(G_OBJECT(console->entry),"key-press-event", G_CALLBACK(message_send_cb), console);
console->sw = pidgin_make_scrollable(console->entry, GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC, GTK_SHADOW_ETCHED_IN, -1, -1);
gtk_box_pack_start(GTK_BOX(vbox), console->sw, FALSE, FALSE, 0);
- gtk_webview_set_editable(GTK_WEBVIEW(console->entry), TRUE);
g_signal_connect(G_OBJECT(console->entry), "changed", G_CALLBACK(entry_changed_cb), NULL);
entry_changed_cb(console->entry, NULL);
More information about the Commits
mailing list