commit: 6b48d7c4024a5e497ebb4a11cd1c8087e629b65d
parent: 41835171d3e1928248a5c41bfd8fee516ce81227
author: Chris Noxz <chris@noxz.tech>
date: Sun, 29 Dec 2024 17:27:18 +0100
implement popup blocker
popup policy 0: block
popup policy 1: allow
popup policy 2: handle externally using adjipu:-scheme
3 files changed, 31 insertions(+), 3 deletions(-)
diff --git a/browser.c b/browser.c
@@ -444,6 +444,23 @@ handle_fullscreen(
return TRUE;
}
+void
+handle_popup(
+ const gchar *uri)
+{
+ char u[8192];
+ snprintf(u, sizeof(u), "%lu:%s", gl.embed, uri);
+
+ switch (CFG_I(CFN_POPUP_POLICY)) {
+ case PUP_ALLOW:
+ initialize(uri);
+ break;
+ case PUP_EXTERNAL:
+ xdg_open("adjipu:", u, TRUE);
+ break;
+ }
+}
+
gboolean
key_common(
GdkEventKey *event)
diff --git a/browser.h b/browser.h
@@ -130,6 +130,7 @@
/*** Name translations ***/
/* name original name */
+#define get_request(A) webkit_navigation_action_get_request((A))
#define request_path(R) webkit_uri_scheme_request_get_path((R))
#define get_socket_win(W) gtk_plug_get_socket_window(GTK_PLUG((W)))
#define get_widget_win(W) gtk_widget_get_window((W))
@@ -157,6 +158,12 @@ enum config_type {
CFG_LIST
};
+enum popup_policy {
+ PUP_BLOCK = 0,
+ PUP_ALLOW = 1,
+ PUP_EXTERNAL = 2
+};
+
/** Enumerators for configurables */
enum config_name {
CFN_ACCEPTED_LANGUAGES,
@@ -180,6 +187,7 @@ enum config_name {
CFN_JS_OPEN_WINDOWS,
CFN_MONOSPACE_FONT,
CFN_NORMAL_TAB_FORMAT,
+ CFN_POPUP_POLICY,
CFN_PROXY_IGNORE,
CFN_PROXY_URI,
CFN_SANS_SERIF_FONT,
@@ -301,6 +309,10 @@ static gboolean handle_fullscreen(
gboolean fullscreen
);
+static void handle_popup(
+ const gchar *uri
+);
+
static gboolean key_common(
GdkEventKey *event
);
@@ -648,9 +660,7 @@ cb_wv_create(WebKitWebView *web_view,
(void)web_view;
(void)data;
- initialize(
- webkit_uri_request_get_uri(
- webkit_navigation_action_get_request(navigation_action)));
+ handle_popup(webkit_uri_request_get_uri(get_request(navigation_action)));
return NULL;
}
diff --git a/config.h b/config.h
@@ -49,6 +49,7 @@ static Config cfg[CFN_LAST] = {
[CFN_MONOSPACE_FONT] = { __NAME_UPPERCASE__"_MONOSPACE_FONT", "monospace-font-family", CFG_STRING, FALSE, {.s = "monospace" }},
[CFN_NORMAL_TAB_FORMAT] = { NULL, NULL, CFG_STRING, FALSE, {.s = "<span>%s</span>" }},
[CFN_PROXY_IGNORE] = { __NAME_UPPERCASE__"_PROXY_IGNORE", NULL, CFG_LIST, FALSE, {.l = NULL }},
+ [CFN_POPUP_POLICY] = { __NAME_UPPERCASE__"_POPUP_POLICY", NULL, CFG_INT, FALSE, {.i = PUP_ALLOW }},
[CFN_PROXY_URI] = { __NAME_UPPERCASE__"_PROXY_URI", NULL, CFG_STRING, FALSE, {.s = NULL }},
[CFN_SANS_SERIF_FONT] = { __NAME_UPPERCASE__"_SANS_SERIF_FONT", "sans-serif-font-family", CFG_STRING, FALSE, {.s = "sans-serif" }},
[CFN_SEARCH_ENGINE_URI_FORMAT] = { __NAME_UPPERCASE__"_SE_URI_FORMAT", NULL, CFG_STRING, FALSE, {.s = "https://ddg.gg?q=%s" }},