Skip to content

Commit c6d107b

Browse files
authored
Merge pull request #96 from maoe/optional-logo
Make the app work even if it fails to load the logo (fixes #95)
2 parents 5625cc5 + 65e13f1 commit c6d107b

File tree

4 files changed

+13
-5
lines changed

4 files changed

+13
-5
lines changed

GUI/App.hs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ initApp = do
2828
menuBar <- Gtk.menuBarNew
2929
OSX.applicationSetMenuBar app menuBar
3030
logo <- $loadLogo
31-
OSX.applicationSetDockIconPixbuf app (Just logo)
31+
OSX.applicationSetDockIconPixbuf app logo
3232
OSX.applicationReady app
3333

3434
#else

GUI/DataFiles.hs

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,16 @@
1+
{-# LANGUAGE ScopedTypeVariables #-}
12
{-# LANGUAGE TemplateHaskell #-}
23
module GUI.DataFiles
34
( ui
45
, loadLogo
56
) where
7+
import Control.Exception (IOException, Handler(..), catches)
68
import System.IO
79

810
import Data.FileEmbed
911
import Graphics.UI.Gtk (Pixbuf, pixbufNewFromFile)
1012
import Language.Haskell.TH
13+
import System.Glib (GError)
1114
import System.IO.Temp
1215
import qualified Data.ByteString as B
1316
import qualified Data.Text.Encoding as TE
@@ -22,12 +25,17 @@ logoFile = "threadscope.png"
2225
ui :: Q Exp
2326
ui = [| TE.decodeUtf8 $(makeRelativeToProject uiFile >>= embedFile) |]
2427

25-
renderLogo :: B.ByteString -> IO Pixbuf
28+
renderLogo :: B.ByteString -> IO (Maybe Pixbuf)
2629
renderLogo bytes =
2730
withSystemTempFile logoFile $ \path h -> do
2831
B.hPut h bytes
2932
hClose h
30-
pixbufNewFromFile path
33+
Just <$> pixbufNewFromFile path
34+
`catches`
35+
-- in case of a failure in the file IO or pixbufNewFromFile, return Nothing
36+
[ Handler $ \(_ :: IOException) -> return Nothing
37+
, Handler $ \(_ :: GError) -> return Nothing
38+
]
3139

3240
-- | Load the logo file as a 'Pixbuf'.
3341
loadLogo :: Q Exp

GUI/Dialogs.hs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ aboutDialog parent
2828
"Mikolaj Konarski <mikolaj@well-typed.com>",
2929
"Nicolas Wu <nick@well-typed.com>",
3030
"Eric Kow <eric@well-typed.com>"],
31-
aboutDialogLogo := Just logo,
31+
aboutDialogLogo := logo,
3232
aboutDialogWebsite := "http://www.haskell.org/haskellwiki/ThreadScope",
3333
windowTransientFor := toWindow parent
3434
]

GUI/MainWindow.hs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -141,7 +141,7 @@ mainWindowNew builder actions = do
141141
------------------------------------------------------------------------
142142

143143
logo <- $loadLogo
144-
set mainWindow [ windowIcon := Just logo ]
144+
set mainWindow [ windowIcon := logo ]
145145

146146
------------------------------------------------------------------------
147147
-- Status bar functionality

0 commit comments

Comments
 (0)