module ContDynF where

import Fudget
--import Xtypes
import Command
import FRequest
--import LayoutRequest(LayoutRequest)
--import Geometry
--import Message
import Spops(getSP,putSP,walkSP,pullSP)
import Path(here)
--import Direction
import Cont
--import Dynforkmerge
--import NullF(getMessageF,putMessageF)
--import LayoutDir

contDynF :: F a b -> Cont (F a d) b
contDynF :: F a b -> Cont (F a d) b
contDynF (F FSP a b
sp) = Cont (FSP a d) b -> Cont (F a d) b
forall hi ho a. Cont (FSP hi ho) a -> Cont (F hi ho) a
fContWrap (FSP a b -> Cont (FSP a d) b
forall a b d. FSP a b -> Cont (FSP a d) b
contDynFSP FSP a b
sp)

contDynFSP :: FSP a b -> Cont (FSP a d) b
contDynFSP :: FSP a b -> Cont (FSP a d) b
contDynFSP FSP a b
f b -> FSP a d
c = ([Message (Path, FRequest) b], FSP a b) -> FSP a d
cdf (FSP a b -> ([Message (Path, FRequest) b], FSP a b)
forall a1 a2. SP a1 a2 -> ([a2], SP a1 a2)
pullSP FSP a b
f)
  where cdf :: ([Message (Path, FRequest) b], FSP a b) -> FSP a d
cdf ([Message (Path, FRequest) b]
outf,FSP a b
f') = FSP a b -> [Message (Path, FRequest) b] -> FSP a d
out FSP a b
f' [Message (Path, FRequest) b]
outf 
        out :: FSP a b -> [Message (Path, FRequest) b] -> FSP a d
out FSP a b
f' [] = Cont (FSP a d) (FEvent a)
forall a b. Cont (SP a b) a
getSP Cont (FSP a d) (FEvent a) -> Cont (FSP a d) (FEvent a)
forall a b. (a -> b) -> a -> b
$ \FEvent a
msg -> ([Message (Path, FRequest) b], FSP a b) -> FSP a d
cdf (FSP a b -> FEvent a -> ([Message (Path, FRequest) b], FSP a b)
forall a1 a2. SP a1 a2 -> a1 -> ([a2], SP a1 a2)
walkSP FSP a b
f' FEvent a
msg)
        out FSP a b
f' (Message (Path, FRequest) b
x:[Message (Path, FRequest) b]
xs) = case Message (Path, FRequest) b
x of
	   High b
msg -> Message (Path, FRequest) d -> FSP a d -> FSP a d
forall b a. b -> SP a b -> SP a b
putSP ((Path, FRequest) -> Message (Path, FRequest) d
forall a b. a -> Message a b
Low (Path
here,XCommand -> FRequest
XCmd XCommand
DestroyWindow)) (FSP a d -> FSP a d) -> FSP a d -> FSP a d
forall a b. (a -> b) -> a -> b
$ b -> FSP a d
c b
msg
	   Low (Path, FRequest)
cmd -> Message (Path, FRequest) d -> FSP a d -> FSP a d
forall b a. b -> SP a b -> SP a b
putSP ((Path, FRequest) -> Message (Path, FRequest) d
forall a b. a -> Message a b
Low (Path, FRequest)
cmd) (FSP a d -> FSP a d) -> FSP a d -> FSP a d
forall a b. (a -> b) -> a -> b
$ FSP a b -> [Message (Path, FRequest) b] -> FSP a d
out FSP a b
f' [Message (Path, FRequest) b]
xs