@@ -1,4 +1,4 @@
1−{-# LANGUAGE ForeignFunctionInterface #-}
1+{-# LANGUAGE CPP, ForeignFunctionInterface, ScopedTypeVariables, LambdaCase #-}
22module Reflex.Dom.Internal.Foreign where
33
44import Control.Lens hiding (set)
@@ -22,6 +22,21 @@ import Data.List
2222import System.Directory
2323import System.Glib.FFI hiding (void)
2424
25+#ifndef mingw32_HOST_OS
26+import System.Posix.Signals
27+#endif
28+
29+quitWebView :: WebView -> IO ()
30+quitWebView wv = postGUIAsync $ do w <- widgetGetToplevel wv
31+ widgetDestroy w
32+
33+installQuitHandler :: WebView -> IO ()
34+#ifdef mingw32_HOST_OS
35+installQuitHandler wv = return () -- TODO: Maybe figure something out here for Windows users.
36+#else
37+installQuitHandler wv = installHandler keyboardSignal (Catch (quitWebView wv)) Nothing >> return ()
38+#endif
39+
2540makeDefaultWebView :: String -> (WebView -> IO ()) -> IO ()
2641makeDefaultWebView userAgentKey main = do
2742 _ <- initGUI
@@ -57,6 +72,7 @@ makeDefaultWebView userAgentKey main = do
5772 wf <- webViewGetMainFrame webView
5873 pwd <- getCurrentDirectory
5974 webFrameLoadString wf "" Nothing $ "file://" ++ pwd ++ "/"
75+ installQuitHandler webView
6076 mainGUI
6177
6278runWebGUI :: (WebView -> IO ()) -> IO ()