@@ -1,4 +1,4 @@
1−{-# LANGUAGE ForeignFunctionInterface #-}
1+{-# LANGUAGE CPP, ForeignFunctionInterface, ScopedTypeVariables, LambdaCase #-}
2module Reflex.Dom.Internal.Foreign where
2module Reflex.Dom.Internal.Foreign where
4import Control.Lens hiding (set)
4import Control.Lens hiding (set)
@@ -22,6 +22,21 @@ import Data.List
22import System.Directory
22import System.Directory
23import System.Glib.FFI hiding (void)
23import System.Glib.FFI hiding (void)
25+#ifndef mingw32_HOST_OS
26+import System.Posix.Signals
29+quitWebView :: WebView -> IO ()
30+quitWebView wv = postGUIAsync $ do w <- widgetGetToplevel wv
33+installQuitHandler :: WebView -> IO ()
34+#ifdef mingw32_HOST_OS
35+installQuitHandler wv = return () -- TODO: Maybe figure something out here for Windows users.
37+installQuitHandler wv = installHandler keyboardSignal (Catch (quitWebView wv)) Nothing >> return ()
25makeDefaultWebView :: String -> (WebView -> IO ()) -> IO ()
40makeDefaultWebView :: String -> (WebView -> IO ()) -> IO ()
26makeDefaultWebView userAgentKey main = do
41makeDefaultWebView userAgentKey main = do
27 _ <- initGUI
42 _ <- initGUI
@@ -57,6 +72,7 @@ makeDefaultWebView userAgentKey main = do
57 wf <- webViewGetMainFrame webView
72 wf <- webViewGetMainFrame webView
58 pwd <- getCurrentDirectory
73 pwd <- getCurrentDirectory
59 webFrameLoadString wf "" Nothing $ "file://" ++ pwd ++ "/"
74 webFrameLoadString wf "" Nothing $ "file://" ++ pwd ++ "/"
75+ installQuitHandler webView
62runWebGUI :: (WebView -> IO ()) -> IO ()
78runWebGUI :: (WebView -> IO ()) -> IO ()