@@ -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)
@@ -23,6 +23,21 @@ import Data.List
23import System.Directory
23import System.Directory
24import System.Glib.FFI hiding (void)
24import System.Glib.FFI hiding (void)
26+#ifndef mingw32_HOST_OS
27+import System.Posix.Signals
30+quitWebView :: WebView -> IO ()
31+quitWebView wv = postGUIAsync $ do w <- widgetGetToplevel wv
34+installQuitHandler :: WebView -> IO ()
35+#ifdef mingw32_HOST_OS
36+installQuitHandler wv = return () -- TODO: Maybe figure something out here for Windows users.
38+installQuitHandler wv = installHandler keyboardSignal (Catch (quitWebView wv)) Nothing >> return ()
26makeDefaultWebView :: String -> (WebView -> IO ()) -> IO ()
41makeDefaultWebView :: String -> (WebView -> IO ()) -> IO ()
27makeDefaultWebView userAgentKey main = do
42makeDefaultWebView userAgentKey main = do
28 _ <- initGUI
43 _ <- initGUI
@@ -58,6 +73,7 @@ makeDefaultWebView userAgentKey main = do
58 wf <- webViewGetMainFrame webView
73 wf <- webViewGetMainFrame webView
59 pwd <- getCurrentDirectory
74 pwd <- getCurrentDirectory
60 webFrameLoadString wf "" Nothing $ "file://" ++ pwd ++ "/"
75 webFrameLoadString wf "" Nothing $ "file://" ++ pwd ++ "/"
76+ installQuitHandler webView
63runWebGUI :: (WebView -> IO ()) -> IO ()
79runWebGUI :: (WebView -> IO ()) -> IO ()