X-Git-Url: https://git.danieliu.xyz/?p=surf.git;a=blobdiff_plain;f=surf.c;h=da84e1c56a6fdf13e5f0a13ae8e78cc80d2ac0fd;hp=87116f919049d1cec3df20037367ffc52f886245;hb=067c313e6ce1ab19116088d7e0b1618080c9b4a7;hpb=d0309a1a226425c1b8086d7b20a6f4e3dcb06872 diff --git a/surf.c b/surf.c index 87116f9..da84e1c 100644 --- a/surf.c +++ b/surf.c @@ -77,7 +77,7 @@ static GdkNativeWindow embed = 0; static gboolean showxid = FALSE; static char winid[64]; static gboolean usingproxy = 0; -static char togglestat[6]; +static char togglestat[7]; static char pagestat[3]; static void addaccelgroup(Client *c); @@ -114,6 +114,8 @@ static void die(const char *errstr, ...); static void eval(Client *c, const Arg *arg); static void find(Client *c, const Arg *arg); static void fullscreen(Client *c, const Arg *arg); +static void geopolicyrequested(WebKitWebView *v, WebKitWebFrame *f, + WebKitGeolocationPolicyDecision *d, Client *c); static const char *getatom(Client *c, int a); static void gettogglestat(Client *c); static void getpagestat(Client *c); @@ -158,6 +160,7 @@ static void stop(Client *c, const Arg *arg); static void titlechange(WebKitWebView *v, WebKitWebFrame *frame, const char *title, Client *c); static void toggle(Client *c, const Arg *arg); +static void togglegeolocation(Client *c, const Arg *arg); static void togglescrollbars(Client *c, const Arg *arg); static void togglestyle(Client *c, const Arg *arg); static void updatetitle(Client *c); @@ -449,6 +452,16 @@ fullscreen(Client *c, const Arg *arg) { c->fullscreen = !c->fullscreen; } +static void +geopolicyrequested(WebKitWebView *v, WebKitWebFrame *f, + WebKitGeolocationPolicyDecision *d, Client *c) { + if(allowgeolocation) { + webkit_geolocation_policy_allow(d); + } else { + webkit_geolocation_policy_deny(d); + } +} + static const char * getatom(Client *c, int a) { static char buf[BUFSIZ]; @@ -693,6 +706,9 @@ newclient(void) { g_signal_connect(G_OBJECT(c->view), "hovering-over-link", G_CALLBACK(linkhover), c); + g_signal_connect(G_OBJECT(c->view), + "geolocation-policy-decision-requested", + G_CALLBACK(geopolicyrequested), c); g_signal_connect(G_OBJECT(c->view), "create-web-view", G_CALLBACK(createwindow), c); @@ -1097,7 +1113,7 @@ toggle(Client *c, const Arg *arg) { g_object_get(G_OBJECT(settings), name, &value, NULL); g_object_set(G_OBJECT(settings), name, !value, NULL); - reload(c,&a); + reload(c, &a); } static void @@ -1118,6 +1134,15 @@ twitch(Client *c, const Arg *arg) { gtk_adjustment_set_value(a, v); } +static void +togglegeolocation(Client *c, const Arg *arg) { + Arg a = { .b = FALSE }; + + allowgeolocation ^= 1; + + reload(c, &a); +} + static void togglescrollbars(Client *c, const Arg *arg) { GtkPolicyType vspolicy; @@ -1161,19 +1186,21 @@ gettogglestat(Client *c){ &value, NULL); togglestat[0] = value? 'C': 'c'; + togglestat[1] = allowgeolocation? 'G': 'g'; + g_object_get(G_OBJECT(settings), "auto-load-images", &value, NULL); - togglestat[1] = value? 'I': 'i'; + togglestat[2] = value? 'I': 'i'; g_object_get(G_OBJECT(settings), "enable-scripts", &value, NULL); - togglestat[2] = value? 'S': 's'; + togglestat[3] = value? 'S': 's'; g_object_get(G_OBJECT(settings), "enable-plugins", &value, NULL); - togglestat[3] = value? 'V': 'v'; + togglestat[4] = value? 'V': 'v'; g_object_get(G_OBJECT(settings), "user-stylesheet-uri", &uri, NULL); - togglestat[4] = uri[0] ? 'M': 'm'; + togglestat[5] = uri[0] ? 'M': 'm'; - togglestat[5] = '\0'; + togglestat[6] = '\0'; } static void @@ -1268,6 +1295,9 @@ main(int argc, char *argv[]) { case 'e': embed = strtol(EARGF(usage()), NULL, 0); break; + case 'g': + allowgeolocation = 0; + break; case 'i': loadimages = 0; break;