reflex-gi-gtk 0.2.0.0 → 0.2.0.1
raw patch · 10 files changed
+68/−204 lines, 10 filesdep ~basedep ~haskell-gi-basedep ~mtlPVP: major bump suggested
API removals or changes: PVP suggests a major version bump
Dependency ranges changed: base, haskell-gi-base, mtl, ref-tf, reflex, semialign, text, these, witherable
API changes (from Hackage documentation)
- Reflex.GI.Gtk.Host: data ReflexGtkT (t :: *) (m :: k) a
+ Reflex.GI.Gtk.Host: data ReflexGtkT (t :: Type) (m :: k) a
Files
- README.md +3/−11
- changelog.md +6/−0
- example/Main.hs +6/−7
- reflex-gi-gtk.cabal +16/−15
- src/Reflex/GI/Gtk/Host.hs +4/−2
- src/Reflex/GI/Gtk/Input.hs +1/−0
- src/Reflex/GI/Gtk/Output.hs +2/−2
- src/Reflex/GI/Gtk/Run/Base.hs +5/−6
- stack.yaml +5/−22
- stack.yaml.lock +20/−139
README.md view
@@ -14,16 +14,8 @@ ## Installation -The package can be compiled with [stack](https://haskellstack.org/)-using the shipped `stack.yaml` as follows:--```Shell-$ stack install-```--The build process has mostly been tested using stack, but it should-also work using [cabal-install](https://www.haskell.org/cabal/) or-other standard `Cabal`-based package managers.+reflex-gi-gtk is a regular cabal library and can be added to your project by+listing `reflex-gi-gtk` in your project's `build-depends`. ## Quick start @@ -76,7 +68,7 @@ You can also start obtaining reactive inputs from widget signals: ```Haskell- text1 <- dynamicOnSignal "" input1 #changed $ \fire -> labelGetText input1 >>= fire+ text1 <- dynamicOnSignal "" input1 #changed $ \fire -> entryGetText input1 >>= fire text2 <- dynamicOnAttribute input2 #text ```
changelog.md view
@@ -1,3 +1,9 @@+# 0.2.0.1++* Add support for GHC 9.6.++* Update Reflex version to 0.9.+ # 0.2.0.0 * Initial release
example/Main.hs view
@@ -2,8 +2,6 @@ {-# LANGUAGE TypeFamilies #-} module Main where -import Control.Applicative (liftA2)-import Control.Monad (join) import qualified Data.Map.Lazy as M import qualified Data.List.NonEmpty as NE import qualified Data.Text as T@@ -18,6 +16,7 @@ , mergeList , performEvent_ , switch+ , joinDynThroughMap ) import Reflex.GI.Gtk ( ReactiveAttrOp((:==)) , MonadReflexGtk@@ -91,7 +90,7 @@ , M.fromList . map (,Nothing) . NE.toList <$> delete ] inputWidgets <-- listHoldWithKey (M.singleton 0 ()) inputWidgetUpdates $ \k () -> do+ listHoldWithKey (M.singleton 0 ()) inputWidgetUpdates $ \k () -> (\(widget, text, delete') -> (widget, text, k <$ delete')) <$> stringInput let delete = switch $ mergeList . map (\(_, _, d) -> d) . M.elems@@ -100,11 +99,11 @@ sinkBoxUniform inputBox (M.map (\(w, _, _) -> w) <$> inputWidgets) False False 0 Gtk.PackTypeStart - outputWidgets <- list (M.map (\(_, t, _) -> t) <$> inputWidgets) - $ \textBB -> do- let textB = join textBB+ let inputTexts = joinDynThroughMap (M.map (\(_, t, _) -> t) <$> inputWidgets)++ outputWidgets <- list inputTexts $ \textDyn -> do label <- runGtk $ Gtk.labelNew Nothing- sink label [#label :== textB]+ sink label [#label :== textDyn] #show label pure label sinkBoxUniform outputBox outputWidgets True True 10 Gtk.PackTypeStart
reflex-gi-gtk.cabal view
@@ -1,5 +1,5 @@ name: reflex-gi-gtk-version: 0.2.0.0+version: 0.2.0.1 synopsis: Helper functions to use reflex with gi-gtk description: This package provides a a reflex host and helper@@ -36,23 +36,23 @@ , Reflex.GI.Gtk.Run.Class , Reflex.GI.Gtk.Widget.Ord build-depends: async ^>= 2.2.2- , base ^>= 4.13+ , base >= 4.13 && < 5 , containers ^>= 0.6.2 , dependent-sum ^>= 0.7.1 , exception-transformers ^>= 0.4 , gi-gdk ^>= 3.0 , gi-glib ^>= 2.0 , gi-gtk ^>= 3.0- , haskell-gi-base ^>= 0.24- , mtl ^>= 2.2.2+ , haskell-gi-base >= 0.24 && < 0.27+ , mtl ^>= 2.2.2 || ^>= 2.3 , primitive ^>= 0.7- , ref-tf ^>= 0.4- , reflex ^>= 0.8- , semialign ^>= 1.1+ , ref-tf ^>= 0.4 || ^>= 0.5+ , reflex ^>= 0.8 || ^>= 0.9+ , semialign >= 1.1 && < 1.4 , stm ^>= 2.5- , text ^>= 1.2.4- , these ^>= 1.1.1- , witherable ^>= 0.3.5+ , text >= 1.2.4 && < 2.1+ , these ^>= 1.1.1 || ^>= 1.2+ , witherable ^>= 0.3.5 || ^>= 0.4 default-language: Haskell2010 executable reflex-gi-gtk-example@@ -60,15 +60,16 @@ main-is: Main.hs default-language: Haskell2010 build-depends: reflex-gi-gtk- , base ^>= 4.13+ , base >= 4.13 && < 5 , containers ^>= 0.6.2 , dependent-sum ^>= 0.7.1 , gi-gtk ^>= 3.0- , haskell-gi-base ^>= 0.24.5- , mtl ^>= 2.2.2+ , haskell-gi-base >= 0.24.5 && < 0.27+ , mtl ^>= 2.2.2 || ^>= 2.3 , patch ^>= 0.0- , reflex ^>= 0.8- , text ^>= 1.2.4+ , reflex ^>= 0.9+ , text >= 1.2.4 && < 2.1+ ghc-options: -threaded source-repository head type: git
src/Reflex/GI/Gtk/Host.hs view
@@ -5,6 +5,7 @@ {-# LANGUAGE RankNTypes, FlexibleContexts, OverloadedLabels, RecursiveDo #-} {-# LANGUAGE GeneralizedNewtypeDeriving, StandaloneDeriving, FlexibleInstances, PolyKinds #-} {-# LANGUAGE MultiParamTypeClasses, UndecidableInstances, GADTs, ScopedTypeVariables #-}+{-# LANGUAGE TypeOperators #-} {-| Description : Execute monadic actions with access to reactive operators on GTK@@ -45,6 +46,7 @@ , (==>) ) import Data.Function (fix)+import Data.Kind (Type) import Data.GI.Base.Signals (disconnectSignalHandler) import Data.Int (Int32) import Data.Maybe (catMaybes)@@ -110,7 +112,7 @@ -- Your probably want to look at 'ReflexGtk', as it is the only -- specialization of this type that can be executed using -- 'runReflexGtk'.-newtype ReflexGtkT (t :: *) (m :: k) a = ReflexGtkT+newtype ReflexGtkT (t :: Type) (m :: k) a = ReflexGtkT { unReflexGtkT :: PostBuildT t (TriggerEventT t (RunGtkT (PerformEventT t m))) a } deriving (Functor, Applicative, Monad, MonadFix)@@ -225,7 +227,7 @@ fmap (==> x) <$> readRef (unEventTriggerRef triggerRef) ) invocations _ <- fireCommand triggers $ pure ()- liftIO $ mapM_ (\(_ :=> (TriggerInvocation _ done)) -> done) invocations+ liftIO $ mapM_ (\(_ :=> TriggerInvocation _ done) -> done) invocations loop pure ()
src/Reflex/GI/Gtk/Input.hs view
@@ -3,6 +3,7 @@ -- file, You can obtain one at https://mozilla.org/MPL/2.0/. {-# LANGUAGE ConstraintKinds, GADTs, FlexibleContexts, MultiParamTypeClasses #-}+{-# LANGUAGE TypeOperators #-} {-| Description : Obtain reactive inputs from GLib signals
src/Reflex/GI/Gtk/Output.hs view
@@ -3,7 +3,7 @@ -- file, You can obtain one at https://mozilla.org/MPL/2.0/. {-# LANGUAGE RankNTypes, KindSignatures, DataKinds, ConstraintKinds, FlexibleContexts, GADTs #-}-{-# LANGUAGE FunctionalDependencies, FlexibleInstances #-}+{-# LANGUAGE FunctionalDependencies, FlexibleInstances, TypeOperators #-} {-| Description : Output reactive values to attributes of GTK widgets@@ -46,8 +46,8 @@ import Data.GI.Base.Overloading ( HasAttributeList , ResolveAttribute )-import Data.Witherable (catMaybes) import GHC.TypeLits (Symbol)+import Witherable (catMaybes) import Reflex ( Dynamic , Event , PerformEvent
src/Reflex/GI/Gtk/Run/Base.hs view
@@ -37,6 +37,7 @@ , try ) import Control.Monad ( join+ , unless , void ) import Control.Monad.Exception (MonadException)@@ -132,9 +133,9 @@ performEvent_ = RunGtkT . performEvent_ . fmap unGtkT instance (MonadIO m) => MonadRunGtk (RunGtkT m) where- runGtk a = askRunGtk >>= liftIO . ($a)- runGtk_ a = askRunGtk_ >>= liftIO . ($a)- runGtkPromise a = askRunGtkPromise >>= liftIO . fmap liftIO . ($a)+ runGtk a = askRunGtk >>= liftIO . ($ a)+ runGtk_ a = askRunGtk_ >>= liftIO . ($ a)+ runGtkPromise a = askRunGtkPromise >>= liftIO . fmap liftIO . ($ a) askRunGtk :: (Monad m) => RunGtkT m (IO a -> IO a) askRunGtk = (join .) <$> askRunGtkPromise@@ -173,9 +174,7 @@ fireAsynchronously x $ atomically $ writeTVar firedTVar True let waitCompleted = do hasFired <- readTVar firedTVar- if hasFired- then pure ()- else retry+ unless hasFired retry iAmGtkThread <- isThreadMe gtkThread' fix $ \loop -> join $ atomically $ (pure () <$ waitCompleted)
stack.yaml view
@@ -1,27 +1,10 @@-resolver: lts-16.27+resolver: lts-22.12 packages: - . extra-deps:- - reflex-0.8.0.0- - constraints-extras-0.3.0.2- - dependent-map-0.4.0.0- - dependent-sum-0.7.1.0- - monoidal-containers-0.6.0.1- - patch-0.0.3.2- - prim-uniq-0.2- - ref-tf-0.4.0.2- - witherable-0.3.5- - haskell-gi-base-0.24.5- - haskell-gi-0.24.7- - gi-pango-1.0.23- - gi-harfbuzz-0.0.3- - gi-gtk-3.0.36- - gi-gobject-2.0.25- - gi-glib-2.0.24- - gi-gio-2.0.27- - gi-gdkpixbuf-2.0.24- - gi-gdk-3.0.23- - gi-cairo-1.0.24- - gi-atk-2.0.22+ - reflex-0.9.3.0+ - patch-0.0.8.2+ - constraints-0.13.4+ - primitive-0.7.4.0
stack.yaml.lock view
@@ -5,155 +5,36 @@ packages: - completed:- hackage: reflex-0.8.0.0@sha256:e50de03568818072e2811211431ffe9811aeed69f3b24104b1dafb1b6fd0a525,11942- pantry-tree:- size: 4587- sha256: 41a690372195eecda7bc9631a3724bc8a60a47a765e5c4e7a7ef8bdaf6a6eae9- original:- hackage: reflex-0.8.0.0-- completed:- hackage: constraints-extras-0.3.0.2@sha256:013b8d0392582c6ca068e226718a4fe8be8e22321cc0634f6115505bf377ad26,1853- pantry-tree:- size: 594- sha256: 3ce1012bfb02e4d7def9df19ce80b8cd2b472c691b25b181d9960638673fecd1- original:- hackage: constraints-extras-0.3.0.2-- completed:- hackage: dependent-map-0.4.0.0@sha256:ca2b131046f4340a1c35d138c5a003fe4a5be96b14efc26291ed35fd08c62221,1657- pantry-tree:- size: 551- sha256: 5defa30010904d2ad05a036f3eaf83793506717c93cbeb599f40db1a3632cfc5- original:- hackage: dependent-map-0.4.0.0-- completed:- hackage: dependent-sum-0.7.1.0@sha256:5599aa89637db434431b1dd3fa7c34bc3d565ee44f0519bfbc877be1927c2531,2068- pantry-tree:- size: 290- sha256: 9cbfb32b5a8a782b7a1c941803fd517633cb699159b851c1d82267a9e9391b50- original:- hackage: dependent-sum-0.7.1.0-- completed:- hackage: monoidal-containers-0.6.0.1@sha256:ffdfae0fde7a08e9e314667a78d86454d2d23137d85f226ec6e757c190fb28ad,2583- pantry-tree:- size: 569- sha256: 61d5a73cb768aa4d59db7365418a2fc1bb24b8c3e53ca496372656b6ba4d31ab- original:- hackage: monoidal-containers-0.6.0.1-- completed:- hackage: patch-0.0.3.2@sha256:b4d3a60db88a04030392a06076defb9fe310a79577df7ff63ea2bb0298817b8d,2452- pantry-tree:- size: 977- sha256: b9ab71b93cdff84a75c9d251513b4d64a9fea5b89526ecbec60eb9ae04521478- original:- hackage: patch-0.0.3.2-- completed:- hackage: prim-uniq-0.2@sha256:7bfd8a729812bf212610b63459b76a086ecd5ce48f48d785c288e082d055d47b,1403- pantry-tree:- size: 464- sha256: aa27fb2f22141bd9bb474091f811badd9c71c52a1504fb81834aeb28cecff626- original:- hackage: prim-uniq-0.2-- completed:- hackage: ref-tf-0.4.0.2@sha256:69de3550250e0cd69f45d080359cb314a9487c915024349c75b78732bbee9332,1134- pantry-tree:- size: 211- sha256: fc5a4a35b4c782a33f452c1dc66ffa8ddbf321e2db369bd8823c796f0d4d8c7f- original:- hackage: ref-tf-0.4.0.2-- completed:- hackage: witherable-0.3.5@sha256:6590a15735b50ac14dcc138d4265ff1585d5f3e9d3047d5ebc5abf4cd5f50084,1476- pantry-tree:- size: 271- sha256: b99f21dbac28da031eb7c787fbffbe5e77e0aee42b64b5dda082470e907d5ab5- original:- hackage: witherable-0.3.5-- completed:- hackage: haskell-gi-base-0.24.5@sha256:f289ee14d99bc91daaf15a72533def379e1f5c6e51e9eff0d67e57912816ce74,2435- pantry-tree:- size: 1937- sha256: ddb1858a395755bb14438f39718df2f95042f492a55b6dc0f9343435f758613c- original:- hackage: haskell-gi-base-0.24.5-- completed:- hackage: haskell-gi-0.24.7@sha256:d1cf3e64589c9c366228f8fe89d2d48207b3ca11b48966ef976fedfa679a819b,5241- pantry-tree:- size: 4348- sha256: c6db02339d61f70cfb687c7786c4441b9fa2658ce4b4aac19395f2e939ed8f1b- original:- hackage: haskell-gi-0.24.7-- completed:- hackage: gi-pango-1.0.23@sha256:160443e93def8aa95e66fe1de40d51bb12ee922f7cafe6e33d6009f5490c66c5,8233- pantry-tree:- size: 360- sha256: fc5b1f6835549f148284950ab540df9d9f4d7a75df958b5de5e4c01d922dcb37- original:- hackage: gi-pango-1.0.23-- completed:- hackage: gi-harfbuzz-0.0.3@sha256:0550f498854b7edac66b1a09f283e5b5c86033aff58b4ac30b024ae59e1bd866,5869- pantry-tree:- size: 364- sha256: f33e284484ab7520bb115508fe1ddae5585e42aa292c97f4f6abb2e7ec3d60eb- original:- hackage: gi-harfbuzz-0.0.3-- completed:- hackage: gi-gtk-3.0.36@sha256:ed4525766763f290aa03ae19e41a31c429a8d381729d4869e7c44e551351df6a,39016- pantry-tree:- size: 359- sha256: cd1718b99526699f158dce646c2c20cf51eedca7f78c33f8d6290e2ba46ccbb4- original:- hackage: gi-gtk-3.0.36-- completed:- hackage: gi-gobject-2.0.25@sha256:95ca4fd52538ad9b41e54fc9324a93fd680052f8ebb25811e3dc6f8a94bff009,9349- pantry-tree:- size: 364- sha256: 3187d2ae59029b353e1fa134cd7716e4602483d2f1b86fee02c957b4a0065e2b- original:- hackage: gi-gobject-2.0.25-- completed:- hackage: gi-glib-2.0.24@sha256:46726f0fb6b0ef0d6f6620d53025a9ca2a5bc273ab65496b368df7bc3dbe6d83,9558- pantry-tree:- size: 358- sha256: b51e43df984a63058ca529a99875a3c42a37827cf11694542abf77586cf28532- original:- hackage: gi-glib-2.0.24-- completed:- hackage: gi-gio-2.0.27@sha256:6535951e2ad0882bc7231da56457be52a85e99cb56acec9ec9919f1c15bed728,21981- pantry-tree:- size: 359- sha256: 75d3bd5fc1f9c00268537219d309ca289666da051835f6813bb636cebf4f1191- original:- hackage: gi-gio-2.0.27-- completed:- hackage: gi-gdkpixbuf-2.0.24@sha256:287c7233cfecb69a6aff0fb6a952862d759b5562b488bb8046229ee0f4372c6f,3842+ hackage: reflex-0.9.3.0@sha256:e0c67fbdd4e270a1a04e3fb7bab03ac431052e9a28296bd55659204a27fa44cb,12252 pantry-tree:- size: 368- sha256: 9819be48b98d91cc69d84a9cc7c997262443e1c4d37a224a3a2f12b55c877740+ sha256: e98a56416059f1c04d6c746a96977121dee47cf1caeb922196c438bcd5fe5efe+ size: 4664 original:- hackage: gi-gdkpixbuf-2.0.24+ hackage: reflex-0.9.3.0 - completed:- hackage: gi-gdk-3.0.23@sha256:33ad689aa6e1463c57946762016a789b6cb663df174e31f9705956a9385b7b0f,9003+ hackage: patch-0.0.8.2@sha256:629479fb09e451570d4f7b2f581c37b16cb5ff131881f632138a199d8dcfe794,3338 pantry-tree:- size: 355- sha256: 11ff63701019ed413a143b84849f058a83770ba251c8f5743a7edf5d252a1049+ sha256: f39897e2021c8207dc02341d54c8ea2720a0ae98a1e8e6f82a8d894f4e2cb959+ size: 1179 original:- hackage: gi-gdk-3.0.23+ hackage: patch-0.0.8.2 - completed:- hackage: gi-cairo-1.0.24@sha256:451ba2f6f0954805c6d38f1e0bffd849607160e824abf4e077a95e999ef237dd,3727+ hackage: constraints-0.13.4@sha256:0d8834307bb6798ac937955c00155c26d671b5df147f5622d335d1094290fd36,2504 pantry-tree:- size: 358- sha256: 3e8d149deabf1894faec5b3e9e35869ad8174f911be659c9766b183b92770994+ sha256: c74dab1ffbdd096ee0d71ce9662be556d8d37d7d65428de565a062efc8dd64f0+ size: 867 original:- hackage: gi-cairo-1.0.24+ hackage: constraints-0.13.4 - completed:- hackage: gi-atk-2.0.22@sha256:6ec2197aee4a1b5966302fc2875be05a9b3a54f694c4a6a9a330f4b0211223c5,6791+ hackage: primitive-0.7.4.0@sha256:c2f0ed97b3dce97f2f43b239c3be8b136e4368f1eb7b61322ee9ac98f604622b,2982 pantry-tree:- size: 355- sha256: b1398e06f447003ef9c9dde64ebae1cab214db2b20a179a85837604ddb0ac12b+ sha256: 1cd1f40729b3038f1140fbf506ce59ab2db3f745b1727e0beba6390621aa9630+ size: 1655 original:- hackage: gi-atk-2.0.22+ hackage: primitive-0.7.4.0 snapshots: - completed:- size: 533252- url: https://raw.githubusercontent.com/commercialhaskell/stackage-snapshots/master/lts/16/27.yaml- sha256: c2aaae52beeacf6a5727c1010f50e89d03869abfab6d2c2658ade9da8ed50c73- original: lts-16.27+ sha256: e2c529ccfb21501f98f639e056cbde50470b86256d9849d7a82d414ca23e4276+ size: 712898+ url: https://raw.githubusercontent.com/commercialhaskell/stackage-snapshots/master/lts/22/12.yaml+ original: lts-22.12