diff --git a/src/controls/QskSpinBox.cpp b/src/controls/QskSpinBox.cpp index 3789b055..46bd240c 100644 --- a/src/controls/QskSpinBox.cpp +++ b/src/controls/QskSpinBox.cpp @@ -60,6 +60,11 @@ class QskSpinBox::PrivateData { } + inline bool isActivatedByMouse() const + { + return this->repeatTimer.isActive() && ( this->key == Qt::Key_unknown ); + } + inline void setAutoRepeat( QskSpinBox* spinBox, qreal offset ) { this->autoRepeatIncrement = offset; @@ -294,7 +299,33 @@ void QskSpinBox::mousePressEvent( QMouseEvent* event ) void QskSpinBox::mouseReleaseEvent( QMouseEvent* ) { - m_data->setAutoRepeat( this, 0.0 ); + if ( m_data->isActivatedByMouse() ) + m_data->setAutoRepeat( this, 0.0 ); +} + +void QskSpinBox::mouseMoveEvent( QMouseEvent* event ) +{ + if ( m_data->isActivatedByMouse() ) + { + const auto subcontrol = buttonAt( this, qskMousePosition( event ) ); + + if ( m_data->autoRepeatIncrement >= 0.0 ) + { + if ( subcontrol != QskSpinBox::UpPanel ) + m_data->setAutoRepeat( this, 0.0 ); + } + else + { + if ( subcontrol != QskSpinBox::DownPanel ) + m_data->setAutoRepeat( this, 0.0 ); + } + } +} + +void QskSpinBox::mouseUngrabEvent() +{ + if ( m_data->isActivatedByMouse() ) + m_data->setAutoRepeat( this, 0.0 ); } void QskSpinBox::keyPressEvent( QKeyEvent* event ) diff --git a/src/controls/QskSpinBox.h b/src/controls/QskSpinBox.h index 3f09e337..6876c80b 100644 --- a/src/controls/QskSpinBox.h +++ b/src/controls/QskSpinBox.h @@ -95,7 +95,9 @@ class QSK_EXPORT QskSpinBox : public QskBoundedValueInput void timerEvent( QTimerEvent* ) override; void mouseReleaseEvent( QMouseEvent* ) override; + void mouseMoveEvent( QMouseEvent* ) override; void mousePressEvent( QMouseEvent* ) override; + void mouseUngrabEvent() override; void keyPressEvent( QKeyEvent* ) override; void keyReleaseEvent( QKeyEvent* ) override;