Skip to content

Commit

Permalink
always sending ( ot posting ) animator events. Otherwise we might be one
Browse files Browse the repository at this point in the history
updateNode cycle too late
  • Loading branch information
uwerat committed Oct 30, 2023
1 parent b5fb6d8 commit 3b4f167
Showing 1 changed file with 22 additions and 26 deletions.
48 changes: 22 additions & 26 deletions src/controls/QskHintAnimator.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -76,20 +76,28 @@ static inline QVariant qskAligned05( const QVariant& value )

#endif

static inline bool qskCheckReceiverThread( const QObject* receiver )
static inline void qskSendAnimatorEvent(
const QskAspect aspect, int index, bool on, QObject* receiver )
{
/*
QskInputPanelSkinlet changes the skin state, what leads to
sending events from the wrong thread. Until we have fixed it
let's block sending the event to avoid running into assertions
in QCoreApplication::sendEvent
*/

const QThread* thread = receiver->thread();
if ( thread == nullptr )
return true;
const auto state = on ? QskAnimatorEvent::Started : QskAnimatorEvent::Terminated;

return ( thread == QThread::currentThread() );
const auto thread = receiver->thread();
if ( thread && ( thread != QThread::currentThread() ) )
{
/*
QskInputPanelSkinlet changes the skin state, what leads to
sending events from the wrong thread. We can't use
QCoreApplication::sendEvent then, TODO ...
*/

auto event = new QskAnimatorEvent( aspect, index, state );
QCoreApplication::postEvent( receiver, event );
}
else
{
QskAnimatorEvent event( aspect, index, state );
QCoreApplication::sendEvent( receiver, &event );
}
}

QskHintAnimator::QskHintAnimator() noexcept
Expand Down Expand Up @@ -338,11 +346,7 @@ void QskHintAnimatorTable::start( QskControl* control,

animator->start();

if ( qskCheckReceiverThread( control ) )
{
QskAnimatorEvent event( aspect, index, QskAnimatorEvent::Started );
QCoreApplication::sendEvent( control, &event );
}
qskSendAnimatorEvent( aspect, index, true, control );
}

const QskHintAnimator* QskHintAnimatorTable::animator( QskAspect aspect, int index ) const
Expand Down Expand Up @@ -390,15 +394,7 @@ bool QskHintAnimatorTable::cleanup()
it = animators.erase( it );

if ( control )
{
if ( qskCheckReceiverThread( control ) )
{
auto event = new QskAnimatorEvent(
aspect, index, QskAnimatorEvent::Terminated );

QCoreApplication::postEvent( control, event );
}
}
qskSendAnimatorEvent( aspect, index, false, control );
}
else
{
Expand Down

0 comments on commit 3b4f167

Please sign in to comment.