X-Git-Url: https://git.danieliu.xyz/?a=blobdiff_plain;f=surf.c;h=d970f7f4f1315211d065e10f99c70f0cda55a905;hb=432f45a85213a78da207c63890ed7f85afff5478;hp=53dda18271ad1104708d1bd8a964c00fa7bb2b22;hpb=c234737bea41e605310a7372adf8af8036cf2212;p=surf.git diff --git a/surf.c b/surf.c index 53dda18..d970f7f 100644 --- a/surf.c +++ b/surf.c @@ -47,7 +47,7 @@ typedef struct Client { WebKitWebView *view; WebKitWebInspector *inspector; char *title, *linkhover; - const char *uri, *needle; + const char *needle; gint progress; struct Client *next; gboolean zoomed, fullscreen, isinspecting, sslfailed; @@ -241,7 +241,8 @@ buttonrelease(WebKitWebView *web, GdkEventButton *e, GList *gl) { g_object_get(result, "context", &context, NULL); if(context & WEBKIT_HIT_TEST_RESULT_CONTEXT_LINK) { - if(e->button == 2) { + if(e->button == 2 || + (e->button == 1 && CLEANMASK(e->state) == CLEANMASK(MODKEY))) { g_object_get(result, "link-uri", &arg.v, NULL); newwindow(NULL, &arg, e->state & GDK_CONTROL_MASK); return true; @@ -635,7 +636,7 @@ loaduri(Client *c, const Arg *arg) { } /* prevents endless loop */ - if(c->uri && strcmp(u, c->uri) == 0) { + if(strcmp(u, geturi(c)) == 0) { reload(c, &a); } else { webkit_web_view_load_uri(c->view, u); @@ -658,6 +659,8 @@ newclient(void) { WebKitWebSettings *settings; WebKitWebFrame *frame; GdkGeometry hints = { 1, 1 }; + GdkScreen *screen; + gdouble dpi; char *uri, *ua; if(!(c = calloc(1, sizeof(Client)))) @@ -802,6 +805,24 @@ newclient(void) { g_object_set(G_OBJECT(settings), "default-font-size", defaultfontsize, NULL); + /* + * While stupid, CSS specifies that a pixel represents 1/96 of an inch. + * This ensures websites are not unusably small with a high DPI screen. + * It is equivalent to firefox's "layout.css.devPixelsPerPx" setting. + */ + if(zoomto96dpi) { + screen = gdk_window_get_screen(GTK_WIDGET(c->win)->window); + dpi = gdk_screen_get_resolution(screen); + if(dpi != -1) { + g_object_set(G_OBJECT(settings), "enforce-96-dpi", true, + NULL); + webkit_web_view_set_zoom_level(c->view, dpi/96); + } + } + /* This might conflict with _zoomto96dpi_. */ + if(zoomlevel != 1.0) + webkit_web_view_set_zoom_level(c->view, zoomlevel); + if(enableinspector) { c->inspector = WEBKIT_WEB_INSPECTOR( webkit_web_view_get_inspector(c->view)); @@ -816,6 +837,11 @@ newclient(void) { c->isinspecting = false; } + if(runinfullscreen) { + c->fullscreen = 0; + fullscreen(c, NULL); + } + g_free(uri); setatom(c, AtomFind, ""); @@ -843,7 +869,7 @@ newclient(void) { static void newwindow(Client *c, const Arg *arg, gboolean noembed) { guint i = 0; - const char *cmd[12], *uri; + const char *cmd[14], *uri; const Arg a = { .v = (void *)cmd }; char tmp[64]; @@ -865,6 +891,8 @@ newwindow(Client *c, const Arg *arg, gboolean noembed) { cmd[i++] = "-s"; if(showxid) cmd[i++] = "-x"; + cmd[i++] = "-c"; + cmd[i++] = cookiefile; cmd[i++] = "--"; uri = arg->v ? (char *)arg->v : c->linkhover; if(uri) @@ -1253,8 +1281,10 @@ updatewinid(Client *c) { static void usage(void) { - die("usage: %s [-biknpsvx] [-c cookiefile] [-e xid] [-r scriptfile]" - " [-t stylefile] [-u useragent] [uri]\n", basename(argv0)); + die("usage: %s [-bBfFgGiIkKnNpPsSvx]" + " [-c cookiefile] [-e xid] [-r scriptfile]" + " [-t stylefile] [-u useragent] [-z zoomlevel]" + " [uri]\n", basename(argv0)); } static void @@ -1299,6 +1329,12 @@ main(int argc, char *argv[]) { case 'e': embed = strtol(EARGF(usage()), NULL, 0); break; + case 'f': + runinfullscreen = 1; + break; + case 'F': + runinfullscreen = 0; + break; case 'g': allowgeolocation = 0; break; @@ -1350,6 +1386,9 @@ main(int argc, char *argv[]) { case 'x': showxid = TRUE; break; + case 'z': + zoomlevel = strtof(EARGF(usage()), NULL); + break; default: usage(); } ARGEND;