X-Git-Url: https://git.danieliu.xyz/?a=blobdiff_plain;f=surf.c;h=3d6cc118b1f35f784169e751050d023dbbe0eb39;hb=3530d18d8ed04710d5e5a0bfbf6af948c59549bf;hp=2a05bf7b7c66f139481fd0cd602a5cb3c1c6b0a3;hpb=75e3fe5b95bc94d5309bd78d9cc98f0034595c3e;p=surf.git diff --git a/surf.c b/surf.c index 2a05bf7..3d6cc11 100644 --- a/surf.c +++ b/surf.c @@ -31,14 +31,18 @@ #define LENGTH(x) (sizeof(x) / sizeof(x[0])) #define CLEANMASK(mask) (mask & (MODKEY|GDK_SHIFT_MASK)) -#define SETB(p, s) [p] = (Parameter){ { .b = s }, } -#define SETI(p, s) [p] = (Parameter){ { .i = s }, } -#define SETV(p, s) [p] = (Parameter){ { .v = s }, } -#define SETF(p, s) [p] = (Parameter){ { .f = s }, } -#define FSETB(p, s) [p] = (Parameter){ { .b = s }, 1 } -#define FSETI(p, s) [p] = (Parameter){ { .i = s }, 1 } -#define FSETV(p, s) [p] = (Parameter){ { .v = s }, 1 } -#define FSETF(p, s) [p] = (Parameter){ { .f = s }, 1 } +#define SETB(p, s) [p] = { { .b = s }, } +#define SETI(p, s) [p] = { { .i = s }, } +#define SETV(p, s) [p] = { { .v = s }, } +#define SETF(p, s) [p] = { { .f = s }, } +#define FSETB(p, s) [p] = { { .b = s }, 1 } +#define FSETI(p, s) [p] = { { .i = s }, 1 } +#define FSETV(p, s) [p] = { { .v = s }, 1 } +#define FSETF(p, s) [p] = { { .f = s }, 1 } +#define CSETB(p, s) [p] = (Parameter){ { .b = s }, 1 } +#define CSETI(p, s) [p] = (Parameter){ { .i = s }, 1 } +#define CSETV(p, s) [p] = (Parameter){ { .v = s }, 1 } +#define CSETF(p, s) [p] = (Parameter){ { .f = s }, 1 } enum { AtomFind, AtomGo, AtomUri, AtomLast }; @@ -411,7 +415,10 @@ loaduri(Client *c, const Arg *a) if (g_strcmp0(uri, "") == 0) return; - if (g_strrstr(uri, "://") || g_str_has_prefix(uri, "about:")) { + if (g_str_has_prefix(uri, "http://") || + g_str_has_prefix(uri, "https://") || + g_str_has_prefix(uri, "file://") || + g_str_has_prefix(uri, "about:")) { url = g_strdup(uri); } else if (!stat(uri, &st) && (path = realpath(uri, NULL))) { url = g_strdup_printf("file://%s", path); @@ -567,6 +574,7 @@ seturiparameters(Client *c, const char *uri) void setparameter(Client *c, int refresh, ParamName p, const Arg *a) { + GdkRGBA bgcolor = { 0 }; WebKitSettings *s = webkit_web_view_get_settings(c->view); switch (p) { @@ -583,28 +591,29 @@ setparameter(Client *c, int refresh, ParamName p, const Arg *a) break; case DiskCache: webkit_web_context_set_cache_model( - webkit_web_view_get_context(c->view), - curconfig[DiskCache].val.b ? + webkit_web_view_get_context(c->view), a->b ? WEBKIT_CACHE_MODEL_WEB_BROWSER : WEBKIT_CACHE_MODEL_DOCUMENT_VIEWER); - break; + return; /* do not update */ case DNSPrefetch: - refresh = 0; - break; + webkit_settings_set_enable_dns_prefetching(s, a->b); + return; /* do not update */ case FontSize: - webkit_settings_set_default_font_size( - webkit_web_view_get_settings(c->view), - curconfig[FontSize].val.i); - break; + webkit_settings_set_default_font_size(s, a->i); + return; /* do not update */ case FrameFlattening: webkit_settings_set_enable_frame_flattening(s, a->b); break; case Geolocation: + refresh = 0; break; case HideBackground: - return; /* do nothing */ + if (a->b) + webkit_web_view_set_background_color(c->view, &bgcolor); + return; /* do not update */ case Inspector: - return; /* do nothing */ + webkit_settings_set_enable_developer_extras(s, a->b); + return; /* do not update */ case JavaScript: webkit_settings_set_enable_javascript(s, a->b); break; @@ -627,25 +636,23 @@ setparameter(Client *c, int refresh, ParamName p, const Arg *a) evalscript(c, "document.documentElement.style.overflow = '%s'", enablescrollbars ? "auto" : "hidden"); */ - refresh = 0; - break; + return; /* do not update */ case ShowIndicators: - return; /* do nothing */ + break; case SpellChecking: webkit_web_context_set_spell_checking_enabled( - webkit_web_view_get_context(c->view), - curconfig[SpellChecking].val.b); - return; /* do nothing */ + webkit_web_view_get_context(c->view), a->b); + return; /* do not update */ case SpellLanguages: return; /* do nothing */ case StrictSSL: webkit_web_context_set_tls_errors_policy( - webkit_web_view_get_context(c->view), - curconfig[StrictSSL].val.b ? WEBKIT_TLS_ERRORS_POLICY_FAIL : + webkit_web_view_get_context(c->view), a->b ? + WEBKIT_TLS_ERRORS_POLICY_FAIL : WEBKIT_TLS_ERRORS_POLICY_IGNORE); - return; /* do nothing */ + return; /* do not update */ case Style: - if (curconfig[Style].val.b) + if (a->b) setstyle(c, getstyle(geturi(c))); else webkit_user_content_manager_remove_all_style_sheets( @@ -653,7 +660,8 @@ setparameter(Client *c, int refresh, ParamName p, const Arg *a) refresh = 0; break; case ZoomLevel: - return; /* do nothing */ + webkit_web_view_set_zoom_level(c->view, a->f); + return; /* do not update */ default: return; /* do nothing */ } @@ -1079,8 +1087,7 @@ showview(WebKitWebView *v, Client *c) GdkWindow *gwin; c->finder = webkit_web_view_get_find_controller(c->view); - if (curconfig[Inspector].val.b) - c->inspector = webkit_web_view_get_inspector(c->view); + c->inspector = webkit_web_view_get_inspector(c->view); c->win = createwindow(c); @@ -1163,20 +1170,18 @@ loadchanged(WebKitWebView *v, WebKitLoadEvent e, Client *c) setatom(c, AtomUri, title); c->title = title; c->tlsflags = G_TLS_CERTIFICATE_VALIDATE_ALL + 1; + seturiparameters(c, geturi(c)); break; case WEBKIT_LOAD_REDIRECTED: setatom(c, AtomUri, title); c->title = title; + seturiparameters(c, geturi(c)); break; case WEBKIT_LOAD_COMMITTED: - setatom(c, AtomUri, title); - c->title = title; if (!webkit_web_view_get_tls_info(c->view, NULL, &(c->tlsflags))) c->tlsflags = G_TLS_CERTIFICATE_VALIDATE_ALL + 1; - setatom(c, AtomUri, geturi(c)); - seturiparameters(c, geturi(c)); break; case WEBKIT_LOAD_FINISHED: /* Disabled until we write some WebKitWebExtension for @@ -1457,7 +1462,6 @@ scroll(Client *c, const Arg *a) GdkEvent *ev = gdk_event_new(GDK_KEY_PRESS); gdk_event_set_device(ev, gdkkb); -// gdk_event_set_screen(ev, gdk_screen_get_default()); ev->key.window = gtk_widget_get_window(GTK_WIDGET(c->win)); ev->key.state = GDK_CONTROL_MASK; ev->key.time = GDK_CURRENT_TIME; @@ -1530,12 +1534,10 @@ togglecookiepolicy(Client *c, const Arg *a) void toggleinspector(Client *c, const Arg *a) { - if (curconfig[Inspector].val.b) { - if (webkit_web_inspector_is_attached(c->inspector)) - webkit_web_inspector_close(c->inspector); - else - webkit_web_inspector_show(c->inspector); - } + if (webkit_web_inspector_is_attached(c->inspector)) + webkit_web_inspector_close(c->inspector); + else if (curconfig[Inspector].val.b) + webkit_web_inspector_show(c->inspector); } void @@ -1599,76 +1601,76 @@ main(int argc, char *argv[]) /* command line args */ ARGBEGIN { case 'a': - defconfig FSETV(CookiePolicies, EARGF(usage())); + defconfig CSETV(CookiePolicies, EARGF(usage())); break; case 'b': - defconfig FSETB(ScrollBars, 0); + defconfig CSETB(ScrollBars, 0); break; case 'B': - defconfig FSETB(ScrollBars, 1); + defconfig CSETB(ScrollBars, 1); break; case 'c': cookiefile = EARGF(usage()); break; case 'd': - defconfig FSETB(DiskCache, 0); + defconfig CSETB(DiskCache, 0); break; case 'D': - defconfig FSETB(DiskCache, 1); + defconfig CSETB(DiskCache, 1); break; case 'e': embed = strtol(EARGF(usage()), NULL, 0); break; case 'f': - defconfig FSETB(RunInFullscreen, 0); + defconfig CSETB(RunInFullscreen, 0); break; case 'F': - defconfig FSETB(RunInFullscreen, 1); + defconfig CSETB(RunInFullscreen, 1); break; case 'g': - defconfig FSETB(Geolocation, 0); + defconfig CSETB(Geolocation, 0); break; case 'G': - defconfig FSETB(Geolocation, 1); + defconfig CSETB(Geolocation, 1); break; case 'i': - defconfig FSETB(LoadImages, 0); + defconfig CSETB(LoadImages, 0); break; case 'I': - defconfig FSETB(LoadImages, 1); + defconfig CSETB(LoadImages, 1); break; case 'k': - defconfig FSETB(KioskMode, 0); + defconfig CSETB(KioskMode, 0); break; case 'K': - defconfig FSETB(KioskMode, 1); + defconfig CSETB(KioskMode, 1); break; case 'm': - defconfig FSETB(Style, 0); + defconfig CSETB(Style, 0); break; case 'M': - defconfig FSETB(Style, 1); + defconfig CSETB(Style, 1); break; case 'n': - defconfig FSETB(Inspector, 0); + defconfig CSETB(Inspector, 0); break; case 'N': - defconfig FSETB(Inspector, 1); + defconfig CSETB(Inspector, 1); break; case 'p': - defconfig FSETB(Plugins, 0); + defconfig CSETB(Plugins, 0); break; case 'P': - defconfig FSETB(Plugins, 1); + defconfig CSETB(Plugins, 1); break; case 'r': scriptfile = EARGF(usage()); break; case 's': - defconfig FSETB(JavaScript, 0); + defconfig CSETB(JavaScript, 0); break; case 'S': - defconfig FSETB(JavaScript, 1); + defconfig CSETB(JavaScript, 1); break; case 't': stylefile = EARGF(usage()); @@ -1683,7 +1685,7 @@ main(int argc, char *argv[]) showxid = 1; break; case 'z': - defconfig FSETF(ZoomLevel, strtof(EARGF(usage()), NULL)); + defconfig CSETF(ZoomLevel, strtof(EARGF(usage()), NULL)); break; default: usage();