/* * about:preferences * * 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 . */ #include "paths.h" #include #include #include "../../application.h" #include "../../config/config.h" #include "../../i18n.h" #include "../../utils/html.h" #include "../about.h" static void save_pref(gchar *key, gchar *value, MqConfig *config) { if (key[0] != '_') { mq_config_set(config, key, value); } } #define GEN_BOOL(NAME, LABEL) mq_html_input_checkbox(NAME, LABEL, \ mq_config_get_boolean(config, NAME)) #define GEN_INT( NAME, LABEL, MIN, STEP, MAX) mq_html_input_number_i( \ NAME, LABEL, MIN, STEP, MAX, mq_config_get_integer(config, NAME)) #define GEN_DBL( NAME, LABEL, MIN, STEP, MAX) mq_html_input_number_d( \ NAME, LABEL, MIN, STEP, MAX, mq_config_get_double(config, NAME)) #define GEN_STR( NAME, LABEL) mq_html_input_text(NAME, LABEL, \ mq_config_get_string(config, NAME), FALSE) #define GEN_STRL(NAME, LABEL) mq_html_input_text(NAME, LABEL, \ mq_config_get_string(config, NAME), FALSE) #define GEN_SLCT(NAME, LABEL, ...) mq_html_input_select(NAME, LABEL, \ mq_config_get_string(config, NAME), NULL, NULL, __VA_ARGS__, NULL) static gchar * gen_page_general(MqConfig *config) { return mq_html_container("div", NULL, mq_html_h3(_("Web Browsing")), GEN_SLCT("tabs.new", _("New tab page"), "home", _("Home page"), "blank", _("Blank page")), GEN_STR ("tabs.home", _("Home page")), GEN_BOOL("tabs.background", _("Open new tabs in the background")), GEN_BOOL("tabs.warn-on-close", _("Warn when closing multiple tabs or windows")), mq_html_h3(_("Navigation and Accessibility")), GEN_BOOL("navigation.smooth-scrolling", _("Enable smooth scrolling")), GEN_BOOL("navigation.tabbing", _("Enable tabbing navigation (cycling focus by tab " "key)")), GEN_BOOL("navigation.caret", _("Enable caret (text cursor) navigation")), GEN_BOOL("navigation.spatial", _("Enable spatial navigation between elements by arrow " "keys")), mq_html_h3(_("Spell Checking")), GEN_BOOL("spell.enable", _("Enable spell checking")), GEN_STRL("spell.langs", _("Spell checking languages")), mq_html_h3(_("Miscellaneous")), GEN_BOOL("display.textarea.resize.enable", _("Enable resizable text areas")), GEN_BOOL("devtools.enable", _("Enable developer tools")), mq_html_h3(_("Compatibility")), GEN_STR ("compatibility.user-agent", _("User agent identity")), GEN_BOOL("compatibility.quirks", _("Enable site-specific quirks")), NULL); } static gchar * gen_page_display(MqConfig *config) { return mq_html_container("div", NULL, mq_html_h3(_("Fonts")), GEN_STR ("font.family.default", _("Default font family")), GEN_STR ("font.family.monospace", _("Default monospace font family")), GEN_STR ("font.family.serif", _("Default serif font family")), GEN_STR ("font.family.sans-serif", _("Default sans-serif font family")), GEN_STR ("font.family.cursive", _("Cursive font family")), GEN_STR ("font.family.fantasy", _("Fantasy font family")), GEN_STR ("font.family.pictograph", _("Pictograph font family")), GEN_INT ("font.size.default", _("Default font size"), 5, 1, 72), GEN_INT ("font.size.monospace-default", _("Default monospace font size"), 5, 1, 72), GEN_INT ("font.size.minimum", _("Minimum font size"), 0, 1, 72), mq_html_h3(_("Languages")), GEN_STRL("intl.accept-languages", _("Preferred Web site languages")), GEN_STR ("intl.default-charset", _("Default character set")), mq_html_h3(_("Zoom")), GEN_DBL ("zoom.default", _("Default zoom level"), 0.00, 0.10, 10.00), GEN_BOOL("zoom.text-only", _("Zoom text only")), NULL); } static gchar * gen_page_permissions(MqConfig *config) { return mq_html_container("div", NULL, mq_html_h3(_("General")), GEN_BOOL("permissions.images.auto-load", _("Automatically load images")), GEN_BOOL("permissions.images.favicons.override", _("Always load icons irrespective of automatic image " "loading")), GEN_BOOL("permissions.java.enable", _("Enable Java")), GEN_BOOL("permissions.javascript.enable", _("Enable JavaScript")), GEN_BOOL("permissions.plugins.enable", _("Enable plugins")), mq_html_h3(_("JavaScript")), GEN_BOOL("permissions.javascript.open-windows", _("Allow JavaScript to open windows")), GEN_BOOL("permissions.javascript.fullscreen", _("Allow JavaScript to display elements fullscreen")), GEN_BOOL("permissions.javascript.modal-dialogs", _("Allow JavaScript to show modal dialogs")), GEN_BOOL("permissions.javascript.clipboard", _("Allow JavaScript to access the clipboard")), mq_html_h3(_("Data Storage")), GEN_BOOL("permissions.javascript.database", _("Enable Web database")), GEN_BOOL("permissions.javascript.storage", _("Enable Web storage")), GEN_BOOL("permissions.appcache", _("Enable application cache")), mq_html_h3(_("Graphics and Multimedia")), GEN_BOOL("canvas.acceleration.enable", _("Enable hardware-accelerated 2-D canvas drawing")), GEN_BOOL("permissions.javascript.webgl", _("Enable JavaScript WebGL 3-D graphics rendering")), GEN_BOOL("permissions.javascript.audio", _("Allow JavaScript to process and synthesize audio")), GEN_BOOL("media.autoplay", _("Enable automatic media playback and loading")), GEN_BOOL("media.force-fullscreen", _("Force media to play fullscreen")), GEN_BOOL("permissions.javascript.mediastream.enable", _("Allow JavaScript to access audio and video devices") ), GEN_BOOL("permissions.javascript.mediasource.enable", _("Allow JavaScript to generate media streams")), NULL); } static gchar * gen_page_sec_and_priv(MqConfig *config) { return mq_html_container("div", NULL, mq_html_h3(_("History")), GEN_BOOL("privacy.private-browsing.enabled", _("Enable private prowsing (disables history, cache, " "and form auto-filling)")), GEN_BOOL("privacy.remember.history", _("Remember browsing history")), GEN_BOOL("privacy.remember.downloads", _("Remember download history")), mq_html_h3(_("Cookies")), GEN_SLCT("cookies.accept", _("Accept cookies"), "always", _("Always"), "never", _("Never"), "no-third-party", _("No third-party")), mq_html_h3(_("Security")), GEN_BOOL("security.xss-auditor.enable", _("Attempt to detect and block cross-site scripting " "attacks")), mq_html_h3(_("Network")), GEN_BOOL("dns.prefetch.enable", _("Prefetch domain name resolutions for better " "performance")), NULL); } #undef GEN_BOOL #undef GEN_INT #undef GEN_DBL #undef GEN_STR #undef GEN_STRL void mq_about_preferences_response(MqApplication *application, GHashTable *query, WebKitURISchemeRequest *request) { MqConfig *config; gchar *document; config = mq_application_get_config(application); if (query) { g_hash_table_foreach(query, (GHFunc) save_pref, config); mq_config_save(config); mq_about_redirect(request, "mq-about:preferences"); } else { document = mq_html_document(_("Preferences"), NULL, NULL, mq_html_form(NULL, _("Save"), NULL, _("Cancel"), mq_html_notebook(FALSE, "notebook1", 0, gen_page_general(config), _("General"), gen_page_display(config), _("Display"), gen_page_permissions(config), _("Permissions"), gen_page_sec_and_priv(config), _("Security and Privacy"), NULL), NULL), NULL); mq_about_response(request, document); } }