Kaydet (Commit) 6d7191a9 authored tarafından Jan-Marek Glogowski's avatar Jan-Marek Glogowski

tdf#112931 always signal AllUserEventsProcessed

If the last user event triggers a nested event loop, there is
no event in the nested loop, but AllUserEventsProcessed will
not be signaled, resulting in a busy loop in the gtk backend.

So just always signal AllUserEventsProcessed, if it was not
yet signaled.

While at it catch and std::abort on uncaught exceptions and fix
the default to have been signaled, so we won't signal on an
empty list on first run.

Change-Id: I480da906d87d3b95ba30b4c18420d2e20ffb5b2e
Reviewed-on: https://gerrit.libreoffice.org/43282Tested-by: 's avatarJenkins <ci@libreoffice.org>
Reviewed-by: 's avatarJan-Marek Glogowski <glogow@fbihome.de>
üst a3a89fc8
......@@ -23,7 +23,7 @@
#include <algorithm>
SalUserEventList::SalUserEventList()
: m_bAllUserEventProcessedSignaled( false )
: m_bAllUserEventProcessedSignaled( true )
{
}
......@@ -78,16 +78,26 @@ bool SalUserEventList::DispatchUserEvents( bool bHandleAllCurrentEvents )
}
if ( isFrameAlive( aEvent.m_pFrame ) )
ProcessEvent( aEvent );
{
try
{
ProcessEvent( aEvent );
}
catch (...)
{
SAL_WARN( "vcl", "Uncaught exception during ProcessEvent!" );
std::abort();
}
}
}
while( true );
}
osl::MutexGuard aGuard( m_aUserEventsMutex );
if ( !m_bAllUserEventProcessedSignaled && !HasUserEvents() )
{
m_bAllUserEventProcessedSignaled = true;
TriggerAllUserEventsProcessed();
}
osl::MutexGuard aGuard( m_aUserEventsMutex );
if ( !m_bAllUserEventProcessedSignaled && !HasUserEvents() )
{
m_bAllUserEventProcessedSignaled = true;
TriggerAllUserEventsProcessed();
}
return bWasEvent;
......@@ -115,7 +125,7 @@ bool SalUserEventList::RemoveEvent( SalFrame* pFrame, void* pData, SalEvent nEve
}
}
if ( bResult && !m_bAllUserEventProcessedSignaled && !HasUserEvents() )
if ( !m_bAllUserEventProcessedSignaled && !HasUserEvents() )
{
m_bAllUserEventProcessedSignaled = true;
TriggerAllUserEventsProcessed();
......
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