Only get webkit context and settings once - surf - surf browser, a WebKit based browser
 (HTM) git clone git://git.suckless.org/surf
 (DIR) Log
 (DIR) Files
 (DIR) Refs
 (DIR) README
 (DIR) LICENSE
       ---
 (DIR) commit d3ee6528607d460b61870e69310e732992962073
 (DIR) parent 1f5b8f3bd1f37d4d3dc45d21285f34ef4752dbaa
 (HTM) Author: Quentin Rameau <quinq@fifth.space>
       Date:   Sun, 10 Apr 2022 18:43:45 +0200
       
       Only get webkit context and settings once
       
       Diffstat:
         M surf.c                              |      58 ++++++++++++++++++-------------
       
       1 file changed, 33 insertions(+), 25 deletions(-)
       ---
 (DIR) diff --git a/surf.c b/surf.c
       @@ -101,6 +101,8 @@ typedef struct {
        typedef struct Client {
                GtkWidget *win;
                WebKitWebView *view;
       +        WebKitSettings *settings;
       +        WebKitWebContext *context;
                WebKitWebInspector *inspector;
                WebKitFindController *finder;
                WebKitHitTestResult *mousepos;
       @@ -750,7 +752,6 @@ void
        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;
        
       @@ -760,7 +761,7 @@ setparameter(Client *c, int refresh, ParamName p, const Arg *a)
                case AccessWebcam:
                        return; /* do nothing */
                case CaretBrowsing:
       -                webkit_settings_set_enable_caret_browsing(s, a->i);
       +                webkit_settings_set_enable_caret_browsing(c->settings, a->i);
                        refresh = 0;
                        break;
                case Certificate:
       @@ -769,36 +770,37 @@ setparameter(Client *c, int refresh, ParamName p, const Arg *a)
                        return; /* do not update */
                case CookiePolicies:
                        webkit_cookie_manager_set_accept_policy(
       -                    webkit_web_context_get_cookie_manager(
       -                    webkit_web_view_get_context(c->view)),
       +                    webkit_web_context_get_cookie_manager(c->context),
                            cookiepolicy_get());
                        refresh = 0;
                        break;
                case DarkMode:
                        g_object_set(gtk_settings_get_default(),
                                     "gtk-application-prefer-dark-theme", a->i, NULL);
       +                return;
                        break;
                case DiskCache:
       -                webkit_web_context_set_cache_model(
       -                    webkit_web_view_get_context(c->view), a->i ?
       +                webkit_web_context_set_cache_model(c->context, 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);
       +                webkit_settings_set_default_charset(c->settings, a->v);
                        return; /* do not update */
                case DNSPrefetch:
       -                webkit_settings_set_enable_dns_prefetching(s, a->i);
       +                webkit_settings_set_enable_dns_prefetching(c->settings, 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);
       +                webkit_settings_set_allow_file_access_from_file_urls(
       +                    c->settings, a->i);
       +                webkit_settings_set_allow_universal_access_from_file_urls(
       +                    c->settings, a->i);
                        return; /* do not update */
                case FontSize:
       -                webkit_settings_set_default_font_size(s, a->i);
       +                webkit_settings_set_default_font_size(c->settings, a->i);
                        return; /* do not update */
                case FrameFlattening:
       -                webkit_settings_set_enable_frame_flattening(s, a->i);
       +                webkit_settings_set_enable_frame_flattening(c->settings, a->i);
                        break;
                case Geolocation:
                        refresh = 0;
       @@ -808,21 +810,22 @@ setparameter(Client *c, int refresh, ParamName p, const Arg *a)
                                webkit_web_view_set_background_color(c->view, &bgcolor);
                        return; /* do not update */
                case Inspector:
       -                webkit_settings_set_enable_developer_extras(s, a->i);
       +                webkit_settings_set_enable_developer_extras(c->settings, a->i);
                        return; /* do not update */
                case Java:
       -                webkit_settings_set_enable_java(s, a->i);
       +                webkit_settings_set_enable_java(c->settings, a->i);
                        return; /* do not update */
                case JavaScript:
       -                webkit_settings_set_enable_javascript(s, a->i);
       +                webkit_settings_set_enable_javascript(c->settings, a->i);
                        break;
                case KioskMode:
                        return; /* do nothing */
                case LoadImages:
       -                webkit_settings_set_auto_load_images(s, a->i);
       +                webkit_settings_set_auto_load_images(c->settings, a->i);
                        break;
                case MediaManualPlay:
       -                webkit_settings_set_media_playback_requires_user_gesture(s, a->i);
       +                webkit_settings_set_media_playback_requires_user_gesture(
       +                    c->settings, a->i);
                        break;
                case PreferredLanguages:
                        return; /* do nothing */
       @@ -839,20 +842,20 @@ setparameter(Client *c, int refresh, ParamName p, const Arg *a)
                case ShowIndicators:
                        break;
                case SmoothScrolling:
       -                webkit_settings_set_enable_smooth_scrolling(s, a->i);
       +                webkit_settings_set_enable_smooth_scrolling(c->settings, a->i);
                        return; /* do not update */
                case SiteQuirks:
       -                webkit_settings_set_enable_site_specific_quirks(s, a->i);
       +                webkit_settings_set_enable_site_specific_quirks(
       +                    c->settings, a->i);
                        break;
                case SpellChecking:
                        webkit_web_context_set_spell_checking_enabled(
       -                    webkit_web_view_get_context(c->view), a->i);
       +                    c->context, 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->i ?
       +                webkit_web_context_set_tls_errors_policy(c->context, a->i ?
                            WEBKIT_TLS_ERRORS_POLICY_FAIL :
                            WEBKIT_TLS_ERRORS_POLICY_IGNORE);
                        break;
       @@ -864,7 +867,7 @@ setparameter(Client *c, int refresh, ParamName p, const Arg *a)
                        refresh = 0;
                        break;
                case WebGL:
       -                webkit_settings_set_enable_webgl(s, a->i);
       +                webkit_settings_set_enable_webgl(c->settings, a->i);
                        break;
                case ZoomLevel:
                        webkit_web_view_set_zoom_level(c->view, a->f);
       @@ -910,8 +913,8 @@ setcert(Client *c, const char *uri)
                if ((uri = strstr(uri, "https://"))) {
                        uri += sizeof("https://") - 1;
                        host = g_strndup(uri, strchr(uri, '/') - uri);
       -                webkit_web_context_allow_tls_certificate_for_host(
       -                    webkit_web_view_get_context(c->view), cert, host);
       +                webkit_web_context_allow_tls_certificate_for_host(c->context,
       +                    cert, host);
                        g_free(host);
                }
        
       @@ -1110,6 +1113,8 @@ newview(Client *c, WebKitWebView *rv)
                /* Webview */
                if (rv) {
                        v = WEBKIT_WEB_VIEW(webkit_web_view_new_with_related_view(rv));
       +                context = webkit_web_view_get_context(v);
       +                settings = webkit_web_view_get_settings(v);
                } else {
                        settings = webkit_settings_new_with_settings(
                           "allow-file-access-from-file-urls", curconfig[FileURLsCrossAccess].val.i,
       @@ -1223,6 +1228,9 @@ newview(Client *c, WebKitWebView *rv)
                g_signal_connect(G_OBJECT(v), "web-process-terminated",
                                 G_CALLBACK(webprocessterminated), c);
        
       +        c->context = context;
       +        c->settings = settings;
       +
                return v;
        }