X-Git-Url: https://git.danieliu.xyz/?p=surf.git;a=blobdiff_plain;f=surf.c;h=0f8b9c9174fdf122a058cd3652507796ea076a38;hp=05d173e8af760a039e58019af3e6a0669eff4845;hb=723ff26c3618cf4db1ae34688509cbcdfed1412f;hpb=290114530161b0302d06f6934ce088771c272181 diff --git a/surf.c b/surf.c index 05d173e..0f8b9c9 100644 --- a/surf.c +++ b/surf.c @@ -33,18 +33,6 @@ #define LENGTH(x) (sizeof(x) / sizeof(x[0])) #define CLEANMASK(mask) (mask & (MODKEY|GDK_SHIFT_MASK)) -#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 }; @@ -61,16 +49,21 @@ enum { typedef enum { AcceleratedCanvas, + AccessMicrophone, + AccessWebcam, CaretBrowsing, Certificate, CookiePolicies, DiskCache, + DefaultCharset, DNSPrefetch, + FileURLsCrossAccess, FontSize, FrameFlattening, Geolocation, HideBackground, Inspector, + Java, JavaScript, KioskMode, LoadImages, @@ -81,16 +74,16 @@ typedef enum { ScrollBars, ShowIndicators, SiteQuirks, + SmoothScrolling, SpellChecking, SpellLanguages, StrictTLS, Style, ZoomLevel, - ParameterLast, + ParameterLast } ParamName; typedef union { - int b; int i; float f; const void *v; @@ -98,7 +91,7 @@ typedef union { typedef struct { Arg val; - int force; + int prio; } Parameter; typedef struct Client { @@ -164,7 +157,7 @@ static void gettogglestats(Client *c); static void getpagestats(Client *c); static WebKitCookieAcceptPolicy cookiepolicy_get(void); static char cookiepolicy_set(const WebKitCookieAcceptPolicy p); -static void seturiparameters(Client *c, const char *uri); +static void seturiparameters(Client *c, const char *uri, ParamName *params); static void setparameter(Client *c, int refresh, ParamName p, const Arg *a); static const char *getcert(const char *uri); static void setcert(Client *c, const char *file); @@ -248,17 +241,62 @@ static GdkDevice *gdkkb; static char *stylefile; static const char *useragent; static Parameter *curconfig; +static int modparams[ParameterLast]; char *argv0; +static ParamName loadtransient[] = { + Certificate, + CookiePolicies, + DiskCache, + DNSPrefetch, + FileURLsCrossAccess, + JavaScript, + LoadImages, + PreferredLanguages, + ShowIndicators, + StrictTLS, + ParameterLast +}; + +static ParamName loadcommitted[] = { + AcceleratedCanvas, +// AccessMicrophone, +// AccessWebcam, + CaretBrowsing, + DefaultCharset, + FontSize, + FrameFlattening, + Geolocation, + HideBackground, + Inspector, + Java, +// KioskMode, + MediaManualPlay, + Plugins, + RunInFullscreen, + ScrollBars, + SiteQuirks, + SmoothScrolling, + SpellChecking, + SpellLanguages, + Style, + ZoomLevel, + ParameterLast +}; + +static ParamName loadfinished[] = { + ParameterLast +}; + /* configuration, allows nested code to access above variables */ #include "config.h" void usage(void) { - die("usage: %s [-bBdDfFgGiIkKmMnNpPsStTvwxX] [-a cookiepolicies ] " - "[-c cookiefile] [-C stylefile] [-e xid] [-r scriptfile] " - "[-u useragent] [-z zoomlevel] [uri]\n", basename(argv0)); + die("usage: surf [-bBdDfFgGiIkKmMnNpPsStTvwxX]\n" + "[-a cookiepolicies ] [-c cookiefile] [-C stylefile] [-e xid]\n" + "[-r scriptfile] [-u useragent] [-z zoomlevel] [uri]\n"); } void @@ -335,19 +373,18 @@ setup(void) } for (i = 0; i < LENGTH(uriparams); ++i) { - if (!regcomp(&(uriparams[i].re), uriparams[i].uri, + if (regcomp(&(uriparams[i].re), uriparams[i].uri, REG_EXTENDED)) { - /* copy default parameters if they are not already set - * or if they are forced */ - for (j = 0; j < ParameterLast; ++j) { - if (!uriparams[i].config[j].force || - defconfig[j].force) - uriparams[i].config[j] = defconfig[j]; - } - } else { fprintf(stderr, "Could not compile regex: %s\n", uriparams[i].uri); uriparams[i].uri = NULL; + continue; + } + + /* copy default parameters with higher priority */ + for (j = 0; j < ParameterLast; ++j) { + if (defconfig[j].prio >= uriparams[i].config[j].prio) + uriparams[i].config[j] = defconfig[j]; } } } @@ -364,7 +401,7 @@ sigchld(int unused) void sighup(int unused) { - Arg a = { .b = 0 }; + Arg a = { .i = 0 }; Client *c; for (c = clients; c; c = c->next) @@ -527,10 +564,10 @@ geturi(Client *c) void setatom(Client *c, int a, const char *v) { - XSync(dpy, False); XChangeProperty(dpy, c->xid, atoms[a], XA_STRING, 8, PropModeReplace, (unsigned char *)v, strlen(v) + 1); + XSync(dpy, False); } const char * @@ -542,6 +579,7 @@ getatom(Client *c, int a) unsigned long ldummy; unsigned char *p = NULL; + XSync(dpy, False); XGetWindowProperty(dpy, c->xid, atoms[a], 0L, BUFSIZ, False, XA_STRING, &adummy, &idummy, &ldummy, &ldummy, &p); if (p) @@ -560,7 +598,7 @@ updatetitle(Client *c) const char *name = c->overtitle ? c->overtitle : c->title ? c->title : ""; - if (curconfig[ShowIndicators].val.b) { + if (curconfig[ShowIndicators].val.i) { gettogglestats(c); getpagestats(c); @@ -582,16 +620,16 @@ void gettogglestats(Client *c) { togglestats[0] = cookiepolicy_set(cookiepolicy_get()); - togglestats[1] = curconfig[CaretBrowsing].val.b ? 'C' : 'c'; - togglestats[2] = curconfig[Geolocation].val.b ? 'G' : 'g'; - togglestats[3] = curconfig[DiskCache].val.b ? 'D' : 'd'; - togglestats[4] = curconfig[LoadImages].val.b ? 'I' : 'i'; - togglestats[5] = curconfig[JavaScript].val.b ? 'S' : 's'; - togglestats[6] = curconfig[Plugins].val.b ? 'V' : 'v'; - togglestats[7] = curconfig[Style].val.b ? 'M' : 'm'; - togglestats[8] = curconfig[FrameFlattening].val.b ? 'F' : 'f'; - togglestats[9] = curconfig[Certificate].val.b ? 'X' : 'x'; - togglestats[10] = curconfig[StrictTLS].val.b ? 'T' : 't'; + togglestats[1] = curconfig[CaretBrowsing].val.i ? 'C' : 'c'; + togglestats[2] = curconfig[Geolocation].val.i ? 'G' : 'g'; + togglestats[3] = curconfig[DiskCache].val.i ? 'D' : 'd'; + togglestats[4] = curconfig[LoadImages].val.i ? 'I' : 'i'; + togglestats[5] = curconfig[JavaScript].val.i ? 'S' : 's'; + togglestats[6] = curconfig[Plugins].val.i ? 'V' : 'v'; + togglestats[7] = curconfig[Style].val.i ? 'M' : 'm'; + togglestats[8] = curconfig[FrameFlattening].val.i ? 'F' : 'f'; + togglestats[9] = curconfig[Certificate].val.i ? 'X' : 'x'; + togglestats[10] = curconfig[StrictTLS].val.i ? 'T' : 't'; togglestats[11] = '\0'; } @@ -634,20 +672,33 @@ cookiepolicy_set(const WebKitCookieAcceptPolicy p) } void -seturiparameters(Client *c, const char *uri) +seturiparameters(Client *c, const char *uri, ParamName *params) { - int i; + Parameter *config, *uriconfig = NULL; + int i, p; for (i = 0; i < LENGTH(uriparams); ++i) { if (uriparams[i].uri && !regexec(&(uriparams[i].re), uri, 0, NULL, 0)) { - curconfig = uriparams[i].config; + uriconfig = uriparams[i].config; break; } } - for (i = 0; i < ParameterLast; ++i) - setparameter(c, 0, i, &curconfig[i].val); + curconfig = uriconfig ? uriconfig : defconfig; + + for (i = 0; (p = params[i]) != ParameterLast; ++i) { + switch(p) { + default: /* FALLTHROUGH */ + if (!(defconfig[p].prio < curconfig[p].prio || + defconfig[p].prio < modparams[p])) + continue; + case Certificate: + case CookiePolicies: + case Style: + setparameter(c, 0, p, &curconfig[p].val); + } + } } void @@ -656,16 +707,22 @@ setparameter(Client *c, int refresh, ParamName p, const Arg *a) GdkRGBA bgcolor = { 0 }; WebKitSettings *s = webkit_web_view_get_settings(c->view); + modparams[p] = curconfig[p].prio; + switch (p) { case AcceleratedCanvas: - webkit_settings_set_enable_accelerated_2d_canvas(s, a->b); + webkit_settings_set_enable_accelerated_2d_canvas(s, a->i); break; + case AccessMicrophone: + return; /* do nothing */ + case AccessWebcam: + return; /* do nothing */ case CaretBrowsing: - webkit_settings_set_enable_caret_browsing(s, a->b); + webkit_settings_set_enable_caret_browsing(s, a->i); refresh = 0; break; case Certificate: - if (a->b) + if (a->i) setcert(c, geturi(c)); return; /* do not update */ case CookiePolicies: @@ -677,42 +734,52 @@ 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), a->b ? + webkit_web_view_get_context(c->view), a->i ? WEBKIT_CACHE_MODEL_WEB_BROWSER : WEBKIT_CACHE_MODEL_DOCUMENT_VIEWER); return; /* do not update */ + case DefaultCharset: + webkit_settings_set_default_charset(s, a->v); + return; /* do not update */ case DNSPrefetch: - webkit_settings_set_enable_dns_prefetching(s, a->b); + webkit_settings_set_enable_dns_prefetching(s, a->i); + return; /* do not update */ + case FileURLsCrossAccess: + webkit_settings_set_allow_file_access_from_file_urls(s, a->i); + webkit_settings_set_allow_universal_access_from_file_urls(s, a->i); return; /* do not update */ case FontSize: webkit_settings_set_default_font_size(s, a->i); return; /* do not update */ case FrameFlattening: - webkit_settings_set_enable_frame_flattening(s, a->b); + webkit_settings_set_enable_frame_flattening(s, a->i); break; case Geolocation: refresh = 0; break; case HideBackground: - if (a->b) + if (a->i) webkit_web_view_set_background_color(c->view, &bgcolor); return; /* do not update */ case Inspector: - webkit_settings_set_enable_developer_extras(s, a->b); + webkit_settings_set_enable_developer_extras(s, a->i); + return; /* do not update */ + case Java: + webkit_settings_set_enable_java(s, a->i); return; /* do not update */ case JavaScript: - webkit_settings_set_enable_javascript(s, a->b); + webkit_settings_set_enable_javascript(s, a->i); break; case KioskMode: return; /* do nothing */ case LoadImages: - webkit_settings_set_auto_load_images(s, a->b); + webkit_settings_set_auto_load_images(s, a->i); break; case MediaManualPlay: - webkit_settings_set_media_playback_requires_user_gesture(s, a->b); + webkit_settings_set_media_playback_requires_user_gesture(s, a->i); break; case Plugins: - webkit_settings_set_enable_plugins(s, a->b); + webkit_settings_set_enable_plugins(s, a->i); break; case PreferredLanguages: return; /* do nothing */ @@ -728,27 +795,29 @@ setparameter(Client *c, int refresh, ParamName p, const Arg *a) return; /* do not update */ case ShowIndicators: break; + case SmoothScrolling: + webkit_settings_set_enable_smooth_scrolling(s, a->i); + return; /* do not update */ case SiteQuirks: - webkit_settings_set_enable_site_specific_quirks(s, a->b); + webkit_settings_set_enable_site_specific_quirks(s, a->i); break; case SpellChecking: webkit_web_context_set_spell_checking_enabled( - webkit_web_view_get_context(c->view), a->b); + webkit_web_view_get_context(c->view), a->i); return; /* do not update */ case SpellLanguages: return; /* do nothing */ case StrictTLS: webkit_web_context_set_tls_errors_policy( - webkit_web_view_get_context(c->view), a->b ? + webkit_web_view_get_context(c->view), a->i ? WEBKIT_TLS_ERRORS_POLICY_FAIL : WEBKIT_TLS_ERRORS_POLICY_IGNORE); break; case Style: - if (a->b) + webkit_user_content_manager_remove_all_style_sheets( + webkit_web_view_get_user_content_manager(c->view)); + if (a->i) setstyle(c, getstyle(geturi(c))); - else - webkit_user_content_manager_remove_all_style_sheets( - webkit_web_view_get_user_content_manager(c->view)); refresh = 0; break; case ZoomLevel: @@ -890,7 +959,7 @@ newwindow(Client *c, const Arg *a, int noembed) cmd[i++] = argv0; cmd[i++] = "-a"; cmd[i++] = curconfig[CookiePolicies].val.v; - cmd[i++] = curconfig[ScrollBars].val.b ? "-B" : "-b"; + cmd[i++] = curconfig[ScrollBars].val.i ? "-B" : "-b"; if (cookiefile && g_strcmp0(cookiefile, "")) { cmd[i++] = "-c"; cmd[i++] = cookiefile; @@ -899,32 +968,32 @@ newwindow(Client *c, const Arg *a, int noembed) cmd[i++] = "-C"; cmd[i++] = stylefile; } - cmd[i++] = curconfig[DiskCache].val.b ? "-D" : "-d"; + cmd[i++] = curconfig[DiskCache].val.i ? "-D" : "-d"; if (embed && !noembed) { cmd[i++] = "-e"; snprintf(tmp, LENGTH(tmp), "%lu", embed); cmd[i++] = tmp; } - cmd[i++] = curconfig[RunInFullscreen].val.b ? "-F" : "-f" ; - cmd[i++] = curconfig[Geolocation].val.b ? "-G" : "-g" ; - cmd[i++] = curconfig[LoadImages].val.b ? "-I" : "-i" ; - cmd[i++] = curconfig[KioskMode].val.b ? "-K" : "-k" ; - cmd[i++] = curconfig[Style].val.b ? "-M" : "-m" ; - cmd[i++] = curconfig[Inspector].val.b ? "-N" : "-n" ; - cmd[i++] = curconfig[Plugins].val.b ? "-P" : "-p" ; + cmd[i++] = curconfig[RunInFullscreen].val.i ? "-F" : "-f" ; + cmd[i++] = curconfig[Geolocation].val.i ? "-G" : "-g" ; + cmd[i++] = curconfig[LoadImages].val.i ? "-I" : "-i" ; + cmd[i++] = curconfig[KioskMode].val.i ? "-K" : "-k" ; + cmd[i++] = curconfig[Style].val.i ? "-M" : "-m" ; + cmd[i++] = curconfig[Inspector].val.i ? "-N" : "-n" ; + cmd[i++] = curconfig[Plugins].val.i ? "-P" : "-p" ; if (scriptfile && g_strcmp0(scriptfile, "")) { cmd[i++] = "-r"; cmd[i++] = scriptfile; } - cmd[i++] = curconfig[JavaScript].val.b ? "-S" : "-s"; - cmd[i++] = curconfig[StrictTLS].val.b ? "-T" : "-t"; + cmd[i++] = curconfig[JavaScript].val.i ? "-S" : "-s"; + cmd[i++] = curconfig[StrictTLS].val.i ? "-T" : "-t"; if (fulluseragent && g_strcmp0(fulluseragent, "")) { cmd[i++] = "-u"; cmd[i++] = fulluseragent; } if (showxid) cmd[i++] = "-w"; - cmd[i++] = curconfig[Certificate].val.b ? "-X" : "-x" ; + cmd[i++] = curconfig[Certificate].val.i ? "-X" : "-x" ; /* do not keep zoom level */ cmd[i++] = "--"; if ((uri = a->v)) @@ -993,19 +1062,24 @@ newview(Client *c, WebKitWebView *rv) webkit_web_view_new_with_related_view(rv)); } else { settings = webkit_settings_new_with_settings( - "auto-load-images", curconfig[LoadImages].val.b, + "allow-file-access-from-file-urls", curconfig[FileURLsCrossAccess].val.i, + "allow-universal-access-from-file-urls", curconfig[FileURLsCrossAccess].val.i, + "auto-load-images", curconfig[LoadImages].val.i, + "default-charset", curconfig[DefaultCharset].val.v, "default-font-size", curconfig[FontSize].val.i, - "enable-caret-browsing", curconfig[CaretBrowsing].val.b, - "enable-developer-extras", curconfig[Inspector].val.b, - "enable-dns-prefetching", curconfig[DNSPrefetch].val.b, - "enable-frame-flattening", curconfig[FrameFlattening].val.b, - "enable-html5-database", curconfig[DiskCache].val.b, - "enable-html5-local-storage", curconfig[DiskCache].val.b, - "enable-javascript", curconfig[JavaScript].val.b, - "enable-plugins", curconfig[Plugins].val.b, - "enable-accelerated-2d-canvas", curconfig[AcceleratedCanvas].val.b, - "enable-site-specific-quirks", curconfig[SiteQuirks].val.b, - "media-playback-requires-user-gesture", curconfig[MediaManualPlay].val.b, + "enable-caret-browsing", curconfig[CaretBrowsing].val.i, + "enable-developer-extras", curconfig[Inspector].val.i, + "enable-dns-prefetching", curconfig[DNSPrefetch].val.i, + "enable-frame-flattening", curconfig[FrameFlattening].val.i, + "enable-html5-database", curconfig[DiskCache].val.i, + "enable-html5-local-storage", curconfig[DiskCache].val.i, + "enable-java", curconfig[Java].val.i, + "enable-javascript", curconfig[JavaScript].val.i, + "enable-plugins", curconfig[Plugins].val.i, + "enable-accelerated-2d-canvas", curconfig[AcceleratedCanvas].val.i, + "enable-site-specific-quirks", curconfig[SiteQuirks].val.i, + "enable-smooth-scrolling", curconfig[SmoothScrolling].val.i, + "media-playback-requires-user-gesture", curconfig[MediaManualPlay].val.i, NULL); /* For more interesting settings, have a look at * http://webkitgtk.org/reference/webkit2gtk/stable/WebKitSettings.html */ @@ -1032,11 +1106,11 @@ newview(Client *c, WebKitWebView *rv) WEBKIT_PROCESS_MODEL_MULTIPLE_SECONDARY_PROCESSES); /* TLS */ webkit_web_context_set_tls_errors_policy(context, - curconfig[StrictTLS].val.b ? WEBKIT_TLS_ERRORS_POLICY_FAIL : + curconfig[StrictTLS].val.i ? WEBKIT_TLS_ERRORS_POLICY_FAIL : WEBKIT_TLS_ERRORS_POLICY_IGNORE); /* disk cache */ webkit_web_context_set_cache_model(context, - curconfig[DiskCache].val.b ? WEBKIT_CACHE_MODEL_WEB_BROWSER : + curconfig[DiskCache].val.i ? WEBKIT_CACHE_MODEL_WEB_BROWSER : WEBKIT_CACHE_MODEL_DOCUMENT_VIEWER); /* Currently only works with text file to be compatible with curl */ @@ -1053,7 +1127,7 @@ newview(Client *c, WebKitWebView *rv) webkit_web_context_set_spell_checking_languages(context, curconfig[SpellLanguages].val.v); webkit_web_context_set_spell_checking_enabled(context, - curconfig[SpellChecking].val.b); + curconfig[SpellChecking].val.i); g_signal_connect(G_OBJECT(context), "download-started", G_CALLBACK(downloadstarted), c); @@ -1186,7 +1260,7 @@ winevent(GtkWidget *w, GdkEvent *e, Client *c) updatetitle(c); break; case GDK_KEY_PRESS: - if (!curconfig[KioskMode].val.b) { + if (!curconfig[KioskMode].val.i) { for (i = 0; i < LENGTH(keys); ++i) { if (gdk_keyval_to_lower(e->key.keyval) == keys[i].keyval && @@ -1238,15 +1312,15 @@ showview(WebKitWebView *v, Client *c) puts(winid); } - if (curconfig[HideBackground].val.b) + if (curconfig[HideBackground].val.i) webkit_web_view_set_background_color(c->view, &bgcolor); - if (!curconfig[KioskMode].val.b) { + if (!curconfig[KioskMode].val.i) { gdk_window_set_events(gwin, GDK_ALL_EVENTS_MASK); gdk_window_add_filter(gwin, processx, c); } - if (curconfig[RunInFullscreen].val.b) + if (curconfig[RunInFullscreen].val.i) togglefullscreen(c, NULL); if (curconfig[ZoomLevel].val.f != 1.0) @@ -1346,30 +1420,31 @@ loadfailedtls(WebKitWebView *v, gchar *uri, GTlsCertificate *cert, void loadchanged(WebKitWebView *v, WebKitLoadEvent e, Client *c) { - const char *title = geturi(c); + const char *uri = geturi(c); switch (e) { case WEBKIT_LOAD_STARTED: - curconfig = defconfig; - setatom(c, AtomUri, title); - c->title = title; + setatom(c, AtomUri, uri); + c->title = uri; c->https = c->insecure = 0; - seturiparameters(c, geturi(c)); + seturiparameters(c, uri, loadtransient); if (c->errorpage) c->errorpage = 0; else g_clear_object(&c->failedcert); break; case WEBKIT_LOAD_REDIRECTED: - setatom(c, AtomUri, title); - c->title = title; - seturiparameters(c, geturi(c)); + setatom(c, AtomUri, uri); + c->title = uri; + seturiparameters(c, uri, loadtransient); break; case WEBKIT_LOAD_COMMITTED: + seturiparameters(c, uri, loadcommitted); c->https = webkit_web_view_get_tls_info(c->view, &c->cert, &c->tlserr); break; case WEBKIT_LOAD_FINISHED: + seturiparameters(c, uri, loadfinished); /* Disabled until we write some WebKitWebExtension for * manipulating the DOM directly. evalscript(c, "document.documentElement.style.overflow = '%s'", @@ -1421,15 +1496,27 @@ mousetargetchanged(WebKitWebView *v, WebKitHitTestResult *h, guint modifiers, gboolean permissionrequested(WebKitWebView *v, WebKitPermissionRequest *r, Client *c) { + ParamName param = ParameterLast; + if (WEBKIT_IS_GEOLOCATION_PERMISSION_REQUEST(r)) { - if (curconfig[Geolocation].val.b) - webkit_permission_request_allow(r); - else - webkit_permission_request_deny(r); - return TRUE; + param = Geolocation; + } else if (WEBKIT_IS_USER_MEDIA_PERMISSION_REQUEST(r)) { + if (webkit_user_media_permission_is_for_audio_device( + WEBKIT_USER_MEDIA_PERMISSION_REQUEST(r))) + param = AccessMicrophone; + else if (webkit_user_media_permission_is_for_video_device( + WEBKIT_USER_MEDIA_PERMISSION_REQUEST(r))) + param = AccessWebcam; + } else { + return FALSE; } - return FALSE; + if (curconfig[param].val.i) + webkit_permission_request_allow(r); + else + webkit_permission_request_deny(r); + + return TRUE; } gboolean @@ -1606,7 +1693,7 @@ pasteuri(GtkClipboard *clipboard, const char *text, gpointer d) void reload(Client *c, const Arg *a) { - if (a->b) + if (a->i) webkit_web_view_reload_bypass_cache(c->view); else webkit_web_view_reload(c->view); @@ -1646,7 +1733,7 @@ showcert(Client *c, const Arg *a) void clipboard(Client *c, const Arg *a) { - if (a->b) { /* load clipboard uri */ + if (a->i) { /* load clipboard uri */ gtk_clipboard_request_text(gtk_clipboard_get( GDK_SELECTION_PRIMARY), pasteuri, c); @@ -1724,7 +1811,7 @@ stop(Client *c, const Arg *a) void toggle(Client *c, const Arg *a) { - curconfig[a->i].val.b ^= 1; + curconfig[a->i].val.i ^= 1; setparameter(c, 1, (ParamName)a->i, &curconfig[a->i].val); } @@ -1752,7 +1839,7 @@ toggleinspector(Client *c, const Arg *a) { if (webkit_web_inspector_is_attached(c->inspector)) webkit_web_inspector_close(c->inspector); - else if (curconfig[Inspector].val.b) + else if (curconfig[Inspector].val.i) webkit_web_inspector_show(c->inspector); } @@ -1794,7 +1881,7 @@ clicknewwindow(Client *c, const Arg *a, WebKitHitTestResult *h) Arg arg; arg.v = webkit_hit_test_result_get_link_uri(h); - newwindow(c, &arg, a->b); + newwindow(c, &arg, a->i); } void @@ -1817,13 +1904,16 @@ main(int argc, char *argv[]) /* command line args */ ARGBEGIN { case 'a': - defconfig CSETV(CookiePolicies, EARGF(usage())); + defconfig[CookiePolicies].val.v = EARGF(usage()); + defconfig[CookiePolicies].prio = 2; break; case 'b': - defconfig CSETB(ScrollBars, 0); + defconfig[ScrollBars].val.i = 0; + defconfig[ScrollBars].prio = 2; break; case 'B': - defconfig CSETB(ScrollBars, 1); + defconfig[ScrollBars].val.i = 1; + defconfig[ScrollBars].prio = 2; break; case 'c': cookiefile = EARGF(usage()); @@ -1832,70 +1922,90 @@ main(int argc, char *argv[]) stylefile = EARGF(usage()); break; case 'd': - defconfig CSETB(DiskCache, 0); + defconfig[DiskCache].val.i = 0; + defconfig[DiskCache].prio = 2; break; case 'D': - defconfig CSETB(DiskCache, 1); + defconfig[DiskCache].val.i = 1; + defconfig[DiskCache].prio = 2; break; case 'e': embed = strtol(EARGF(usage()), NULL, 0); break; case 'f': - defconfig CSETB(RunInFullscreen, 0); + defconfig[RunInFullscreen].val.i = 0; + defconfig[RunInFullscreen].prio = 2; break; case 'F': - defconfig CSETB(RunInFullscreen, 1); + defconfig[RunInFullscreen].val.i = 1; + defconfig[RunInFullscreen].prio = 2; break; case 'g': - defconfig CSETB(Geolocation, 0); + defconfig[Geolocation].val.i = 0; + defconfig[Geolocation].prio = 2; break; case 'G': - defconfig CSETB(Geolocation, 1); + defconfig[Geolocation].val.i = 1; + defconfig[Geolocation].prio = 2; break; case 'i': - defconfig CSETB(LoadImages, 0); + defconfig[LoadImages].val.i = 0; + defconfig[LoadImages].prio = 2; break; case 'I': - defconfig CSETB(LoadImages, 1); + defconfig[LoadImages].val.i = 1; + defconfig[LoadImages].prio = 2; break; case 'k': - defconfig CSETB(KioskMode, 0); + defconfig[KioskMode].val.i = 0; + defconfig[KioskMode].prio = 2; break; case 'K': - defconfig CSETB(KioskMode, 1); + defconfig[KioskMode].val.i = 1; + defconfig[KioskMode].prio = 2; break; case 'm': - defconfig CSETB(Style, 0); + defconfig[Style].val.i = 0; + defconfig[Style].prio = 2; break; case 'M': - defconfig CSETB(Style, 1); + defconfig[Style].val.i = 1; + defconfig[Style].prio = 2; break; case 'n': - defconfig CSETB(Inspector, 0); + defconfig[Inspector].val.i = 0; + defconfig[Inspector].prio = 2; break; case 'N': - defconfig CSETB(Inspector, 1); + defconfig[Inspector].val.i = 1; + defconfig[Inspector].prio = 2; break; case 'p': - defconfig CSETB(Plugins, 0); + defconfig[Plugins].val.i = 0; + defconfig[Plugins].prio = 2; break; case 'P': - defconfig CSETB(Plugins, 1); + defconfig[Plugins].val.i = 1; + defconfig[Plugins].prio = 2; break; case 'r': scriptfile = EARGF(usage()); break; case 's': - defconfig CSETB(JavaScript, 0); + defconfig[JavaScript].val.i = 0; + defconfig[JavaScript].prio = 2; break; case 'S': - defconfig CSETB(JavaScript, 1); + defconfig[JavaScript].val.i = 1; + defconfig[JavaScript].prio = 2; break; case 't': - defconfig CSETB(StrictTLS, 0); + defconfig[StrictTLS].val.i = 0; + defconfig[StrictTLS].prio = 2; break; case 'T': - defconfig CSETB(StrictTLS, 1); + defconfig[StrictTLS].val.i = 1; + defconfig[StrictTLS].prio = 2; break; case 'u': fulluseragent = EARGF(usage()); @@ -1906,13 +2016,16 @@ main(int argc, char *argv[]) showxid = 1; break; case 'x': - defconfig CSETB(Certificate, 0); + defconfig[Certificate].val.i = 0; + defconfig[Certificate].prio = 2; break; case 'X': - defconfig CSETB(Certificate, 1); + defconfig[Certificate].val.i = 1; + defconfig[Certificate].prio = 2; break; case 'z': - defconfig CSETF(ZoomLevel, strtof(EARGF(usage()), NULL)); + defconfig[ZoomLevel].val.f = strtof(EARGF(usage()), NULL); + defconfig[ZoomLevel].prio = 2; break; default: usage();