packages feed

hbro-1.2.0.0: library/Hbro/Webkit/WebSettings.hs

-- | Designed to be imported as @qualified@.
module Hbro.Webkit.WebSettings where

-- {{{ Imports
import qualified Hbro.Gui as Gui (get)
import Hbro.Gui hiding(get)
import Hbro.Logger
import Hbro.Prelude

import Control.Monad.Reader

import Graphics.UI.Gtk.WebKit.WebSettings
import Graphics.UI.Gtk.WebKit.WebView

import System.Glib.Attributes (Attr, AttrOp(..))
import qualified System.Glib.Attributes as G
-- }}}


set :: (BaseIO m, MonadReader t m, HasGUI t, Show a) => Attr WebSettings a -> a -> m ()
set element newValue = modify_ element $ const newValue

modify :: (BaseIO m, MonadReader t m, HasGUI t, Show a) => Attr WebSettings a -> (a -> a) -> m a
modify element modifier = do
    webView  <- Gui.get webViewL
    settings <- gSync $ webViewGetWebSettings webView
    oldValue <- gSync $ G.get settings element

    gAsync $ G.set settings [element := modifier oldValue]
    gAsync $ webViewSetWebSettings webView settings
    infoM "hbro.settings" $ "Set " ++ tshow element ++ " = " ++ tshow (modifier oldValue)
    return oldValue

-- | Same as 'modify', but discards the result
modify_ :: (BaseIO m, MonadReader t m, HasGUI t, Show a) => Attr WebSettings a -> (a -> a) -> m ()
modify_ e m = void $ modify e m

toggle :: (BaseIO m, MonadReader t m, HasGUI t) => Attr WebSettings Bool -> m Bool
toggle = (`modify` not)

-- | Same as 'toggle', but discards the result
toggle_ :: (BaseIO m, MonadReader t m, HasGUI t) => Attr WebSettings Bool -> m ()
toggle_ = (`modify_` not)

-- | Reset default settings
resetAll :: (BaseIO m, MonadReader t m, HasGUI t) => m ()
resetAll = do
    set webSettingsAutoLoadImages                    True
    set webSettingsAutoShrinkImages                  True
    set webSettingsEnableDefaultContextMenu          True
    set webSettingsDefaultEncoding                   (asText "utf8")
    set webSettingsEnableDeveloperExtras             False
    set webSettingsEnableDomPaste                    False
    set webSettingsEnableHtml5Database               False
    set webSettingsEnableHtml5LocalStorage           False
    set webSettingsEnableOfflineWebApplicationCache  False
    set webSettingsEnablePageCache                   True
    set webSettingsEnablePlugins                     False
    set webSettingsEnablePrivateBrowsing             False
    set webSettingsEnableScripts                     False
    set webSettingsEnableSpellChecking               False
    set webSettingsEnableSpatialNavigation           False
    set webSettingsEnableUniversalAccessFromFileUris True
    set webSettingsEnableSiteSpecificQuirks          False
    set webSettingsEnableXssAuditor                  False
    set webSettingsJSCanOpenWindowAuto               False
    set webSettingsMonospaceFontFamily               (asText "inconsolata")
    set webSettingsPrintBackgrounds                  True
    set webSettingsResizableTextAreas                True
    set webSettingsSpellCheckingLang                 (Nothing :: Maybe Text)
    set webSettingsTabKeyCyclesThroughElements       True
    set webSettingsUserStylesheetUri                 (Nothing :: Maybe Text)
    set webSettingsZoomStep                          0.1