diff options
-rw-r--r-- | src/local.mk | 1 | ||||
-rw-r--r-- | src/web-settings.c | 353 | ||||
-rw-r--r-- | src/web-settings.h | 33 |
3 files changed, 0 insertions, 387 deletions
diff --git a/src/local.mk b/src/local.mk index 3b71b14..ee56d0c 100644 --- a/src/local.mk +++ b/src/local.mk @@ -13,7 +13,6 @@ marquee_SOURCES += \ %reldir%/tab-page.c \ %reldir%/tree.c \ %reldir%/view-source.c \ - %reldir%/web-settings.c \ %reldir%/web-view.c \ %reldir%/window.c diff --git a/src/web-settings.c b/src/web-settings.c deleted file mode 100644 index c6b9c44..0000000 --- a/src/web-settings.c +++ /dev/null @@ -1,353 +0,0 @@ -/* - * Mapping from MqConfig to WebKitSettings and WebKitWebContext - * - * Copyright (C) 2017 Patrick McDermott - * - * This file is part of Marquee. - * - * Marquee is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * Marquee is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Marquee. If not, see <http://www.gnu.org/licenses/>. - */ - -#include "web-settings.h" - -#include <webkit2/webkit2.h> - -#include "config.h" - -enum mapping_type { - MAP_BOOL, - MAP_BOOL_N, - MAP_INT, - /* MAP_DBL, */ - MAP_STR, - /* MAP_STRL, */ -}; - -struct mapping { - enum mapping_type type; - const gchar *mq_name; - const gchar *wk_name; -}; - -static struct mapping mappings[] = { - /* General -> Navigation and Accessibility */ - {MAP_BOOL, "navigation.smooth-scrolling", - "enable-smooth-scrolling"}, - {MAP_BOOL, "navigation.tabbing", - "enable-tabs-to-links"}, - {MAP_BOOL, "navigation.caret", - "enable-caret-browsing"}, - {MAP_BOOL, "navigation.spatial", - "enable-spatial-navigation"}, - - /* General -> Miscellaneous */ - {MAP_BOOL, "display.textarea.resize.enable", - "enable-resizable-text-areas"}, - {MAP_BOOL, "devtools.enable", - "enable-developer-extras"}, - - /* General -> Compatibility */ - // compatibility.user-agent - {MAP_BOOL, "compatibility.quirks", - "enable-site-specific-quirks"}, - - /* Display -> Fonts */ - {MAP_STR, "font.family.default", - "default-font-family"}, - {MAP_STR, "font.family.monospace", - "monospace-font-family"}, - {MAP_STR, "font.family.serif", - "serif-font-family"}, - {MAP_STR, "font.family.sans-serif", - "sans-serif-font-family"}, - {MAP_STR, "font.family.cursive", - "cursive-font-family"}, - {MAP_STR, "font.family.fantasy", - "fantasy-font-family"}, - {MAP_STR, "font.family.pictograph", - "pictograph-font-family"}, - {MAP_INT, "font.size.default", - "default-font-size"}, - {MAP_INT, "font.size.monospace-default", - "default-monospace-font-size"}, - {MAP_INT, "font.size.minimum", - "minimum-font-size"}, - - /* Display -> Languages */ - {MAP_STR, "intl.default-charset", - "default-charset"}, - - /* Display -> Zoom */ - {MAP_BOOL, "zoom.text-only", - "zoom-text-only"}, - - /* Permissions -> General */ - {MAP_BOOL, "permissions.images.auto-load", - "auto-load-images"}, - {MAP_BOOL, "permissions.images.favicons.override", - "load-icons-ignoring-image-load-setting"}, - {MAP_BOOL, "permissions.java.enable", - "enable-java"}, - {MAP_BOOL, "permissions.javascript.enable", - "enable-javascript"}, - {MAP_BOOL, "permissions.plugins.enable", - "enable-plugins"}, - - /* Permissions -> JavaScript */ - {MAP_BOOL, "permissions.javascript.open-windows", - "javascript-can-open-windows-automatically"}, - {MAP_BOOL, "permissions.javascript.fullscreen", - "enable-fullscreen"}, - {MAP_BOOL, "permissions.javascript.modal-dialogs", - "allow-modal-dialogs"}, - {MAP_BOOL, "permissions.javascript.clipboard", - "javascript-can-access-clipboard"}, - - /* Permissions -> Data Storage */ - {MAP_BOOL, "permissions.javascript.database", - "enable-html5-database"}, - {MAP_BOOL, "permissions.javascript.storage", - "enable-html5-local-storage"}, - {MAP_BOOL, "permissions.appcache", - "enable-offline-web-application-cache"}, - - /* Permissions -> Graphics and Multimedia */ - {MAP_BOOL, "canvas.acceleration.enable", - "enable-accelerated-2d-canvas"}, - {MAP_BOOL, "permissions.javascript.webgl", - "enable-webgl"}, - {MAP_BOOL, "permissions.javascript.audio", - "enable-webaudio"}, - {MAP_BOOL_N, "media.autoplay", - "media-playback-requires-user-gesture"}, - {MAP_BOOL_N, "media.force-fullscreen", - "media-playback-allows-inline"}, - {MAP_BOOL, "permissions.javascript.mediastream.enable", - "enable-media-stream"}, - {MAP_BOOL, "permissions.javascript.mediasource.enable", - "enable-mediasource"}, - - /* Security and Privacy -> History */ - {MAP_BOOL, "privacy.private-browsing.enabled", - "enable-private-browsing"}, - - /* Security and Privacy -> Security */ - {MAP_BOOL, "security.xss-auditor.enable", - "enable-xss-auditor"}, - - /* Security and Privacy -> Network */ - {MAP_BOOL, "dns.prefetch.enable", - "enable-dns-prefetching"}, -}; - -static GHashTable *mappings_table = NULL; - -static void -wks_bool_cb(MqConfig G_GNUC_UNUSED *config, const gchar *name, - const gboolean value, WebKitSettings *wk_settings) -{ - GValue g_value = G_VALUE_INIT; - - g_value_init(&g_value, G_TYPE_BOOLEAN); - g_value_set_boolean(&g_value, value); - g_object_set_property(G_OBJECT(wk_settings), - g_hash_table_lookup(mappings_table, name), &g_value); -} - -static void -wks_bool_n_cb(MqConfig G_GNUC_UNUSED *config, const gchar *name, - const gboolean value, WebKitSettings *wk_settings) -{ - GValue g_value = G_VALUE_INIT; - - g_value_init(&g_value, G_TYPE_BOOLEAN); - g_value_set_boolean(&g_value, value); - g_object_set_property(G_OBJECT(wk_settings), - g_hash_table_lookup(mappings_table, name), &g_value); -} - -static void -wks_int_cb(MqConfig G_GNUC_UNUSED *config, const gchar *name, - const gint value, WebKitSettings *wk_settings) -{ - GValue g_value = G_VALUE_INIT; - - g_value_init(&g_value, G_TYPE_INT); - g_value_set_int(&g_value, value); - g_object_set_property(G_OBJECT(wk_settings), - g_hash_table_lookup(mappings_table, name), &g_value); -} - -static void -wks_str_cb(MqConfig G_GNUC_UNUSED *config, const gchar *name, - const gchar *value, WebKitSettings *wk_settings) -{ - GValue g_value = G_VALUE_INIT; - - g_value_init(&g_value, G_TYPE_STRING); - g_value_set_static_string(&g_value, value); - g_object_set_property(G_OBJECT(wk_settings), - g_hash_table_lookup(mappings_table, name), &g_value); -} - -static void -wkwc_spell_checking_enabled_cb(MqConfig G_GNUC_UNUSED *config, - const gchar G_GNUC_UNUSED *name, const gboolean value, - WebKitWebContext *wk_web_context) -{ - webkit_web_context_set_spell_checking_enabled(wk_web_context, value); -} - -static void -wkwc_spell_checking_languages_cb(MqConfig *config, const gchar *name, - const gchar G_GNUC_UNUSED *value, WebKitWebContext *wk_web_context) -{ - webkit_web_context_set_spell_checking_languages(wk_web_context, - (const gchar * const *) mq_config_get_string_list(config, - name)); -} - -static void -wkwc_preferred_languages_cb(MqConfig *config, const gchar *name, - const gchar G_GNUC_UNUSED *value, WebKitWebContext *wk_web_context) -{ - webkit_web_context_set_preferred_languages(wk_web_context, - (const gchar * const *) mq_config_get_string_list(config, - name)); -} - -static void -wkcm_accept_policy_cb(MqConfig G_GNUC_UNUSED *config, - const gchar G_GNUC_UNUSED *name, const gchar *value, - WebKitCookieManager *wk_cookie_manager) -{ - if (g_strcmp0(value, "always") == 0) { - webkit_cookie_manager_set_accept_policy(wk_cookie_manager, - WEBKIT_COOKIE_POLICY_ACCEPT_ALWAYS); - } else if (g_strcmp0(value, "never") == 0) { - webkit_cookie_manager_set_accept_policy(wk_cookie_manager, - WEBKIT_COOKIE_POLICY_ACCEPT_NEVER); - } else if (g_strcmp0(value, "never") == 0) { - webkit_cookie_manager_set_accept_policy(wk_cookie_manager, - WEBKIT_COOKIE_POLICY_ACCEPT_NEVER); - } else if (g_strcmp0(value, "no-third-party") == 0) { - webkit_cookie_manager_set_accept_policy(wk_cookie_manager, - WEBKIT_COOKIE_POLICY_ACCEPT_NO_THIRD_PARTY); - } else { - g_assert_not_reached(); - } -} - -static void -init_mappings_table(void) -{ - gsize i; - - if (mappings_table) { - return; - } - - mappings_table = g_hash_table_new(g_str_hash, g_str_equal); - - for (i = 0; i < sizeof(mappings) / sizeof(mappings[0]); ++i) { - g_hash_table_insert(mappings_table, - g_strdup(mappings[i].mq_name), - g_strdup(mappings[i].wk_name)); - } -} - -void -mq_web_settings_connect(MqConfig *config, WebKitSettings *wk_settings, - WebKitWebContext *wk_web_context) -{ - gsize i; - WebKitCookieManager *wk_cookie_manager; - - wk_cookie_manager = webkit_web_context_get_cookie_manager( - wk_web_context); - - init_mappings_table(); - - for (i = 0; i < sizeof(mappings) / sizeof(mappings[0]); ++i) { - switch (mappings[i].type) { - case MAP_BOOL: - mq_config_notify_boolean(config, - mappings[i].mq_name, - (MqConfigBooleanCallback) wks_bool_cb, - wk_settings); - wks_bool_cb(config, mappings[i].mq_name, - mq_config_get_boolean(config, - mappings[i].mq_name), - wk_settings); - break; - case MAP_BOOL_N: - mq_config_notify_boolean(config, - mappings[i].mq_name, - (MqConfigBooleanCallback) wks_bool_n_cb, - wk_settings); - wks_bool_n_cb(config, mappings[i].mq_name, - mq_config_get_boolean(config, - mappings[i].mq_name), - wk_settings); - break; - case MAP_INT: - mq_config_notify_integer(config, - mappings[i].mq_name, - (MqConfigIntegerCallback) wks_int_cb, - wk_settings); - wks_int_cb(config, mappings[i].mq_name, - mq_config_get_integer(config, - mappings[i].mq_name), - wk_settings); - break; - case MAP_STR: - mq_config_notify_string(config, - mappings[i].mq_name, - (MqConfigStringCallback) wks_str_cb, - wk_settings); - wks_str_cb(config, mappings[i].mq_name, - mq_config_get_string(config, - mappings[i].mq_name), - wk_settings); - break; - } - } - - /* General -> Spell Checking */ - mq_config_notify_boolean(config, "spell.enable", - (MqConfigBooleanCallback) wkwc_spell_checking_enabled_cb, - wk_web_context); - wkwc_spell_checking_enabled_cb(config, "spell.enable", - mq_config_get_boolean(config, "spell.enable"), wk_web_context); - mq_config_notify_string(config, "spell.langs", - (MqConfigStringCallback) wkwc_spell_checking_languages_cb, - wk_web_context); - wkwc_spell_checking_languages_cb(config, "spell.langs", NULL, - wk_web_context); - - /* Display -> Languages */ - mq_config_notify_string(config, "intl.accept-languages", - (MqConfigStringCallback) wkwc_preferred_languages_cb, - wk_web_context); - wkwc_preferred_languages_cb(config, "intl.accept-languages", NULL, - wk_web_context); - - /* Security and Privacy -> Cookies */ - mq_config_notify_string(config, "cookies.accept", - (MqConfigStringCallback) wkcm_accept_policy_cb, - wk_cookie_manager); - wkcm_accept_policy_cb(config, "cookies.accept", - mq_config_get_string(config, "cookies.accept"), - wk_cookie_manager); -} diff --git a/src/web-settings.h b/src/web-settings.h deleted file mode 100644 index f669956..0000000 --- a/src/web-settings.h +++ /dev/null @@ -1,33 +0,0 @@ -/* - * Mapping from MqConfig to WebKitSettings and WebKitWebContext - * - * Copyright (C) 2017 Patrick McDermott - * - * This file is part of Marquee. - * - * Marquee is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * Marquee is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Marquee. If not, see <http://www.gnu.org/licenses/>. - */ - -#ifndef MQ_WEB_SETTINGS_H -#define MQ_WEB_SETTINGS_H - -#include <webkit2/webkit2.h> - -#include "config.h" - -void -mq_web_settings_connect(MqConfig *config, WebKitSettings *wk_settings, - WebKitWebContext *wk_web_context); - -#endif |