From: <kr_...@us...> - 2003-04-14 18:22:36
|
Update of /cvsroot/htoolkit/port/src/Port In directory sc8-pr-cvs1:/tmp/cvs-serv22778/src/Port Modified Files: Handlers.hs Timer.hs Log Message: bugfix: Proper timer registration. The getAllTimerHandles function now returns a list of all exiting timer handles even if they are inactive. Index: Handlers.hs =================================================================== RCS file: /cvsroot/htoolkit/port/src/Port/Handlers.hs,v retrieving revision 1.19 retrieving revision 1.20 diff -C2 -d -r1.19 -r1.20 *** Handlers.hs 14 Apr 2003 17:36:53 -0000 1.19 --- Handlers.hs 14 Apr 2003 18:22:32 -0000 1.20 *************** *** 32,35 **** --- 32,38 ---- -- * Timers + ,registerTimer, unregisterTimer, getAllTimerHandles + + -- ** Events ,setTimerHandler, setTimerDefHandler, getTimerHandler ,setTimerDestroyHandler, setTimerDestroyDefHandler, getTimerDestroyHandler *************** *** 132,138 **** return () ! {----------------------------------------------------------------------------------------- ! Keep track of all windows ! -----------------------------------------------------------------------------------------} {-# NOINLINE windows #-} windows :: MVar [WindowHandle] --- 135,141 ---- return () ! ----------------------------------------------------------------------------------------- ! -- Keep track of all windows ! ----------------------------------------------------------------------------------------- {-# NOINLINE windows #-} windows :: MVar [WindowHandle] *************** *** 578,582 **** ----------------------------------------------------------------------------------------- ! -- Timers ----------------------------------------------------------------------------------------- {-# NOINLINE handlersTimer #-} --- 581,607 ---- ----------------------------------------------------------------------------------------- ! -- Keep track of all timers ! ----------------------------------------------------------------------------------------- ! {-# NOINLINE timers #-} ! timers :: MVar [TimerHandle] ! timers ! = unsafePerformIO (newMVar []) ! ! registerTimer :: TimerHandle -> IO () ! registerTimer htimer ! = do htimers <- takeMVar timers ! putMVar timers (htimer : L.delete htimer htimers) ! ! unregisterTimer :: TimerHandle -> IO () ! unregisterTimer htimer ! = do htimers <- takeMVar timers ! putMVar timers (L.delete htimer htimers) ! ! -- | 'getAllTimerHandles' returns list of handles for all created timers. ! getAllTimerHandles :: IO [TimerHandle] ! getAllTimerHandles = readMVar timers ! ! ----------------------------------------------------------------------------------------- ! -- TimerEvent ----------------------------------------------------------------------------------------- {-# NOINLINE handlersTimer #-} *************** *** 601,607 **** = getHandler htimer (return ()) handlersTimer - getAllTimerHandles :: IO [TimerHandle] - getAllTimerHandles = fmap keys (readMVar handlersTimer) - ----------------------------------------------------------------------------------------- -- TimerDestroy --- 626,629 ---- *************** *** 615,619 **** handleTimerDestroy :: TimerHandle -> IO () handleTimerDestroy htimer ! = invokeHandler htimer handlersTimerDestroy id setTimerDestroyHandler :: TimerHandle -> IO () -> IO () --- 637,647 ---- handleTimerDestroy :: TimerHandle -> IO () handleTimerDestroy htimer ! = do map <- takeMVar handlersTimerDestroy ! setTimerDefHandler htimer ! putMVar handlersTimerDestroy (delete htimer map) ! case lookup htimer map of ! Nothing -> return () ! Just io -> safeio io ! unregisterTimer htimer setTimerDestroyHandler :: TimerHandle -> IO () -> IO () Index: Timer.hs =================================================================== RCS file: /cvsroot/htoolkit/port/src/Port/Timer.hs,v retrieving revision 1.3 retrieving revision 1.4 diff -C2 -d -r1.3 -r1.4 *** Timer.hs 14 Apr 2003 17:49:52 -0000 1.3 --- Timer.hs 14 Apr 2003 18:22:32 -0000 1.4 *************** *** 22,36 **** import Graphics.UI.Port.Types ! import Graphics.UI.Port.Handlers(setTimerDefHandler, getAllTimerHandles) -- | Create a timer with a handler that is called on a specified milli-second interval. ! foreign import ccall "osCreateTimer" createTimer :: Int -> IO TimerHandle -- | Destroy a timer and automatically unregister its event handler. ! destroyTimer :: TimerHandle -> IO () ! destroyTimer htimer = do ! setTimerDefHandler htimer ! osDestroyTimer htimer ! foreign import ccall osDestroyTimer :: TimerHandle -> IO () -- | Change the delay time for the timer --- 22,37 ---- import Graphics.UI.Port.Types ! import Graphics.UI.Port.Handlers(registerTimer, getAllTimerHandles) -- | Create a timer with a handler that is called on a specified milli-second interval. ! createTimer :: Int -> IO TimerHandle ! createTimer interval = do ! htimer <- osCreateTimer interval ! registerTimer htimer ! return htimer ! foreign import ccall osCreateTimer :: Int -> IO TimerHandle -- | Destroy a timer and automatically unregister its event handler. ! foreign import ccall "osDestroyTimer" destroyTimer :: TimerHandle -> IO () -- | Change the delay time for the timer |