X-Git-Url: https://git.danieliu.xyz/?a=blobdiff_plain;f=surf.c;h=7b71f0eb572a1d190b175b0ddc523b6baf589438;hb=e4869357f1c625a2b56ca1327ed8c89864341d77;hp=fb5833d3a37e07bf11ba32cbd36311a2fba61a76;hpb=058f7f45e2dd04363bf4f57982f633ddd5b7f16a;p=surf.git diff --git a/surf.c b/surf.c index fb5833d..7b71f0e 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; @@ -80,6 +80,7 @@ static char winid[64]; static gboolean usingproxy = 0; static char togglestat[7]; static char pagestat[3]; +static GTlsDatabase *tlsdb; static void addaccelgroup(Client *c); static void beforerequest(WebKitWebView *w, WebKitWebFrame *f, @@ -241,7 +242,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; @@ -600,8 +602,8 @@ loadstatuschange(WebKitWebView *view, GParamSpec *pspec, Client *c) { src = webkit_web_frame_get_data_source(frame); request = webkit_web_data_source_get_request(src); msg = webkit_network_request_get_message(request); - c->sslfailed = soup_message_get_flags(msg) - ^ SOUP_MESSAGE_CERTIFICATE_TRUSTED; + c->sslfailed = !(soup_message_get_flags(msg) + & SOUP_MESSAGE_CERTIFICATE_TRUSTED); } setatom(c, AtomUri, uri); break; @@ -634,8 +636,10 @@ loaduri(Client *c, const Arg *arg) { : g_strdup_printf("http://%s", uri); } + setatom(c, AtomUri, uri); + /* 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); @@ -818,6 +822,9 @@ newclient(void) { 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( @@ -833,6 +840,11 @@ newclient(void) { c->isinspecting = false; } + if(runinfullscreen) { + c->fullscreen = 0; + fullscreen(c, NULL); + } + g_free(uri); setatom(c, AtomFind, ""); @@ -1033,6 +1045,7 @@ setup(void) { char *new_proxy; SoupURI *puri; SoupSession *s; + GError *error = NULL; /* clean up any zombies immediately */ sigchld(0); @@ -1059,7 +1072,13 @@ setup(void) { FALSE))); /* ssl */ - g_object_set(G_OBJECT(s), "ssl-ca-file", cafile, NULL); + tlsdb = g_tls_file_database_new(cafile, &error); + + if (error) { + g_warning("Error loading SSL database %s: %s", cafile, error->message); + g_error_free(error); + } + g_object_set(G_OBJECT(s), "tls-database", tlsdb, NULL); g_object_set(G_OBJECT(s), "ssl-strict", strictssl, NULL); /* proxy */ @@ -1272,8 +1291,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 @@ -1318,6 +1339,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; @@ -1369,6 +1396,9 @@ main(int argc, char *argv[]) { case 'x': showxid = TRUE; break; + case 'z': + zoomlevel = strtof(EARGF(usage()), NULL); + break; default: usage(); } ARGEND;