aboutsummaryrefslogtreecommitdiffhomepage
path: root/src
diff options
context:
space:
mode:
authorGravatar keis <keijser@gmail.com>2011-04-29 20:29:14 +0200
committerGravatar keis <keijser@gmail.com>2011-04-29 20:29:14 +0200
commit753ca2800d0efb975d0ccd6450102d566941550c (patch)
tree682c8a07ce5224134e893e6f184bef562fcf9c2f /src
parentcd7ff839afd2af2ec78868d91eca7fd4a2d4f117 (diff)
add focus and blur events from DOM
Diffstat (limited to 'src')
-rw-r--r--src/callbacks.c26
-rw-r--r--src/callbacks.h10
-rw-r--r--src/events.c4
-rw-r--r--src/events.h1
-rw-r--r--src/uzbl-core.c1
5 files changed, 41 insertions, 1 deletions
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);
}