module HTk.Toolkit.ModalDialog (
modalDialog,
modalInteraction
) where
import Control.Exception
import HTk.Toplevel.HTk
modalDialog :: Toplevel -> Bool -> Event a -> IO a
modalDialog win modality ev =
do
maybeModalDialog True modality win ev
maybeModalDialog :: Bool -> Bool -> Toplevel -> Event a -> IO a
maybeModalDialog destr True win ev = doModalDialog destr win ev
maybeModalDialog destr False win ev =
do
ans <- sync ev
when destr (destroy win)
return ans
doModalDialog :: Bool -> Toplevel -> Event a -> IO a
doModalDialog destr win ev =
do
gw <- getCurrentGrab
grabLocal win
ans <- sync ev
try(releaseGrab win) :: IO (Either SomeException ())
when destr $ do
try (destroy win) :: IO (Either SomeException ())
return ()
returnGrab gw
return ans
modalInteraction :: Toplevel -> Bool -> Bool -> Event a -> IO a
modalInteraction win destr modality ev =
do
maybeModalDialog destr modality win ev