module InternAtom(internAtomK, internAtomF, internAtom,
                  atomNameK, atomNameF, atomName) where
import Command
import Event
--import Font(FontStruct)
--import Fudget
--import Geometry(Line, Point, Rect, Size(..))
--import LayoutRequest(LayoutRequest)
import Xrequest
--import Xtypes

internAtomK :: String -> Bool -> Cont (K b c) Atom
internAtomK = forall {t}.
(XRequest -> (XResponse -> Maybe Atom) -> t) -> String -> Bool -> t
ia forall {a} {b} {c}.
XRequest -> (XResponse -> Maybe a) -> Cont (K b c) a
xrequestK

internAtomF :: String -> Bool -> Cont (F b c) Atom
internAtomF = forall {t}.
(XRequest -> (XResponse -> Maybe Atom) -> t) -> String -> Bool -> t
ia forall {a} {b} {c}.
XRequest -> (XResponse -> Maybe a) -> Cont (F b c) a
xrequestF

internAtom :: String -> Bool -> (Atom -> f hi ho) -> f hi ho
internAtom String
a Bool
e = forall {t}.
(XRequest -> (XResponse -> Maybe Atom) -> t) -> String -> Bool -> t
ia forall {f :: * -> * -> *} {ans} {hi} {ho}.
FudgetIO f =>
XRequest -> (XResponse -> Maybe ans) -> (ans -> f hi ho) -> f hi ho
xrequest String
a Bool
e

ia :: (XRequest -> (XResponse -> Maybe Atom) -> t) -> String -> Bool -> t
ia XRequest -> (XResponse -> Maybe Atom) -> t
k String
atomNm Bool
ifExists =
    let gotit :: XResponse -> Maybe Atom
gotit (GotAtom Atom
atom) = forall a. a -> Maybe a
Just Atom
atom
        gotit XResponse
_ = forall a. Maybe a
Nothing
    in  XRequest -> (XResponse -> Maybe Atom) -> t
k (String -> Bool -> XRequest
InternAtom String
atomNm Bool
ifExists) XResponse -> Maybe Atom
gotit

atomNameK :: Atom -> Cont (K b c) (Maybe String)
atomNameK = forall {t}.
(XRequest -> (XResponse -> Maybe (Maybe String)) -> t) -> Atom -> t
an forall {a} {b} {c}.
XRequest -> (XResponse -> Maybe a) -> Cont (K b c) a
xrequestK

atomNameF :: Atom -> Cont (F b c) (Maybe String)
atomNameF = forall {t}.
(XRequest -> (XResponse -> Maybe (Maybe String)) -> t) -> Atom -> t
an forall {a} {b} {c}.
XRequest -> (XResponse -> Maybe a) -> Cont (F b c) a
xrequestF

atomName :: Atom -> (Maybe String -> f hi ho) -> f hi ho
atomName Atom
a = forall {t}.
(XRequest -> (XResponse -> Maybe (Maybe String)) -> t) -> Atom -> t
an forall {f :: * -> * -> *} {ans} {hi} {ho}.
FudgetIO f =>
XRequest -> (XResponse -> Maybe ans) -> (ans -> f hi ho) -> f hi ho
xrequest Atom
a

-- Here we need a Maybe String, so add an extra Just (the inner Just
-- is stripped by the fudlogue).

an :: (XRequest -> (XResponse -> Maybe (Maybe String)) -> t) -> Atom -> t
an XRequest -> (XResponse -> Maybe (Maybe String)) -> t
k Atom
atom = 
    let gotit :: XResponse -> Maybe (Maybe String)
gotit (GotAtomName (Just String
s)) = forall a. a -> Maybe a
Just (forall a. a -> Maybe a
Just String
s)
        gotit XResponse
_ = forall a. Maybe a
Nothing
    in  XRequest -> (XResponse -> Maybe (Maybe String)) -> t
k (Atom -> XRequest
GetAtomName Atom
atom) XResponse -> Maybe (Maybe String)
gotit