allow setWatchedItem( nullptr )

This commit is contained in:
Uwe Rathmann 2019-05-16 13:57:55 +02:00
parent 3426e78ed4
commit aea6f829ae

View File

@ -192,6 +192,9 @@ QskGestureRecognizer::~QskGestureRecognizer()
void QskGestureRecognizer::setWatchedItem( QQuickItem* item ) void QskGestureRecognizer::setWatchedItem( QQuickItem* item )
{ {
if ( m_data->watchedItem )
reset();
m_data->watchedItem = item; m_data->watchedItem = item;
} }
@ -435,12 +438,18 @@ void QskGestureRecognizer::reject()
reset(); reset();
auto watchedItem = m_data->watchedItem;
if ( watchedItem == nullptr )
return;
const auto window = watchedItem->window();
if ( window == nullptr )
return;
m_data->isReplayingEvents = true; m_data->isReplayingEvents = true;
const auto window = m_data->watchedItem->window(); if ( window->mouseGrabberItem() == watchedItem )
watchedItem->ungrabMouse();
if ( window->mouseGrabberItem() == m_data->watchedItem )
m_data->watchedItem->ungrabMouse();
if ( !events.isEmpty() && if ( !events.isEmpty() &&
( events[ 0 ]->type() == QEvent::MouseButtonPress ) ) ( events[ 0 ]->type() == QEvent::MouseButtonPress ) )
@ -481,12 +490,15 @@ void QskGestureRecognizer::reset()
{ {
qskTimerTable->stopTimer( this ); qskTimerTable->stopTimer( this );
m_data->watchedItem->setKeepMouseGrab( false ); if ( auto watchedItem = m_data->watchedItem )
if ( auto window = m_data->watchedItem->window() )
{ {
if ( window->mouseGrabberItem() == m_data->watchedItem ) watchedItem->setKeepMouseGrab( false );
m_data->watchedItem->ungrabMouse();
if ( auto window = watchedItem->window() )
{
if ( window->mouseGrabberItem() == m_data->watchedItem )
watchedItem->ungrabMouse();
}
} }
m_data->pendingEvents.reset(); m_data->pendingEvents.reset();