Kaydet (Commit) 0073101e authored tarafından Jan-Marek Glogowski's avatar Jan-Marek Glogowski

WIN use the SetTimer timer as one-shot

SetTimer is a continuous timer, but we want to use it as a
one-shot, so make sure we actually kill it when not needed.

Change-Id: If6f5374346dc530eb664545ade2c2955885941b5
Reviewed-on: https://gerrit.libreoffice.org/59589
Tested-by: Jenkins
Reviewed-by: 's avatarJan-Marek Glogowski <glogow@fbihome.de>
üst 4c356a3e
......@@ -39,6 +39,7 @@ class WinSalTimer final : public SalTimer, protected VersionedEvent
HANDLE m_nTimerId; ///< Windows timer id
bool m_bDirectTimeout; ///< timeout can be processed directly
bool m_bForceRealTimer; ///< enforce using a real timer for 0ms
bool m_bSetTimerRunning; ///< true, if a SetTimer is running
void ImplStart( sal_uIntPtr nMS );
void ImplStop();
......
......@@ -42,8 +42,11 @@ void WinSalTimer::ImplStop()
const WinSalInstance *pInst = pSalData->mpInstance;
assert( !pInst || pSalData->mnAppThreadId == GetCurrentThreadId() );
if ( m_bForceRealTimer && m_bDirectTimeout )
if ( m_bSetTimerRunning )
{
m_bSetTimerRunning = false;
KillTimer( GetSalData()->mpInstance->mhComWnd, m_aWmTimerId );
}
m_bDirectTimeout = false;
const HANDLE hTimer = m_nTimerId;
......@@ -83,6 +86,7 @@ void WinSalTimer::ImplStart( sal_uLong nMS )
// with posted 0ms SAL_MSG_TIMER_CALLBACK messages
SetTimer( GetSalData()->mpInstance->mhComWnd, m_aWmTimerId,
USER_TIMER_MINIMUM, nullptr );
m_bSetTimerRunning = true;
}
// we don't need any wakeup message, as this code can just run in the
// main thread!
......@@ -92,6 +96,7 @@ WinSalTimer::WinSalTimer()
: m_nTimerId( nullptr )
, m_bDirectTimeout( false )
, m_bForceRealTimer( false )
, m_bSetTimerRunning( false )
{
}
......@@ -183,9 +188,11 @@ void WinSalTimer::SetForceRealTimer( const bool bVal )
void WinSalTimer::ImplHandle_WM_TIMER( const WPARAM aWPARAM )
{
assert( m_aWmTimerId == aWPARAM );
if ( !(m_aWmTimerId == aWPARAM && m_bDirectTimeout && m_bForceRealTimer) )
if ( !(m_aWmTimerId == aWPARAM && m_bSetTimerRunning) )
return;
m_bSetTimerRunning = false;
KillTimer( GetSalData()->mpInstance->mhComWnd, m_aWmTimerId );
ImplHandleElapsedTimer();
}
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment