mirror of
https://github.com/reactos/reactos.git
synced 2025-08-01 19:13:30 +00:00
- Added stubs to timers, tooling up to change over to handled timers. This is related to just about everything. From Carets to window positions.
svn path=/trunk/; revision=38752
This commit is contained in:
parent
953cecc715
commit
e3b9b100e1
3 changed files with 110 additions and 9 deletions
|
@ -28,5 +28,7 @@ BOOL FASTCALL IntKillTimer(HWND Wnd, UINT_PTR IDEvent, BOOL SystemTimer);
|
||||||
UINT_PTR FASTCALL IntSetTimer(HWND Wnd, UINT_PTR IDEvent, UINT Elapse, TIMERPROC TimerFunc, BOOL SystemTimer);
|
UINT_PTR FASTCALL IntSetTimer(HWND Wnd, UINT_PTR IDEvent, UINT Elapse, TIMERPROC TimerFunc, BOOL SystemTimer);
|
||||||
PTIMER FASTCALL FindSystemTimer(PMSG);
|
PTIMER FASTCALL FindSystemTimer(PMSG);
|
||||||
BOOL FASTCALL ValidateTimerCallback(PW32THREADINFO,PWINDOW_OBJECT,WPARAM,LPARAM);
|
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 */
|
#endif /* _WIN32K_TIMER_H */
|
||||||
|
|
|
@ -70,7 +70,7 @@ __inline static PUSER_HANDLE_ENTRY alloc_user_entry(PUSER_HANDLE_TABLE ht)
|
||||||
{
|
{
|
||||||
/**/
|
/**/
|
||||||
int i, iFree = 0, iWindow = 0, iMenu = 0, iCursorIcon = 0,
|
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);
|
DPRINT1("Out of user handles! Used -> %i, NM_Handle -> %d\n", usedHandles, ht->nb_handles);
|
||||||
//#if 0
|
//#if 0
|
||||||
|
@ -102,12 +102,15 @@ __inline static PUSER_HANDLE_ENTRY alloc_user_entry(PUSER_HANDLE_TABLE ht)
|
||||||
case otMonitor:
|
case otMonitor:
|
||||||
iMonitor++;
|
iMonitor++;
|
||||||
break;
|
break;
|
||||||
|
case otTimer:
|
||||||
|
iMonitor++;
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
break;
|
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",
|
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 );
|
iFree, iWindow, iMenu, iCursorIcon, iHook, iCallProc, iAccel, iMonitor, iTimer );
|
||||||
//#endif
|
//#endif
|
||||||
return NULL;
|
return NULL;
|
||||||
#if 0
|
#if 0
|
||||||
|
|
|
@ -54,6 +54,72 @@ static ULONG HintIndex = 0;
|
||||||
ExReleaseFastMutexUnsafeAndLeaveCriticalRegion(&Mutex)
|
ExReleaseFastMutexUnsafeAndLeaveCriticalRegion(&Mutex)
|
||||||
|
|
||||||
/* FUNCTIONS *****************************************************************/
|
/* 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
|
PTIMER
|
||||||
FASTCALL
|
FASTCALL
|
||||||
|
@ -104,6 +170,41 @@ ValidateTimerCallback(PW32THREADINFO pti,
|
||||||
return TRUE;
|
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
|
UINT_PTR FASTCALL
|
||||||
IntSetTimer(HWND Wnd, UINT_PTR IDEvent, UINT Elapse, TIMERPROC TimerFunc, BOOL SystemTimer)
|
IntSetTimer(HWND Wnd, UINT_PTR IDEvent, UINT Elapse, TIMERPROC TimerFunc, BOOL SystemTimer)
|
||||||
{
|
{
|
||||||
|
@ -268,12 +369,6 @@ InitTimerImpl(VOID)
|
||||||
/* yes we need this, since ExAllocatePool isn't supposed to zero out allocated memory */
|
/* yes we need this, since ExAllocatePool isn't supposed to zero out allocated memory */
|
||||||
RtlClearAllBits(&WindowLessTimersBitMap);
|
RtlClearAllBits(&WindowLessTimersBitMap);
|
||||||
|
|
||||||
if (!FirstpTmr)
|
|
||||||
{
|
|
||||||
FirstpTmr = ExAllocatePoolWithTag(PagedPool, sizeof(TIMER), TAG_TIMERBMP);
|
|
||||||
if (FirstpTmr) InitializeListHead(&FirstpTmr->ptmrList);
|
|
||||||
}
|
|
||||||
|
|
||||||
return STATUS_SUCCESS;
|
return STATUS_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -337,6 +432,7 @@ NtUserSetSystemTimer(
|
||||||
DPRINT("Enter NtUserSetSystemTimer\n");
|
DPRINT("Enter NtUserSetSystemTimer\n");
|
||||||
UserEnterExclusive();
|
UserEnterExclusive();
|
||||||
|
|
||||||
|
// This is wrong, lpTimerFunc is NULL!
|
||||||
RETURN(IntSetTimer(hWnd, nIDEvent, uElapse, lpTimerFunc, TRUE));
|
RETURN(IntSetTimer(hWnd, nIDEvent, uElapse, lpTimerFunc, TRUE));
|
||||||
|
|
||||||
CLEANUP:
|
CLEANUP:
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue