diff options
author | Jake Probst <jake.probst@gmail.com> | 2010-03-22 10:51:14 +0800 |
---|---|---|
committer | Mason Larobina <mason.larobina@gmail.com> | 2010-03-22 10:51:14 +0800 |
commit | 2f7e17fbf9b0f433041a9ade8f04c0936a36688d (patch) | |
tree | b32768a4f309c9de1ae1876167214658cfd1a0da /src | |
parent | 7ca0ccd817d56da9961dd793acb6c898c2b8089f (diff) |
Fixed window.open and javascript links that open new windows
Diffstat (limited to 'src')
-rw-r--r-- | src/callbacks.c | 60 | ||||
-rw-r--r-- | src/callbacks.h | 3 | ||||
-rw-r--r-- | src/uzbl-core.c | 1 | ||||
-rw-r--r-- | src/uzbl-core.h | 1 |
4 files changed, 63 insertions, 2 deletions
diff --git a/src/callbacks.c b/src/callbacks.c index d3545cc..e8a1ce0 100644 --- a/src/callbacks.c +++ b/src/callbacks.c @@ -290,6 +290,12 @@ cmd_useragent() { } void +cmd_javascript_windows() { + g_object_set (G_OBJECT(view_settings()), "javascript-can-open-windows-automatically", + uzbl.behave.javascript_windows, NULL); +} + +void cmd_scrollbars_visibility() { if(uzbl.gui.scrollbars_visible) { uzbl.gui.bar_h = gtk_scrolled_window_get_hadjustment (GTK_SCROLLED_WINDOW (uzbl.gui.scrolled_win)); @@ -640,6 +646,7 @@ new_window_cb (WebKitWebView *web_view, WebKitWebFrame *frame, if (uzbl.state.verbose) printf("New window requested -> %s \n", webkit_network_request_get_uri (request)); + send_event(NEW_WINDOW, webkit_network_request_get_uri (request), NULL); webkit_web_policy_decision_ignore(policy_decision); return TRUE; @@ -674,6 +681,36 @@ request_starting_cb(WebKitWebView *web_view, WebKitWebFrame *frame, WebKitWebRes send_event(REQUEST_STARTING, webkit_network_request_get_uri(request), NULL); } +void +create_web_view_js2_cb (WebKitWebView* web_view, GParamSpec param_spec) { + (void) web_view; + (void) param_spec; + + const gchar* uri = webkit_web_view_get_uri(web_view); + + printf("uri: %s\n", uri); + if (strncmp(uri, "javascript:", strlen("javascript:")) == 0) { + printf("js!\n"); + eval_js(uzbl.gui.web_view, (gchar*) uri + strlen("javascript:"), NULL, "javascript:"); + } + else + send_event(NEW_WINDOW, uri, NULL); + + gtk_widget_destroy(GTK_WIDGET(web_view)); +} + + +gboolean +create_web_view_js_cb (WebKitWebView* web_view, gpointer user_data) { + (void) web_view; + (void) user_data; + + g_object_connect (web_view, "signal::notify::uri", + G_CALLBACK(create_web_view_js2_cb), NULL); + return TRUE; +} + + /*@null@*/ WebKitWebView* create_web_view_cb (WebKitWebView *web_view, WebKitWebFrame *frame, gpointer user_data) { (void) web_view; @@ -682,10 +719,29 @@ create_web_view_cb (WebKitWebView *web_view, WebKitWebFrame *frame, gpointer us if (uzbl.state.selected_url != NULL) { if (uzbl.state.verbose) printf("\nNew web view -> %s\n", uzbl.state.selected_url); - send_event(NEW_WINDOW, uzbl.state.selected_url, NULL); + + if (strncmp(uzbl.state.selected_url, "javascript:", strlen("javascript:")) == 0) { + printf("js: %s\n", uzbl.state.selected_url+strlen("javascript:")); + + WebKitWebView* new_view = WEBKIT_WEB_VIEW(webkit_web_view_new()); + + g_signal_connect (new_view, "web-view-ready", + G_CALLBACK(create_web_view_js_cb), NULL); + + return new_view; + } + else + send_event(NEW_WINDOW, uzbl.state.selected_url, NULL); + } else { if (uzbl.state.verbose) - printf("New web view -> %s\n","Nothing to open, exiting"); + printf("New web view -> javascript link...\n"); + + WebKitWebView* new_view = WEBKIT_WEB_VIEW(webkit_web_view_new()); + + g_signal_connect (new_view, "web-view-ready", + G_CALLBACK(create_web_view_js_cb), NULL); + return new_view; } return NULL; } diff --git a/src/callbacks.h b/src/callbacks.h index 278a31a..30274d6 100644 --- a/src/callbacks.h +++ b/src/callbacks.h @@ -110,6 +110,9 @@ void cmd_caret_browsing(); void +cmd_javascript_windows(); + +void cmd_set_geometry(); void diff --git a/src/uzbl-core.c b/src/uzbl-core.c index 5287431..453c99d 100644 --- a/src/uzbl-core.c +++ b/src/uzbl-core.c @@ -109,6 +109,7 @@ const struct var_name_to_ptr_t { { "max_conns", PTR_V_INT(uzbl.net.max_conns, 1, cmd_max_conns)}, { "max_conns_host", PTR_V_INT(uzbl.net.max_conns_host, 1, cmd_max_conns_host)}, { "useragent", PTR_V_STR(uzbl.net.useragent, 1, cmd_useragent)}, + { "javascript_windows", PTR_V_INT(uzbl.behave.javascript_windows, 1, cmd_javascript_windows)}, /* requires webkit >=1.1.14 */ { "view_source", PTR_V_INT(uzbl.behave.view_source, 0, cmd_view_source)}, diff --git a/src/uzbl-core.h b/src/uzbl-core.h index e3a5020..3078c73 100644 --- a/src/uzbl-core.h +++ b/src/uzbl-core.h @@ -156,6 +156,7 @@ typedef struct { guint enforce_96dpi; gchar *inject_html; guint caret_browsing; + guint javascript_windows; guint mode; gchar* base_url; gboolean print_version; |