Stop sample previews on mouse release or browser focus loss (#5764)

Stop previews on mouse up and focus loss.
This commit is contained in:
Spekular
2020-11-08 14:09:58 +01:00
committed by GitHub
parent a6e3958c93
commit 437172a542
2 changed files with 13 additions and 16 deletions

View File

@@ -108,6 +108,7 @@ protected:
void keyPressEvent( QKeyEvent * ke ) override;
void keyReleaseEvent( QKeyEvent * ke ) override;
void hideEvent( QHideEvent * he ) override;
void focusOutEvent( QFocusEvent * fe ) override;
private:

View File

@@ -433,6 +433,16 @@ void FileBrowserTreeWidget::hideEvent(QHideEvent* he)
void FileBrowserTreeWidget::focusOutEvent(QFocusEvent* fe)
{
// Cancel previews when the user clicks outside the browser
stopPreview();
QTreeWidget::focusOutEvent(fe);
}
void FileBrowserTreeWidget::contextMenuEvent(QContextMenuEvent * e )
{
FileItem * file = dynamic_cast<FileItem *>( itemAt( e->pos() ) );
@@ -674,22 +684,8 @@ void FileBrowserTreeWidget::mouseReleaseEvent(QMouseEvent * me )
QMutexLocker previewLocker(&m_pphMutex);
if (m_previewPlayHandle != nullptr)
{
// If less than 3 seconds remain of the sample, we don't
// stop them if the user releases mouse-button...
if (m_previewPlayHandle->type() == PlayHandle::TypeSamplePlayHandle)
{
SamplePlayHandle* s = dynamic_cast<SamplePlayHandle*>(m_previewPlayHandle);
auto second = static_cast<f_cnt_t>(Engine::mixer()->processingSampleRate());
if (s && s->totalFrames() - s->framesDone() <= second * 3)
{
s->setDoneMayReturnTrue(true);
}
else { stopPreview(); }
}
else { stopPreview(); }
}
//TODO: User setting to allow samples to play until completion instead
if (m_previewPlayHandle != nullptr) { stopPreview(); }
}