From 753ca2800d0efb975d0ccd6450102d566941550c Mon Sep 17 00:00:00 2001 From: keis Date: Fri, 29 Apr 2011 20:29:14 +0200 Subject: add focus and blur events from DOM --- src/callbacks.c | 26 ++++++++++++++++++++++++++ src/callbacks.h | 10 ++++++++++ src/events.c | 4 +++- src/events.h | 1 + src/uzbl-core.c | 1 + 5 files changed, 41 insertions(+), 1 deletion(-) diff --git a/src/callbacks.c b/src/callbacks.c index 6821700..c956f1b 100644 --- a/src/callbacks.c +++ b/src/callbacks.c @@ -1062,4 +1062,30 @@ populate_popup_cb(WebKitWebView *v, GtkMenu *m, void *c) { } } +void +window_object_cleared_cb(WebKitWebView *webview, WebKitWebFrame *frame, + JSGlobalContextRef *context, JSObjectRef *object) { + // Take this opportunity to set some callbacks on the DOM + WebKitDOMDocument *document = webkit_web_view_get_dom_document (webview); + webkit_dom_event_target_add_event_listener (WEBKIT_DOM_EVENT_TARGET (document), + "focus", G_CALLBACK(dom_focus_cb), TRUE, NULL); + webkit_dom_event_target_add_event_listener (WEBKIT_DOM_EVENT_TARGET (document), + "blur", G_CALLBACK(dom_focus_cb), TRUE, NULL); +} + +void +dom_focus_cb(WebKitDOMEventTarget *target, WebKitDOMEvent *event, gpointer user_data) { + WebKitDOMEventTarget *etarget = webkit_dom_event_get_target (event); + gchar* name = webkit_dom_node_get_node_name (WEBKIT_DOM_NODE (etarget)); + send_event (FOCUS_ELEMENT, NULL, TYPE_STR, name, NULL); +} + +void +dom_blur_cb(WebKitDOMEventTarget *target, WebKitDOMEvent *event, gpointer user_data) { + WebKitDOMEventTarget *etarget = webkit_dom_event_get_target (event); + gchar* name = webkit_dom_node_get_node_name (WEBKIT_DOM_NODE (etarget)); + send_event (BLUR_ELEMENT, NULL, TYPE_STR, name, NULL); +} + + /* vi: set et ts=4: */ diff --git a/src/callbacks.h b/src/callbacks.h index d34b9fa..834ed65 100644 --- a/src/callbacks.h +++ b/src/callbacks.h @@ -222,3 +222,13 @@ scroll_vert_cb(GtkAdjustment *adjust, void *w); gboolean scroll_horiz_cb(GtkAdjustment *adjust, void *w); + +void +window_object_cleared_cb(WebKitWebView *webview, WebKitWebFrame *frame, + JSGlobalContextRef *context, JSObjectRef *object); + +void +dom_focus_cb(WebKitDOMEventTarget *target, WebKitDOMEvent *event, gpointer user_data); + +void +dom_blur_cb(WebKitDOMEventTarget *target, WebKitDOMEvent *event, gpointer user_data); diff --git a/src/events.c b/src/events.c index 62d6414..05c3da6 100644 --- a/src/events.c +++ b/src/events.c @@ -54,7 +54,9 @@ const char *event_table[LAST_EVENT] = { "DOWNLOAD_PROGRESS", "DOWNLOAD_COMPLETE", "ADD_COOKIE" , - "DELETE_COOKIE" + "DELETE_COOKIE" , + "FOCUS_ELEMENT" , + "BLUR_ELEMENT" }; void diff --git a/src/events.h b/src/events.h index 0c40206..60ea8df 100644 --- a/src/events.h +++ b/src/events.h @@ -25,6 +25,7 @@ enum event_type { PTR_MOVE, SCROLL_VERT, SCROLL_HORIZ, DOWNLOAD_STARTED, DOWNLOAD_PROGRESS, DOWNLOAD_COMPLETE, ADD_COOKIE, DELETE_COOKIE, + FOCUS_ELEMENT, BLUR_ELEMENT, /* must be last entry */ LAST_EVENT diff --git a/src/uzbl-core.c b/src/uzbl-core.c index e461a4c..118c6da 100644 --- a/src/uzbl-core.c +++ b/src/uzbl-core.c @@ -1479,6 +1479,7 @@ create_scrolled_win() { "signal::populate-popup", (GCallback)populate_popup_cb, NULL, "signal::focus-in-event", (GCallback)focus_cb, NULL, "signal::focus-out-event", (GCallback)focus_cb, NULL, + "signal::window-object-cleared", (GCallback)window_object_cleared_cb,NULL, NULL); } -- cgit v1.2.3