diff options
| author | Andrea Rossato <andrea.rossato@ing.unitn.it> | 2010-02-10 13:29:27 +0100 | 
|---|---|---|
| committer | Andrea Rossato <andrea.rossato@ing.unitn.it> | 2010-02-10 13:29:27 +0100 | 
| commit | 5d8f8d2014fd164ca73ec2c43daa9276352dc63b (patch) | |
| tree | 38d117f9b6388da68ad040b9322f55080de9baba | |
| parent | c9ca8953c6f4099e5c0504ce0e31b016d878989c (diff) | |
| download | xmobar-5d8f8d2014fd164ca73ec2c43daa9276352dc63b.tar.gz xmobar-5d8f8d2014fd164ca73ec2c43daa9276352dc63b.tar.bz2  | |
fix ghc-6.12.1 warnings andd fix issue 17
Ignore-this: 868a877e7a107ddc8bc4085f3eb7fc8ae64597ee
ghc-6.12.1 has native support for locales (very cool indeed!!), which
simplify the code - unless for the compatibility layer with past ghc
versions. xmobar has now support for every locale supported by ghc.
The rest of the patch are just redundant import warnings and some
xmobar.cabal updates.
darcs-hash:20100210122927-d6583-e131c86cf89ce26adea9aa2ae06467bfdc40e14b.gz
| -rw-r--r-- | Main.hs | 1 | ||||
| -rw-r--r-- | Runnable.hs | 1 | ||||
| -rw-r--r-- | XUtil.hsc | 74 | ||||
| -rw-r--r-- | Xmobar.hs | 1 | ||||
| -rw-r--r-- | xmobar.cabal | 17 | 
5 files changed, 47 insertions, 47 deletions
@@ -64,7 +64,6 @@ main = do    vars  <- mapM startCommand cl    (r,w) <- createWin d fs conf    eventLoop (XConf d r w fs conf) vars -  releaseFont d fs  -- | Reads the configuration files or quits with an error  readConfig :: FilePath -> IO (Config,[String]) diff --git a/Runnable.hs b/Runnable.hs index fe39c80..4cd33dd 100644 --- a/Runnable.hs +++ b/Runnable.hs @@ -23,7 +23,6 @@ module Runnable where  import Control.Monad  import Text.Read -import Text.ParserCombinators.ReadPrec  import Config (runnableTypes)  import Commands @@ -16,7 +16,6 @@ module XUtil      , initFont      , initCoreFont      , initUtf8Font -    , releaseFont      , textExtents      , textWidth      , printString @@ -32,19 +31,18 @@ module XUtil      ) where  import Control.Concurrent -import Control.Monad  import Control.Monad.Trans  import Data.IORef  import Foreign  import Graphics.X11.Xlib hiding (textExtents, textWidth)  import qualified Graphics.X11.Xlib as Xlib (textExtents, textWidth)  import Graphics.X11.Xlib.Extras +import System.Mem.Weak ( addFinalizer )  import System.Posix.Types (Fd(..))  import System.IO -import System.IO.Unsafe (unsafePerformIO)  #if defined XFT || defined UTF8 -import Foreign.C  # if __GLASGOW_HASKELL__ < 612 +import Foreign.C  import qualified System.IO.UTF8 as UTF8 (readFile,hGetLine)  # else  import qualified System.IO as UTF8 (readFile,hGetLine) @@ -82,49 +80,46 @@ data XFont =Core FontStruct  initFont :: Display ->String -> IO XFont  initFont d s =  #ifdef XFT -  if xftPrefix `isPrefixOf` s then -     do setupLocale -        xftdraw <- xftFontOpen d (defaultScreenOfDisplay d) (drop (length xftPrefix) s) -        return (Xft xftdraw) -  else +       let xftPrefix = "xft:" in +       if  xftPrefix `isPrefixOf` s then +           fmap Xft $ initXftFont d s +       else  #endif -#ifdef UTF8 -      (setupLocale >> initUtf8Font d s >>= return . Utf8) +#if defined UTF8 ||  __GLASGOW_HASKELL__ >= 612 +           fmap Utf8 $ initUtf8Font d s  #else -      (initCoreFont d s >>= return . Core) -#endif -#ifdef XFT -  where xftPrefix = "xft:" -#endif - -releaseFont :: Display -> XFont -> IO () -#ifdef XFT -releaseFont d (Xft xftfont) = xftFontClose    d xftfont +           fmap Core $ initCoreFont d s  #endif -releaseFont d (Utf8     fs) = releaseUtf8Font d fs -releaseFont d (Core     fs) = releaseCoreFont d fs  -- | Given a fontname returns the font structure. If the font name is  --  not valid the default font will be loaded and returned.  initCoreFont :: Display -> String -> IO FontStruct -initCoreFont dpy s = catch (getIt dpy) (fallBack dpy) -      where getIt    d = loadQueryFont d s -            fallBack d = const $ loadQueryFont d "-misc-fixed-*-*-*-*-10-*-*-*-*-*-*-*" - -releaseCoreFont :: Display -> FontStruct -> IO () -releaseCoreFont d = freeFont d +initCoreFont d s = do +  f <- catch getIt fallBack +  addFinalizer f (freeFont d f) +  return f +      where getIt    = loadQueryFont d s +            fallBack = const $ loadQueryFont d "-misc-fixed-*-*-*-*-10-*-*-*-*-*-*-*"  -- | Given a fontname returns the font structure. If the font name is  --  not valid the default font will be loaded and returned.  initUtf8Font :: Display -> String -> IO FontSet -initUtf8Font dpy s = do -  (_,_,fs) <- catch (getIt dpy) (fallBack dpy) -  return fs -      where getIt    d = createFontSet d s -            fallBack d = const $ createFontSet d "-misc-fixed-*-*-*-*-10-*-*-*-*-*-*-*" +initUtf8Font d s = do +  setupLocale +  (_,_,f) <- catch getIt fallBack +  addFinalizer f (freeFontSet d f) +  return f +      where getIt    = createFontSet d s +            fallBack = const $ createFontSet d "-misc-fixed-*-*-*-*-10-*-*-*-*-*-*-*" -releaseUtf8Font :: Display -> FontSet -> IO () -releaseUtf8Font d = freeFontSet d +#ifdef XFT +initXftFont :: Display -> String -> IO XftFont +initXftFont d s = do +  setupLocale +  f <- xftFontOpen d (defaultScreenOfDisplay d) (drop 4 s) +  addFinalizer f (xftFontClose d f) +  return f +#endif  textWidth :: Display -> XFont -> String -> IO Int  textWidth _   (Utf8 fs) s = return $ fi $ wcTextEscapement fs s @@ -251,11 +246,14 @@ io = liftIO  fi :: (Integral a, Num b) => a -> b  fi = fromIntegral -#if defined XFT || defined UTF8 +#if __GLASGOW_HASKELL__ < 612 && (defined XFT || defined UTF8)  #include <locale.h>  foreign import ccall unsafe "locale.h setlocale"      setlocale :: CInt -> CString -> IO CString -setupLocale :: IO CString -setupLocale = withCString "" $ setlocale (#const LC_ALL) +setupLocale :: IO () +setupLocale = withCString "" (setlocale $ #const LC_ALL) >> return () +# else +setupLocale :: IO () +setupLocale = return ()  #endif @@ -40,7 +40,6 @@ import Control.Concurrent  import Control.Concurrent.STM  import Control.Exception hiding (handle)  import Data.Bits -import Data.Char  import Data.Maybe(fromMaybe)  import Data.Typeable (Typeable) diff --git a/xmobar.cabal b/xmobar.cabal index 7bddedd..6fb7ffe 100644 --- a/xmobar.cabal +++ b/xmobar.cabal @@ -34,23 +34,28 @@ flag with_inotify  executable xmobar      main-is:            Main.hs      other-Modules:      Xmobar, Config, Parsers, Commands, XUtil, Runnable, Plugins -    ghc-options:        -funbox-strict-fields -Wall      ghc-prof-options:   -prof -auto-all +    if true +        ghc-options: -funbox-strict-fields -Wall +      if impl (ghc == 6.10.1) && arch (x86_64) -            ghc-options:    -O0 +            ghc-options: -O0 + +    if impl (ghc >= 6.12.1) +            ghc-options: -fno-warn-unused-do-bind      if flag(small_base) -       build-depends:   base == 4.*, containers, process, old-time, old-locale, bytestring, directory +       build-depends: base == 4.*, containers, process, old-time, old-locale, bytestring, directory      else -       build-depends:   base < 3 +       build-depends: base < 3      if flag(with_xft)          build-depends: utf8-string, X11-xft >= 0.2          cpp-options: -DXFT -    if flag(with_utf8) +    if flag(with_utf8) && impl (ghc < 6.12.1)          build-depends: utf8-string          cpp-options: -DUTF8 @@ -58,4 +63,4 @@ executable xmobar          build-depends: hinotify          cpp-options: -DINOTIFY -    build-depends:      X11>=1.3.0, mtl, unix, parsec, filepath, stm +    build-depends: X11>=1.3.0, mtl, unix, parsec, filepath, stm  | 
