Author: jimtabor Date: Tue Jan 13 20:02:26 2009 New Revision: 38752
URL: http://svn.reactos.org/svn/reactos?rev=38752&view=rev Log: - Added stubs to timers, tooling up to change over to handled timers. This is related to just about everything. From Carets to window positions.
Modified: trunk/reactos/subsystems/win32/win32k/include/timer.h trunk/reactos/subsystems/win32/win32k/ntuser/object.c trunk/reactos/subsystems/win32/win32k/ntuser/timer.c
Modified: trunk/reactos/subsystems/win32/win32k/include/timer.h URL: http://svn.reactos.org/svn/reactos/trunk/reactos/subsystems/win32/win32k/inc... ============================================================================== --- trunk/reactos/subsystems/win32/win32k/include/timer.h [iso-8859-1] (original) +++ trunk/reactos/subsystems/win32/win32k/include/timer.h [iso-8859-1] Tue Jan 13 20:02:26 2009 @@ -28,5 +28,7 @@ UINT_PTR FASTCALL IntSetTimer(HWND Wnd, UINT_PTR IDEvent, UINT Elapse, TIMERPROC TimerFunc, BOOL SystemTimer); PTIMER FASTCALL FindSystemTimer(PMSG); BOOL FASTCALL ValidateTimerCallback(PW32THREADINFO,PWINDOW_OBJECT,WPARAM,LPARAM); +VOID CALLBACK SystemTimerProc(HWND,UINT,UINT_PTR,DWORD); +UINT_PTR FASTCALL SetSystemTimer(HWND,UINT_PTR,UINT,TIMERPROC);
#endif /* _WIN32K_TIMER_H */
Modified: trunk/reactos/subsystems/win32/win32k/ntuser/object.c URL: http://svn.reactos.org/svn/reactos/trunk/reactos/subsystems/win32/win32k/ntu... ============================================================================== --- trunk/reactos/subsystems/win32/win32k/ntuser/object.c [iso-8859-1] (original) +++ trunk/reactos/subsystems/win32/win32k/ntuser/object.c [iso-8859-1] Tue Jan 13 20:02:26 2009 @@ -70,7 +70,7 @@ { /**/ int i, iFree = 0, iWindow = 0, iMenu = 0, iCursorIcon = 0, - iHook = 0, iCallProc = 0, iAccel = 0, iMonitor = 0; + iHook = 0, iCallProc = 0, iAccel = 0, iMonitor = 0, iTimer = 0; /**/ DPRINT1("Out of user handles! Used -> %i, NM_Handle -> %d\n", usedHandles, ht->nb_handles); //#if 0 @@ -102,12 +102,15 @@ case otMonitor: iMonitor++; break; + case otTimer: + iMonitor++; + break; default: break; } } - DPRINT1("Handle Count by Type:\n Free = %d Window = %d Menu = %d CursorIcon = %d Hook = %d\n CallProc = %d Accel = %d Monitor = %d\n", - iFree, iWindow, iMenu, iCursorIcon, iHook, iCallProc, iAccel, iMonitor ); + DPRINT1("Handle Count by Type:\n Free = %d Window = %d Menu = %d CursorIcon = %d Hook = %d\n CallProc = %d Accel = %d Monitor = %d Timer = %d\n", + iFree, iWindow, iMenu, iCursorIcon, iHook, iCallProc, iAccel, iMonitor, iTimer ); //#endif return NULL; #if 0
Modified: trunk/reactos/subsystems/win32/win32k/ntuser/timer.c URL: http://svn.reactos.org/svn/reactos/trunk/reactos/subsystems/win32/win32k/ntu... ============================================================================== --- trunk/reactos/subsystems/win32/win32k/ntuser/timer.c [iso-8859-1] (original) +++ trunk/reactos/subsystems/win32/win32k/ntuser/timer.c [iso-8859-1] Tue Jan 13 20:02:26 2009 @@ -54,6 +54,72 @@ ExReleaseFastMutexUnsafeAndLeaveCriticalRegion(&Mutex)
/* FUNCTIONS *****************************************************************/ +PTIMER +FASTCALL +CreateTimer(VOID) +{ + HANDLE Handle; + PTIMER Ret = NULL; + + if (!FirstpTmr) + { + FirstpTmr = UserCreateObject(gHandleTable, &Handle, otTimer, sizeof(TIMER)); + if (FirstpTmr) InitializeListHead(&FirstpTmr->ptmrList); + Ret = FirstpTmr; + } + else + { + Ret = UserCreateObject(gHandleTable, &Handle, otTimer, sizeof(TIMER)); + if (Ret) InsertTailList(&FirstpTmr->ptmrList, &Ret->ptmrList); + } + return Ret; +} + +static +BOOL +FASTCALL +RemoveTimer(PTIMER pTmr) +{ + if (pTmr) + { + RemoveEntryList(&pTmr->ptmrList); + UserDeleteObject( USER_BODY_TO_HEADER(pTmr)->hSelf, otTimer); + return TRUE; + } + return FALSE; +} + +PTIMER +FASTCALL +FindTimer(PWINDOW_OBJECT Window, + UINT_PTR nID, + UINT flags, + BOOL Distroy) +{ + PTIMER pTmr = FirstpTmr; + KeEnterCriticalRegion(); + do + { + if (!pTmr) break; + + if ( pTmr->nID == nID && + pTmr->pWnd == Window && + (pTmr->flags & (TMRF_SYSTEM|TMRF_RIT)) == (flags & (TMRF_SYSTEM|TMRF_RIT))) + { + if (Distroy) + { + RemoveTimer(pTmr); + pTmr = (PTIMER)1; // We are here to remove the timer. + } + break; + } + + pTmr = (PTIMER)pTmr->ptmrList.Flink; + } while (pTmr != FirstpTmr); + KeLeaveCriticalRegion(); + + return pTmr; +}
PTIMER FASTCALL @@ -104,6 +170,41 @@ return TRUE; }
+// Rename it to IntSetTimer after move. +UINT_PTR FASTCALL +InternalSetTimer(HWND Wnd, UINT_PTR IDEvent, UINT Elapse, TIMERPROC TimerFunc, BOOL SystemTimer) +{ + return 0; +} + +// +// Process system timers. +// +VOID +CALLBACK +SystemTimerProc(HWND hwnd, + UINT uMsg, + UINT_PTR idEvent, + DWORD dwTime) +{ +} + +UINT_PTR +FASTCALL +SetSystemTimer( HWND hWnd, + UINT_PTR nIDEvent, + UINT uElapse, + TIMERPROC lpTimerFunc) +{ + return 0; +} + + +// +// +// Old Timer Queueing +// +// UINT_PTR FASTCALL IntSetTimer(HWND Wnd, UINT_PTR IDEvent, UINT Elapse, TIMERPROC TimerFunc, BOOL SystemTimer) { @@ -268,12 +369,6 @@ /* yes we need this, since ExAllocatePool isn't supposed to zero out allocated memory */ RtlClearAllBits(&WindowLessTimersBitMap);
- if (!FirstpTmr) - { - FirstpTmr = ExAllocatePoolWithTag(PagedPool, sizeof(TIMER), TAG_TIMERBMP); - if (FirstpTmr) InitializeListHead(&FirstpTmr->ptmrList); - } - return STATUS_SUCCESS; }
@@ -337,6 +432,7 @@ DPRINT("Enter NtUserSetSystemTimer\n"); UserEnterExclusive();
+ // This is wrong, lpTimerFunc is NULL! RETURN(IntSetTimer(hWnd, nIDEvent, uElapse, lpTimerFunc, TRUE));
CLEANUP: