jsaddle-webkit2gtk 0.9.6.0 → 0.9.7.0
raw patch · 2 files changed
+10/−37 lines, 2 filesdep ~haskell-gi-basedep ~haskell-gi-overloading
Dependency ranges changed: haskell-gi-base, haskell-gi-overloading
Files
jsaddle-webkit2gtk.cabal view
@@ -1,5 +1,5 @@ name: jsaddle-webkit2gtk-version: 0.9.6.0+version: 0.9.7.0 cabal-version: >=1.10 build-type: Simple license: MIT@@ -35,8 +35,8 @@ gi-gtk >=3.0.17 && <3.1, gi-webkit2 >=4.0.14 && <4.1, gi-javascriptcore >=4.0.14 && <4.1,- haskell-gi-base >=0.20 && <0.22,- haskell-gi-overloading ==0.0.*,+ haskell-gi-base >=0.20 && <0.24,+ haskell-gi-overloading >=0.0 && < 2.0, jsaddle >=0.9.4.0 && <0.10, text >=1.2.1.3 && <1.3, webkit2gtk3-javascriptcore >=0.14.0.0 && <0.15
src/Language/Javascript/JSaddle/WebKitGTK.hs view
@@ -43,18 +43,13 @@ import Data.ByteString.Lazy (toStrict, fromStrict) import qualified Data.ByteString.Lazy as LB (ByteString) import Data.Aeson (encode, decode)-import Data.Text (Text) import qualified Data.Text as T (pack)-import Data.Text.Foreign (fromPtr) import Data.Text.Encoding (decodeUtf8, encodeUtf8) -import Foreign.Ptr (castPtr, nullPtr)- import Data.GI.Base.BasicTypes (GObject) import Data.GI.Base.Signals (connectSignalFunPtr, SignalConnectMode(..), SignalConnectMode, SignalHandlerId)-import Data.GI.Base.ManagedPtr (withManagedPtr) import GI.GLib (timeoutAdd, idleAdd, pattern PRIORITY_HIGH, pattern PRIORITY_DEFAULT) import qualified GI.Gtk as Gtk (main, init)@@ -65,7 +60,7 @@ widgetGetToplevel, widgetShowAll, onWidgetDestroy, mainQuit) import GI.Gio (noCancellable)-import GI.JavaScriptCore (Value(..), GlobalContext(..))+import GI.JavaScriptCore (valueToString) import GI.WebKit2 (scriptDialogPromptSetText, scriptDialogPromptGetDefaultText, scriptDialogGetMessage, scriptDialogGetDialogType,@@ -74,7 +69,7 @@ setSettingsEnableJavascript, webViewNewWithUserContentManager, userContentManagerNew, userContentManagerRegisterScriptMessageHandler,- javascriptResultGetValue, javascriptResultGetGlobalContext,+ javascriptResultGetJsValue, webViewGetUserContentManager, mk_UserContentManagerScriptMessageReceivedCallback, wrap_UserContentManagerScriptMessageReceivedCallback,@@ -83,13 +78,6 @@ onWebViewLoadChanged, setSettingsEnableDeveloperExtras, webViewSetSettings, webViewGetSettings, ScriptDialogType(..)) -import Graphics.UI.Gtk.WebKit.JavaScriptCore.JSBase- (JSValueRef, JSContextRef)-import Graphics.UI.Gtk.WebKit.JavaScriptCore.JSStringRef- (jsstringgetcharactersptr, jsstringgetlength, jsstringrelease)-import Graphics.UI.Gtk.WebKit.JavaScriptCore.JSValueRef- (jsvaluetostringcopy)- import Language.Javascript.JSaddle (JSM, Results, Batch) import Language.Javascript.JSaddle.Run (runJavaScript) import Language.Javascript.JSaddle.Run.Files (initState, runBatch, ghcjsHelpers)@@ -109,21 +97,6 @@ postGUIAsync action = void . idleAdd PRIORITY_DEFAULT $ action >> return False -withJSContextRef :: GlobalContext -> (JSContextRef -> IO a) -> IO a-withJSContextRef (GlobalContext ctx) f = withManagedPtr ctx (f . castPtr)--withJSValueRef :: Value -> (JSValueRef -> IO a) -> IO a-withJSValueRef (Value ptr) f = withManagedPtr ptr (f . castPtr)--valueToText :: JSContextRef -> JSValueRef -> IO Text-valueToText ctxRef s = do- jsstring <- jsvaluetostringcopy ctxRef s nullPtr- l <- jsstringgetlength jsstring- p <- jsstringgetcharactersptr jsstring- result <- fromPtr (castPtr p) (fromIntegral l)- jsstringrelease jsstring- return result- run :: JSM () -> IO () run main = do _ <- Gtk.init Nothing@@ -172,16 +145,16 @@ let cb' = wrap_UserContentManagerScriptMessageReceivedCallback cb cb'' <- mk_UserContentManagerScriptMessageReceivedCallback cb' connectSignalFunPtr obj "script-message-received::jsaddle" cb'' after+#if MIN_VERSION_haskell_gi_base(0,23,0)+ Nothing+#endif addJSaddleHandler :: WebView -> (Results -> IO ()) -> (Results -> IO Batch) -> IO () addJSaddleHandler webView processResult syncResults = do manager <- webViewGetUserContentManager webView _ <- onUserContentManagerScriptMessageReceived manager $ \result -> do- ctx <- javascriptResultGetGlobalContext result- arg <- javascriptResultGetValue result- bs <- withJSContextRef ctx $ \ctxRef ->- withJSValueRef arg $ \argRef ->- encodeUtf8 <$> valueToText ctxRef argRef+ arg <- javascriptResultGetJsValue result+ bs <- encodeUtf8 <$> valueToString arg mapM_ processResult (decode (fromStrict bs)) _ <- onWebViewScriptDialog webView $ \dialog -> scriptDialogGetDialogType dialog >>= \case