hbro 0.7.1.0 → 0.7.1.1
raw patch · 7 files changed
+52/−33 lines, 7 files
Files
- Hbro/Core.hs +8/−6
- Hbro/Extra/StatusBar.hs +3/−3
- Hbro/Keys.hs +11/−1
- Hbro/Types.hs +3/−3
- Hbro/Util.hs +7/−6
- examples/hbro.hs +17/−9
- hbro.cabal +3/−5
Hbro/Core.hs view
@@ -19,7 +19,7 @@ -- {{{ Imports import Hbro.Gui---import Hbro.Keys+import Hbro.Keys import Hbro.Socket import Hbro.Types --import Hbro.Util@@ -32,7 +32,7 @@ import qualified Data.Map as M ---import Graphics.UI.Gtk.Abstract.Widget+import Graphics.UI.Gtk.Abstract.Widget import Graphics.UI.Gtk.General.General hiding(initGUI) import Graphics.UI.Gtk.Misc.Adjustment import Graphics.UI.Gtk.Scrolling.ScrolledWindow@@ -45,7 +45,7 @@ import System.Console.CmdArgs import System.Directory import System.Environment.XDG.BaseDir---import System.Glib.Signals+import System.Glib.Signals import System.IO import System.Posix.Process import System.Posix.Signals@@ -94,6 +94,8 @@ mHomePage = "https://encrypted.google.com/", mSocketDir = mTemporary directories, mUIFile = (mConfiguration directories) ++ "/ui.xml",+ mKeyEventHandler = simpleKeyEventHandler,+ mKeyEventCallback = \_ -> simpleKeyEventCallback (keysListToMap []), mWebSettings = [], mSetup = const (return () :: IO ()), mCommands = [],@@ -145,14 +147,14 @@ setup = mSetup config socketDir = mSocketDir config commands = mCommands config- --keyEventHandler = mKeyEventHandler config- --keyEventCallback = (mKeyEventCallback config) environment+ keyEventHandler = mKeyEventHandler config+ keyEventCallback = (mKeyEventCallback config) environment in do -- Apply custom setup setup environment -- Setup key handler- --rec i <- after webView keyPressEvent $ keyEventHandler keyEventCallback i webView+ rec i <- after webView keyPressEvent $ keyEventHandler keyEventCallback i webView -- Load homepage case (mURI options) of
Hbro/Extra/StatusBar.hs view
@@ -13,7 +13,7 @@ import Graphics.Rendering.Pango.Layout import Graphics.UI.Gtk.Display.Label---import Graphics.UI.Gtk.Gdk.EventM+import Graphics.UI.Gtk.Gdk.EventM import Graphics.UI.Gtk.Misc.Adjustment import Graphics.UI.Gtk.Scrolling.ScrolledWindow import Graphics.UI.Gtk.WebKit.WebView@@ -56,8 +56,8 @@ -- | -withFeedback :: Label -> WebView -> KeyEventCallback -> KeyEventCallback-withFeedback widget webView callback modifiers keys = do +withFeedback :: Label -> KeyEventCallback -> [Modifier] -> String -> IO Bool+withFeedback widget callback modifiers keys = do -- Trigger callback result <- callback modifiers keys
Hbro/Keys.hs view
@@ -1,5 +1,15 @@ {-# LANGUAGE DoRec #-}-module Hbro.Keys where+module Hbro.Keys (+-- * Key event callbacks + withKeys,+ simpleKeyEventCallback,+-- * Key event handlers + simpleKeyEventHandler,+ advancedKeyEventHandler,+-- * Util+ keyToString,+ keysListToMap +) where -- {{{ Imports import Hbro.Types
Hbro/Types.hs view
@@ -18,7 +18,7 @@ import System.Console.CmdArgs import System.Glib.Attributes---import System.Glib.Signals+import System.Glib.Signals import System.ZMQ -- }}} @@ -55,8 +55,8 @@ mHomePage :: String, -- ^ Startup page mSocketDir :: FilePath, -- ^ Directory where 0MQ will be created ("/tmp" for example) mUIFile :: FilePath, -- ^ Path to XML file describing UI (used by GtkBuilder)--- mKeyEventHandler :: KeyEventCallback -> ConnectId WebView -> WebView -> EventM EKey Bool, -- ^ Key event handler, which forwards keystrokes to mKeyEventCallback--- mKeyEventCallback :: Environment -> KeyEventCallback, -- ^ Main key event callback, assumed to deal with each keystroke separately+ mKeyEventHandler :: KeyEventCallback -> ConnectId WebView -> WebView -> EventM EKey Bool, -- ^ Key event handler, which forwards keystrokes to mKeyEventCallback+ mKeyEventCallback :: Environment -> KeyEventCallback, -- ^ Main key event callback, assumed to deal with each keystroke separately mWebSettings :: [AttrOp WebSettings], -- ^ WebSettings' attributes to use with webkit (see Webkit.WebSettings documentation) mSetup :: Environment -> IO (), -- ^ Custom startup instructions mCommands :: CommandsList, -- ^ Custom commands to use with IPC sockets
Hbro/Util.hs view
@@ -60,13 +60,14 @@ where clear = labelSetMarkup label "" >> return False --(>>?) :: (a -> IO ()) -> Maybe a -> IO ()-(>>?) = maybe (return ())+-- | Similar to forM_ (from Control.Monad) but for Maybe instead of List.+forMaybeM_ :: Maybe a -> (a -> IO ()) -> IO ()+forMaybeM_ = flip $ maybe (return ()) - - -dmenu :: [String] -> T.Text -> IO String+-- | Open dmenu with given input and return selected entry.+dmenu :: [String] -- ^ dmenu's commandline options+ -> T.Text -- ^ dmenu's input+ -> IO String -- ^ Selected entry dmenu options input = do (in_, out, err, pid) <- runInteractiveProcess "dmenu" options Nothing Nothing T.hPutStr in_ input
examples/hbro.hs view
@@ -50,11 +50,13 @@ -- use the defaults defined in Hbro.Types.Parameters. myConfig :: CommonDirectories -> Config myConfig directories = (defaultConfig directories) {- mSocketDir = mySocketDirectory,- mUIFile = myUIFile directories,- mHomePage = myHomePage,- mWebSettings = myWebSettings,- mSetup = mySetup+ mSocketDir = mySocketDirectory directories,+ mUIFile = myUIFile directories,+ mKeyEventHandler = myKeyEventHandler,+ mKeyEventCallback = myKeyEventCallback,+ mHomePage = myHomePage,+ mWebSettings = myWebSettings,+ mSetup = mySetup } -- Various constant parameters@@ -78,7 +80,17 @@ --myDownload directories uri name = spawn "wget" [uri, "-O", (mHome directories) ++ "/" ++ name] --myDownload directories uri name = spawn "axel" [uri, "-o", (mHome directories) ++ "/" ++ name] +myKeyEventHandler :: KeyEventCallback -> ConnectId WebView -> WebView -> EventM EKey Bool+myKeyEventHandler = advancedKeyEventHandler +myKeyEventCallback :: Environment -> KeyEventCallback+myKeyEventCallback environment@Environment{ mGUI = gui } modifiers keys = do+ keysLabel <- builderGetObject builder castToLabel "keys"+ withFeedback keysLabel (simpleKeyEventCallback $ keysListToMap (myKeys environment)) modifiers keys+ where+ builder = mBuilder gui++ -- {{{ Keys -- Note that this example is suited for an azerty keyboard. myKeys :: Environment -> KeysList@@ -236,10 +248,6 @@ uriLabel <- getLabel "uri" statusBarURI uriLabel webView - -- Manage keystrokes- keysLabel <- getLabel "keys"- rec i <- after webView keyPressEvent $ advancedKeyEventHandler (withFeedback keysLabel webView (simpleKeyEventCallback $ keysListToMap (myKeys environment))) i webView- -- Session manager --setupSession browser
hbro.cabal view
@@ -1,10 +1,9 @@ Name: hbro-Version: 0.7.1.0+Version: 0.7.1.1 Synopsis: A minimal KISS compliant browser -- Description: Homepage: http://projects.haskell.org/hbro/ Category: Browser,Web-Stability: alpha License: OtherLicense License-file: LICENSE@@ -19,11 +18,10 @@ Source-repository head Type: git- Location: git@twyk.org/haskell-browser.git-+ Location: git@github.com:k0ral/hbro.git Source-repository head Type: git- Location: git@github.com:k0ral/hbro.git+ Location: git@twyk.org/haskell-browser.git Library Build-depends: