repaint();
}
-void SeekSlider::mouseReleaseEvent( QMouseEvent *event )
+void SeekSlider::processReleasedButton()
{
- event->accept();
+ if ( !isSliding && !isJumping ) return;
isSliding = false;
bool b_seekPending = seekLimitTimer->isActive();
seekLimitTimer->stop(); /* We're not sliding anymore: only last seek on release */
isJumping = false;
return;
}
- QSlider::mouseReleaseEvent( event );
if( b_seekPending && isEnabled() )
updatePos();
}
+void SeekSlider::mouseReleaseEvent( QMouseEvent *event )
+{
+ if ( event->button() != Qt::LeftButton && event->button() != Qt::MidButton )
+ {
+ QSlider::mouseReleaseEvent( event );
+ return;
+ }
+ event->accept();
+ processReleasedButton();
+}
+
void SeekSlider::mousePressEvent( QMouseEvent* event )
{
/* Right-click */
void SeekSlider::mouseMoveEvent( QMouseEvent *event )
{
+ if ( ! ( event->buttons() & ( Qt::LeftButton | Qt::MidButton ) ) )
+ {
+ /* Handle button release when mouserelease has been hijacked by popup */
+ processReleasedButton();
+ }
+
if ( !isEnabled() ) return event->accept();
if( isSliding )
}
}
-void SoundSlider::mouseReleaseEvent( QMouseEvent *event )
+void SoundSlider::processReleasedButton()
{
- if( event->button() != Qt::RightButton )
+ if( !b_mouseOutside && value() != i_oldvalue )
{
- if( !b_mouseOutside && value() != i_oldvalue )
- {
- emit sliderReleased();
- setValue( value() );
- emit sliderMoved( value() );
- }
- isSliding = false;
- b_mouseOutside = false;
+ emit sliderReleased();
+ setValue( value() );
+ emit sliderMoved( value() );
}
+ isSliding = false;
+ b_mouseOutside = false;
+}
+
+void SoundSlider::mouseReleaseEvent( QMouseEvent *event )
+{
+ if( event->button() != Qt::RightButton )
+ processReleasedButton();
}
void SoundSlider::mouseMoveEvent( QMouseEvent *event )
{
+ /* handle mouserelease hijacking */
+ if ( isSliding && ( event->buttons() & ~Qt::RightButton ) == Qt::NoButton )
+ processReleasedButton();
+
if( isSliding )
{
QRect rect( paddingL - 15, -1,
virtual QSize sizeHint() const;
+ void processReleasedButton();
bool isAnimationRunning() const;
qreal handleOpacity() const;
void setHandleOpacity( qreal opacity );
virtual void mouseMoveEvent( QMouseEvent * );
virtual void mouseReleaseEvent( QMouseEvent * );
+ void processReleasedButton();
+
private:
bool isSliding; /* Whether we are currently sliding by user action */
bool b_mouseOutside; /* Whether the mouse is outside or inside the Widget */