Fix font-size setting parameter value type in newview
[surf.git] / surf.c
diff --git a/surf.c b/surf.c
index 9851bba..cd0a13c 100644 (file)
--- a/surf.c
+++ b/surf.c
@@ -58,6 +58,7 @@ enum {
 };
 
 typedef enum {
+       AcceleratedCanvas,
        CaretBrowsing,
        CookiePolicies,
        DiskCache,
@@ -70,11 +71,13 @@ typedef enum {
        JavaScript,
        KioskMode,
        LoadImages,
+       MediaManualPlay,
        Plugins,
        PreferredLanguages,
        RunInFullscreen,
        ScrollBars,
        ShowIndicators,
+       SiteQuirks,
        SpellChecking,
        SpellLanguages,
        StrictSSL,
@@ -142,6 +145,7 @@ static void usage(void);
 static void die(const char *errstr, ...);
 static void setup(void);
 static void sigchld(int unused);
+static void sighup(int unused);
 static char *buildfile(const char *path);
 static char *buildpath(const char *path);
 static const char *getuserhomedir(const char *user);
@@ -170,8 +174,8 @@ static void destroyclient(Client *c);
 static void cleanup(void);
 
 /* GTK/WebKit */
-static GdkDevice *getkbdevice(void);
 static WebKitWebView *newview(Client *c, WebKitWebView *rv);
+static void initwebextensions(WebKitWebContext *wc, Client *c);
 static GtkWidget *createview(WebKitWebView *v, WebKitNavigationAction *a,
                              Client *c);
 static gboolean buttonreleased(GtkWidget *w, GdkEvent *e, Client *c);
@@ -259,13 +263,18 @@ die(const char *errstr, ...)
 void
 setup(void)
 {
+       GdkDisplay *gdpy;
        int i, j;
 
        /* clean up any zombies immediately */
        sigchld(0);
+       if (signal(SIGHUP, sighup) == SIG_ERR)
+               die("Can't install SIGHUP handler");
+
        gtk_init(NULL, NULL);
 
-       dpy = GDK_DISPLAY_XDISPLAY(gdk_display_get_default());
+       gdpy = gdk_display_get_default();
+       dpy = GDK_DISPLAY_XDISPLAY(gdpy);
 
        curconfig = defconfig;
 
@@ -279,7 +288,7 @@ setup(void)
        scriptfile = buildfile(scriptfile);
        cachedir   = buildpath(cachedir);
 
-       gdkkb = getkbdevice();
+       gdkkb = gdk_seat_get_keyboard(gdk_display_get_default_seat(gdpy));
 
        if (!stylefile) {
                styledir = buildpath(styledir);
@@ -327,6 +336,16 @@ sigchld(int unused)
                ;
 }
 
+void
+sighup(int unused)
+{
+       Arg a = { .b = 0 };
+       Client *c;
+
+       for (c = clients; c; c = c->next)
+               reload(c, &a);
+}
+
 char *
 buildfile(const char *path)
 {
@@ -610,6 +629,9 @@ setparameter(Client *c, int refresh, ParamName p, const Arg *a)
        WebKitSettings *s = webkit_web_view_get_settings(c->view);
 
        switch (p) {
+       case AcceleratedCanvas:
+               webkit_settings_set_enable_accelerated_2d_canvas(s, a->b);
+               break;
        case CaretBrowsing:
                webkit_settings_set_enable_caret_browsing(s, a->b);
                refresh = 0;
@@ -654,6 +676,9 @@ setparameter(Client *c, int refresh, ParamName p, const Arg *a)
        case LoadImages:
                webkit_settings_set_auto_load_images(s, a->b);
                break;
+       case MediaManualPlay:
+               webkit_settings_set_media_playback_requires_user_gesture(s, a->b);
+               break;
        case Plugins:
                webkit_settings_set_enable_plugins(s, a->b);
                break;
@@ -671,6 +696,9 @@ setparameter(Client *c, int refresh, ParamName p, const Arg *a)
                return; /* do not update */
        case ShowIndicators:
                break;
+       case SiteQuirks:
+               webkit_settings_set_enable_site_specific_quirks(s, a->b);
+               break;
        case SpellChecking:
                webkit_web_context_set_spell_checking_enabled(
                    webkit_web_view_get_context(c->view), a->b);
@@ -875,22 +903,6 @@ cleanup(void)
        g_free(cachedir);
 }
 
-static GdkDevice *
-getkbdevice(void)
-{
-       GList *l, *gdl = gdk_device_manager_list_devices(
-                  gdk_display_get_device_manager(gdk_display_get_default()),
-                  GDK_DEVICE_TYPE_MASTER);
-       GdkDevice *gd = NULL;
-
-       for (l = gdl; l != NULL; l = l->next)
-               if (gdk_device_get_source(l->data) == GDK_SOURCE_KEYBOARD)
-                       gd = l->data;
-
-       g_list_free(gdl);
-       return gd;
-}
-
 WebKitWebView *
 newview(Client *c, WebKitWebView *rv)
 {
@@ -906,7 +918,7 @@ newview(Client *c, WebKitWebView *rv)
        } else {
                settings = webkit_settings_new_with_settings(
                   "auto-load-images", curconfig[LoadImages].val.b,
-                  "default-font-size", curconfig[FontSize].val.f,
+                  "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,
@@ -915,6 +927,9 @@ newview(Client *c, WebKitWebView *rv)
                   "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,
                   NULL);
 /* For mor interesting settings, have a look at
  * http://webkitgtk.org/reference/webkit2gtk/stable/WebKitSettings.html */
@@ -966,6 +981,8 @@ newview(Client *c, WebKitWebView *rv)
 
                g_signal_connect(G_OBJECT(context), "download-started",
                                 G_CALLBACK(downloadstarted), c);
+               g_signal_connect(G_OBJECT(context), "initialize-web-extensions",
+                                G_CALLBACK(initwebextensions), c);
 
                v = g_object_new(WEBKIT_TYPE_WEB_VIEW,
                    "settings", settings,
@@ -998,6 +1015,12 @@ newview(Client *c, WebKitWebView *rv)
        return v;
 }
 
+void
+initwebextensions(WebKitWebContext *wc, Client *c)
+{
+       webkit_web_context_set_web_extensions_directory(wc, WEBEXTDIR);
+}
+
 GtkWidget *
 createview(WebKitWebView *v, WebKitNavigationAction *a, Client *c)
 {