From 193beda2bc22d0ef3e0d835ab248b1b29937c3ed Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tomasz=20Wo=C5=BAniak?= Date: Mon, 5 Oct 2015 00:47:26 +0200 Subject: [PATCH] handle case when user seeks past the slider's end --- src/libtomahawk/widgets/SeekSlider.cpp | 20 ++++++++++++++++++++ src/libtomahawk/widgets/SeekSlider.h | 2 ++ 2 files changed, 22 insertions(+) diff --git a/src/libtomahawk/widgets/SeekSlider.cpp b/src/libtomahawk/widgets/SeekSlider.cpp index 2e6531f05..8cf544e22 100644 --- a/src/libtomahawk/widgets/SeekSlider.cpp +++ b/src/libtomahawk/widgets/SeekSlider.cpp @@ -33,6 +33,7 @@ SeekSlider::SeekSlider( QWidget* parent ) , TomahawkUtils::DpiScaler( this ) , m_timeLine( 0 ) , m_acceptWheelEvents( true ) + , m_isScrubbing( false ) { setStyleSheet( QString( "QSlider::groove:horizontal {" @@ -72,6 +73,8 @@ SeekSlider::mousePressEvent( QMouseEvent* event ) { if ( event->button() == Qt::LeftButton ) { + m_isScrubbing = true; + QMouseEvent eventSwap( QEvent::MouseButtonRelease, event->pos(), event->globalPos(), Qt::MidButton, Qt::MidButton, event->modifiers() ); QSlider::mousePressEvent( &eventSwap ); } @@ -107,3 +110,20 @@ SeekSlider::wheelEvent( QWheelEvent* event ) } event->ignore(); } + + +void +SeekSlider::mouseMoveEvent( QMouseEvent* event ) +{ + if (!m_isScrubbing) + return; + + // disable further scrubbing when we're past the slider's right margin + if (event->pos().x() > width()) + { + m_isScrubbing = false; + return; + } + + QSlider::mouseMoveEvent(event); +} diff --git a/src/libtomahawk/widgets/SeekSlider.h b/src/libtomahawk/widgets/SeekSlider.h index a296b1d54..12ecfaac5 100644 --- a/src/libtomahawk/widgets/SeekSlider.h +++ b/src/libtomahawk/widgets/SeekSlider.h @@ -44,11 +44,13 @@ public slots: protected: void mousePressEvent( QMouseEvent* event ); + void mouseMoveEvent( QMouseEvent* event ); void wheelEvent( QWheelEvent* event ); private: QTimeLine* m_timeLine; bool m_acceptWheelEvents; + bool m_isScrubbing; }; #endif // SEEKSLIDER_H