|
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
|