diff --git a/include/file_browser.h b/include/file_browser.h index 578034cd2..00339bce8 100644 --- a/include/file_browser.h +++ b/include/file_browser.h @@ -36,11 +36,13 @@ #ifdef QT4 #include +#include #else #include #include +#include #define cleanPath cleanDirPath @@ -129,6 +131,7 @@ private: QPoint m_pressPos; playHandle * m_previewPlayHandle; + QMutex m_pphMutex; } ; diff --git a/src/core/file_browser.cpp b/src/core/file_browser.cpp index 36d0dc3ac..f2a8cf4c0 100644 --- a/src/core/file_browser.cpp +++ b/src/core/file_browser.cpp @@ -451,7 +451,8 @@ listView::listView( QWidget * _parent ) : Q3ListView( _parent ), m_mousePressed( FALSE ), m_pressPos(), - m_previewPlayHandle( NULL ) + m_previewPlayHandle( NULL ), + m_pphMutex() { addColumn( tr( "Files" ) ); setTreeStepSize( 12 ); @@ -560,6 +561,10 @@ void listView::contentsMousePressEvent( QMouseEvent * _me ) fileItem * f = dynamic_cast( i ); if( f != NULL ) { + if( !m_pphMutex.tryLock() ) + { + return; + } if( m_previewPlayHandle != NULL ) { engine::getMixer()->removePlayHandle( @@ -595,6 +600,7 @@ void listView::contentsMousePressEvent( QMouseEvent * _me ) engine::getMixer()->addPlayHandle( m_previewPlayHandle ); } + m_pphMutex.unlock(); } } @@ -650,6 +656,11 @@ void listView::contentsMouseMoveEvent( QMouseEvent * _me ) void listView::contentsMouseReleaseEvent( QMouseEvent * _me ) { + if( !m_pphMutex.tryLock() ) + { + return; + } + m_mousePressed = FALSE; if( m_previewPlayHandle != NULL ) { @@ -665,12 +676,14 @@ void listView::contentsMouseReleaseEvent( QMouseEvent * _me ) { s->setDoneMayReturnTrue( TRUE ); m_previewPlayHandle = NULL; + m_pphMutex.unlock(); return; } } engine::getMixer()->removePlayHandle( m_previewPlayHandle ); m_previewPlayHandle = NULL; } + m_pphMutex.unlock(); }