aboutsummaryrefslogtreecommitdiffhomepage
path: root/src
diff options
context:
space:
mode:
authorGravatar Jake Probst <jake.probst@gmail.com>2010-03-22 10:51:14 +0800
committerGravatar Mason Larobina <mason.larobina@gmail.com>2010-03-22 10:51:14 +0800
commit2f7e17fbf9b0f433041a9ade8f04c0936a36688d (patch)
treeb32768a4f309c9de1ae1876167214658cfd1a0da /src
parent7ca0ccd817d56da9961dd793acb6c898c2b8089f (diff)
Fixed window.open and javascript links that open new windows
Diffstat (limited to 'src')
-rw-r--r--src/callbacks.c60
-rw-r--r--src/callbacks.h3
-rw-r--r--src/uzbl-core.c1
-rw-r--r--src/uzbl-core.h1
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;