DoubleClickF

module DoubleClickF where
import Fudget
import FRequest
import Xtypes
import Event
--import Font(FontStruct)
import Spops
--import Geometry(Point,Rect,Size(..))
import CompOps((>=..<))

doubleClickF :: Time -> F a b -> F a b
doubleClickF timeout fudget = fudget >=..< doubleClickSP 0 dummy
  where
    dummy = error "bug in DoubleClickF.hs"
    doubleClickSP n last =
      getSP $ \ tev@(path,ev) ->
      case ev of
        XEvt (ButtonEvent t wp rp mods press btn) ->
	    if n==0 || press/=Pressed || t>lasttime+timeout ||
	       btn/=lastbtn || mods/=lastmods || path/=lastpath
	    then putSP tev $ doubleClickSP 1 tev
	    else let n' = n+1
		     tev' = (path,XEvt (ButtonEvent t wp rp mods (MultiClick n') btn))
	         in putSP tev' $ doubleClickSP n' tev'
	  where
	    (lastpath,XEvt (ButtonEvent lasttime _ _ lastmods _ lastbtn)) = last
	_ -> putSP tev $ doubleClickSP n last