pidgin/pidgin

78b670090850
Parents 86765d2f6f3b
Children b1811b11f907
Add a changed signal shortcut for editable webview changes.
--- a/pidgin/gtkwebview.c Sun Jun 03 07:40:47 2012 +0000
+++ b/pidgin/gtkwebview.c Sun Jun 03 19:40:55 2012 +0000
@@ -43,6 +43,7 @@
TOGGLE_FORMAT,
CLEAR_FORMAT,
UPDATE_FORMAT,
+ CHANGED,
LAST_SIGNAL
};
static guint signals[LAST_SIGNAL] = { 0 };
@@ -343,6 +344,12 @@
}
}
+static void
+editable_input_cb(GtkWebView *webview, WebKitDOMEvent *event, void *data)
+{
+ g_signal_emit(webview, signals[CHANGED], 0);
+}
+
/******************************************************************************
* GObject Stuff
*****************************************************************************/
@@ -404,6 +411,12 @@
G_STRUCT_OFFSET(GtkWebViewClass, update_format),
NULL, 0, g_cclosure_marshal_VOID__VOID,
G_TYPE_NONE, 0);
+ signals[CHANGED] = g_signal_new("changed",
+ G_TYPE_FROM_CLASS(gobject_class),
+ G_SIGNAL_RUN_FIRST,
+ G_STRUCT_OFFSET(GtkWebViewClass, changed),
+ NULL, NULL, g_cclosure_marshal_VOID__VOID,
+ G_TYPE_NONE, 0);
klass->toggle_format = webview_toggle_format;
klass->clear_format = webview_clear_formatting;
@@ -625,7 +638,20 @@
void
gtk_webview_set_editable(GtkWebView *webview, gboolean editable)
{
+ WebKitDOMDocument *doc;
+
webkit_web_view_set_editable(WEBKIT_WEB_VIEW(webview), editable);
+
+ doc = webkit_web_view_get_dom_document(WEBKIT_WEB_VIEW(webview));
+ if (editable) {
+ webkit_dom_event_target_add_event_listener(WEBKIT_DOM_EVENT_TARGET(doc),
+ "input", G_CALLBACK(editable_input_cb),
+ FALSE, NULL);
+ } else {
+ webkit_dom_event_target_remove_event_listener(WEBKIT_DOM_EVENT_TARGET(doc),
+ "input", G_CALLBACK(editable_input_cb),
+ FALSE);
+ }
}
void
--- a/pidgin/gtkwebview.h Sun Jun 03 07:40:47 2012 +0000
+++ b/pidgin/gtkwebview.h Sun Jun 03 19:40:55 2012 +0000
@@ -74,6 +74,7 @@
void (*toggle_format)(GtkWebView *, GtkWebViewButtons);
void (*clear_format)(GtkWebView *);
void (*update_format)(GtkWebView *);
+ void (*changed)(GtkWebView *);
};
G_BEGIN_DECLS