Rectify how parameters are handled in setparameter()
[surf.git] / surf.c
diff --git a/surf.c b/surf.c
index 2a05bf7..1c194a3 100644 (file)
--- a/surf.c
+++ b/surf.c
 
 #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 };
 
@@ -567,6 +571,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 +588,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 +633,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 +657,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 */
        }
@@ -1599,76 +1604,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 +1688,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();