X-Git-Url: https://git.danieliu.xyz/?a=blobdiff_plain;f=surf.c;h=ba00e5b9664c02c3d9d49f78480bf2af67004a40;hb=69004b2ff67c5747e3f03fcffad1192741ea9419;hp=b36fc4a969e78a5f242082ba73d16c6859e7f2a5;hpb=24f0f831972ec19ac0663a1fbe00a280e736d4f5;p=surf.git diff --git a/surf.c b/surf.c index b36fc4a..ba00e5b 100644 --- a/surf.c +++ b/surf.c @@ -52,12 +52,6 @@ typedef struct Client { gboolean zoomed, fullscreen, isinspecting, sslfailed; } Client; -typedef struct { - char *label; - void (*func)(Client *c, const Arg *arg); - const Arg arg; -} Item; - typedef struct { guint mod; guint keyval; @@ -83,8 +77,8 @@ static GdkNativeWindow embed = 0; static gboolean showxid = FALSE; static char winid[64]; static gboolean usingproxy = 0; -static char togglestat[5]; -static char pagestat[2]; +static char togglestat[6]; +static char pagestat[3]; static void beforerequest(WebKitWebView *w, WebKitWebFrame *f, WebKitWebResource *r, WebKitNetworkRequest *req, @@ -159,6 +153,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 togglestyle(Client *c, const Arg *arg); static void update(Client *c); static void updatewinid(Client *c); static void usage(void); @@ -174,6 +169,7 @@ beforerequest(WebKitWebView *w, WebKitWebFrame *f, WebKitWebResource *r, WebKitNetworkRequest *req, WebKitNetworkResponse *resp, gpointer d) { const gchar *uri = webkit_network_request_get_uri(req); + if(g_str_has_suffix(uri, "/favicon.ico")) webkit_network_request_set_uri(req, "about:blank"); } @@ -296,7 +292,8 @@ evalscript(JSContextRef js, char *script, char* scriptname) { jsscript = JSStringCreateWithUTF8CString(script); jsscriptname = JSStringCreateWithUTF8CString(scriptname); - JSEvaluateScript(js, jsscript, JSContextGetGlobalObject(js), jsscriptname, 0, &exception); + JSEvaluateScript(js, jsscript, JSContextGetGlobalObject(js), + jsscriptname, 0, &exception); JSStringRelease(jsscript); JSStringRelease(jsscriptname); } @@ -307,7 +304,8 @@ runscript(WebKitWebFrame *frame) { GError *error; if(g_file_get_contents(scriptfile, &script, NULL, &error)) { - evalscript(webkit_web_frame_get_global_context(frame), script, scriptfile); + evalscript(webkit_web_frame_get_global_context(frame), + script, scriptfile); } } @@ -315,10 +313,15 @@ static void clipboard(Client *c, const Arg *arg) { gboolean paste = *(gboolean *)arg; - if(paste) - gtk_clipboard_request_text(gtk_clipboard_get(GDK_SELECTION_PRIMARY), pasteuri, c); - else - gtk_clipboard_set_text(gtk_clipboard_get(GDK_SELECTION_PRIMARY), c->linkhover ? c->linkhover : geturi(c), -1); + if(paste) { + gtk_clipboard_request_text( + gtk_clipboard_get(GDK_SELECTION_PRIMARY), + pasteuri, c); + } else { + gtk_clipboard_set_text( + gtk_clipboard_get(GDK_SELECTION_PRIMARY), + c->linkhover ? c->linkhover : geturi(c), -1); + } } static char * @@ -431,11 +434,13 @@ getatom(Client *c, int a) { XGetWindowProperty(dpy, GDK_WINDOW_XID(GTK_WIDGET(c->win)->window), atoms[a], 0L, BUFSIZ, False, XA_STRING, &adummy, &idummy, &ldummy, &ldummy, &p); - if(p) + if(p) { strncpy(buf, (char *)p, LENGTH(buf)-1); - else + } else { buf[0] = '\0'; + } XFree(p); + return buf; } @@ -883,10 +888,11 @@ progresschange(WebKitWebView *view, GParamSpec *pspec, Client *c) { static void reload(Client *c, const Arg *arg) { gboolean nocache = *(gboolean *)arg; - if(nocache) + if(nocache) { webkit_web_view_reload_bypass_cache(c->view); - else + } else { webkit_web_view_reload(c->view); + } } static void @@ -1041,9 +1047,23 @@ toggle(Client *c, const Arg *arg) { reload(c,&a); } +static void +togglestyle(Client *c, const Arg *arg) { + WebKitWebSettings *settings; + char *uri; + + settings = webkit_web_view_get_settings(c->view); + g_object_get(G_OBJECT(settings), "user-stylesheet-uri", &uri, NULL); + uri = uri[0] ? g_strdup("") : g_strconcat("file://", stylefile, NULL); + g_object_set(G_OBJECT(settings), "user-stylesheet-uri", uri, NULL); + + update(c); +} + static void gettogglestat(Client *c){ gboolean value; + char *uri; WebKitWebSettings *settings = webkit_web_view_get_settings(c->view); g_object_get(G_OBJECT(settings), "enable-caret-browsing", @@ -1059,19 +1079,25 @@ gettogglestat(Client *c){ g_object_get(G_OBJECT(settings), "enable-plugins", &value, NULL); togglestat[3] = value? 'V': 'v'; - togglestat[4] = '\0'; + g_object_get(G_OBJECT(settings), "user-stylesheet-uri", &uri, NULL); + togglestat[4] = uri[0] ? 'M': 'm'; + + togglestat[5] = '\0'; } static void getpagestat(Client *c) { const char *uri = geturi(c); - if(strstr(uri, "https://") == uri) + if(strstr(uri, "https://") == uri) { pagestat[0] = c->sslfailed ? 'U' : 'T'; - else + } else { pagestat[0] = '-'; + } pagestat[1] = usingproxy ? 'P' : '-'; + pagestat[2] = '\0'; + } static void