tReplace createwindow() with createview() - surf - customized build of surf, the suckless webkit browser
(HTM) git clone git://src.adamsgaard.dk/surf
(DIR) Log
(DIR) Files
(DIR) Refs
(DIR) README
(DIR) LICENSE
---
(DIR) commit 1f99df029c5c190941a20ed87344aeef56f76418
(DIR) parent 92d7ba7ed8cf4cb7ffa839596fca58032e2c4dd3
(HTM) Author: Quentin Rameau <quinq@fifth.space>
Date: Wed, 18 Nov 2015 18:16:06 +0100
Replace createwindow() with createview()
We can now perform some filtering before opening a new view (window)
when requested by JavaScript (either random or by a click).
Diffstat:
M surf.c | 39 ++++++++++++++++++++++++-------
1 file changed, 31 insertions(+), 8 deletions(-)
---
(DIR) diff --git a/surf.c b/surf.c
t@@ -114,8 +114,8 @@ static WebKitCookieAcceptPolicy cookiepolicy_get(void);
static char cookiepolicy_set(const WebKitCookieAcceptPolicy p);
static char *copystr(char **str, const char *src);
-static WebKitWebView *createwindow(WebKitWebView *v, WebKitWebFrame *f,
- Client *c);
+static GtkWidget *createview(WebKitWebView *v, WebKitNavigationAction *a,
+ Client *c);
static gboolean decidedownload(WebKitWebView *v, WebKitWebFrame *f,
WebKitNetworkRequest *r, gchar *m,
WebKitWebPolicyDecision *p, Client *c);
t@@ -427,11 +427,34 @@ copystr(char **str, const char *src)
return tmp;
}
-WebKitWebView *
-createwindow(WebKitWebView *v, WebKitWebFrame *f, Client *c)
+GtkWidget *
+createview(WebKitWebView *v, WebKitNavigationAction *a, Client *c)
{
- Client *n = newclient();
- return n->view;
+ Client *n;
+
+ switch (webkit_navigation_action_get_navigation_type(a)) {
+ case WEBKIT_NAVIGATION_TYPE_OTHER: /* fallthrough */
+ /*
+ * popup windows of type “other” are almost always triggered
+ * by user gesture, so inverse the logic here
+ */
+ if (webkit_navigation_action_is_user_gesture(a)) {
+ return NULL;
+ break;
+ }
+ case WEBKIT_NAVIGATION_TYPE_LINK_CLICKED: /* fallthrough */
+ case WEBKIT_NAVIGATION_TYPE_FORM_SUBMITTED: /* fallthrough */
+ case WEBKIT_NAVIGATION_TYPE_BACK_FORWARD: /* fallthrough */
+ case WEBKIT_NAVIGATION_TYPE_RELOAD: /* fallthrough */
+ case WEBKIT_NAVIGATION_TYPE_FORM_RESUBMITTED:
+ n = newclient(c);
+ break;
+ default:
+ return NULL;
+ break;
+ }
+
+ return GTK_WIDGET(n->view);
}
gboolean
t@@ -890,8 +913,8 @@ newview(Client *c, WebKitWebView *rv)
"permission-request",
G_CALLBACK(permissionrequested), c);
g_signal_connect(G_OBJECT(v),
- "create-web-view",
- G_CALLBACK(createwindow), c);
+ "create",
+ G_CALLBACK(createview), c);
g_signal_connect(G_OBJECT(v), "ready-to-show",
G_CALLBACK(showview), c);
g_signal_connect(G_OBJECT(v),