diff --git a/WebKitTools/GNUmakefile.am b/WebKitTools/GNUmakefile.am index 4ad4768..609cef3 100644 --- a/WebKitTools/GNUmakefile.am +++ b/WebKitTools/GNUmakefile.am @@ -11,6 +11,8 @@ Programs_GtkLauncher_CPPFLAGS = \ -I$(top_builddir)/WebKit/gtk \ -I$(srcdir)/WebKit/gtk/webkit \ -I$(top_builddir)/WebKit/gtk/webkit \ + -IDerivedSources/gdom \ + -IDerivedSources/ \ $(global_cppflags) \ $(javascriptcore_cppflags) diff --git a/WebKitTools/GtkLauncher/main.c b/WebKitTools/GtkLauncher/main.c index 8ed2690..94b580d 100644 --- a/WebKitTools/GtkLauncher/main.c +++ b/WebKitTools/GtkLauncher/main.c @@ -26,6 +26,13 @@ #include #include +#include +#include +#include +#include +#include +#include +#include static GtkWidget* main_window; static GtkWidget* uri_entry; @@ -88,6 +95,65 @@ load_commit_cb (WebKitWebView* page, WebKitWebFrame* frame, gpointer data) gtk_entry_set_text (GTK_ENTRY (uri_entry), uri); } +static GdomDocument* +get_dom_document(void) +{ + WebKitWebFrame* frame = webkit_web_view_get_main_frame(web_view); + return webkit_web_frame_get_dom_document(frame); +} + +static gboolean +dispatch_event_cb (GdomEventTargetNode* et, GdomEvent *event, gchar *event_name, gboolean useCapture) +{ + GdomDocument *doc = get_dom_document(); + GdomNodeList *els; + gchar *event_type; + gulong tags_length; + gulong i; + + g_object_get(event, "type", &event_type, NULL); + printf("event:%s\n", event_type); + + els = gdom_document_get_elements_by_tag_name(doc, "a"); + + g_object_get(els, "length", &tags_length, NULL); + + printf("href count: %d\n", tags_length); + + for (i = 0; i < tags_length; i++) + { + GdomHTMLAnchorElement *atag; + gchar *href; + atag = gdom_node_list_item(els, i); + g_object_get(atag, "href", &href, NULL); + if (href) + { + printf("href %d: %s\n", i, href); + } + } + + return 0; +} + +static void +load_finished_cb (WebKitWebView* page, WebKitWebFrame* frame, gpointer data) +{ + GdomDocument *doc = webkit_web_frame_get_dom_document(frame); + GdomNodeList *els = gdom_document_get_elements_by_tag_name(doc, (gchar*)"body"); + GdomNode *body = gdom_node_list_item(els, 0); + GdomElement *div = gdom_document_create_element(doc, (gchar*)"div"); + GdomText *txt = gdom_document_create_text_node(doc, (gchar*)"click me to see hrefs"); + + gdom_node_append_child(GDOM_NODE(div), GDOM_NODE(txt)); + gdom_node_append_child(GDOM_NODE(body), GDOM_NODE(div)); + + gdom_element_set_attribute(GDOM_ELEMENT(div), (gchar*)"id", (gchar*)"helloworld"); + + g_signal_connect (G_OBJECT (div), "browser-event", G_CALLBACK (dispatch_event_cb), div); + add_event_listener(div, "click", true); + +} + static void destroy_cb (GtkWidget* widget, gpointer data) { @@ -115,6 +181,7 @@ create_browser () web_view = WEBKIT_WEB_VIEW (webkit_web_view_new ()); gtk_container_add (GTK_CONTAINER (scrolled_window), GTK_WIDGET (web_view)); + g_signal_connect (G_OBJECT (web_view), "load-finished", G_CALLBACK (load_finished_cb), web_view); g_signal_connect (G_OBJECT (web_view), "title-changed", G_CALLBACK (title_change_cb), web_view); g_signal_connect (G_OBJECT (web_view), "load-progress-changed", G_CALLBACK (progress_change_cb), web_view); g_signal_connect (G_OBJECT (web_view), "load-committed", G_CALLBACK (load_commit_cb), web_view);