diff --git a/src/libs/utils/transientscroll.cpp b/src/libs/utils/transientscroll.cpp index 1d3df1259d8..3a0a9153769 100644 --- a/src/libs/utils/transientscroll.cpp +++ b/src/libs/utils/transientscroll.cpp @@ -365,13 +365,23 @@ ScrollBar::~ScrollBar() void ScrollBar::flash() { - if (!d->flashed && style()->styleHint(QStyle::SH_ScrollBar_Transient, nullptr, this)) { + if (!style()->styleHint(QStyle::SH_ScrollBar_Transient, nullptr, this)) + return; + + if (!isEnabled()) { + d->flashed = false; + hide(); + return; + } + + if (!d->flashed) { d->flashed = true; if (!isVisible()) show(); else update(); } + if (!d->flashTimer) d->flashTimer = startTimer(0); } diff --git a/src/plugins/qmldesigner/components/timelineeditor/timelinewidget.cpp b/src/plugins/qmldesigner/components/timelineeditor/timelinewidget.cpp index f6e9a3ad27c..b05083ff054 100644 --- a/src/plugins/qmldesigner/components/timelineeditor/timelinewidget.cpp +++ b/src/plugins/qmldesigner/components/timelineeditor/timelinewidget.cpp @@ -538,12 +538,17 @@ void TimelineWidget::invalidateTimelinePosition(const QmlTimeline &timeline) void TimelineWidget::setupScrollbar(int min, int max, int current) { - bool b = m_scrollbar->blockSignals(true); - m_scrollbar->setRange(min, max); - m_scrollbar->setValue(current); - m_scrollbar->setSingleStep((max - min) / 10); - m_scrollbar->blockSignals(b); - m_scrollbar->flash(); + int singleStep = (max - min) / 10; + + if (m_scrollbar->minimum() != min || m_scrollbar->maximum() != max + || m_scrollbar->value() != current || m_scrollbar->singleStep() != singleStep) { + bool b = m_scrollbar->blockSignals(true); + m_scrollbar->setRange(min, max); + m_scrollbar->setValue(current); + m_scrollbar->setSingleStep(singleStep); + m_scrollbar->blockSignals(b); + m_scrollbar->flash(); + } } void TimelineWidget::setTimelineId(const QString &id) @@ -575,6 +580,7 @@ void TimelineWidget::setTimelineActive(bool b) m_toolbar->setVisible(true); m_graphicsView->setVisible(true); m_rulerView->setVisible(true); + m_scrollbar->setEnabled(true); // Set the transient scrollbar enabled to be able to flash it. m_scrollbar->setVisible(true); m_addButton->setVisible(false); m_onboardingContainer->setVisible(false); @@ -584,6 +590,8 @@ void TimelineWidget::setTimelineActive(bool b) m_toolbar->setVisible(false); m_graphicsView->setVisible(false); m_rulerView->setVisible(false); + m_scrollbar->setEnabled( + false); // Set the transient scrollbar disabled to prevent it from being flashed. m_scrollbar->setVisible(false); m_statusBar->clear(); m_addButton->setVisible(true); diff --git a/src/plugins/qmldesigner/components/transitioneditor/transitioneditorwidget.cpp b/src/plugins/qmldesigner/components/transitioneditor/transitioneditorwidget.cpp index 6cb9c285be7..235722e4c8f 100644 --- a/src/plugins/qmldesigner/components/transitioneditor/transitioneditorwidget.cpp +++ b/src/plugins/qmldesigner/components/transitioneditor/transitioneditorwidget.cpp @@ -231,6 +231,7 @@ void TransitionEditorWidget::setTransitionActive(bool b) m_toolbar->setVisible(true); m_graphicsView->setVisible(true); m_rulerView->setVisible(true); + m_scrollbar->setEnabled(true); // Set the transient scrollbar enabled to be able to flash it. m_scrollbar->setVisible(true); m_addButton->setVisible(false); m_onboardingContainer->setVisible(false); @@ -240,6 +241,8 @@ void TransitionEditorWidget::setTransitionActive(bool b) m_toolbar->setVisible(false); m_graphicsView->setVisible(false); m_rulerView->setVisible(false); + m_scrollbar->setEnabled( + false); // Set the transient scrollbar disabled to prevent it from being flashed. m_scrollbar->setVisible(false); m_addButton->setVisible(true); m_onboardingContainer->setVisible(true); @@ -378,12 +381,17 @@ TransitionEditorToolBar *TransitionEditorWidget::toolBar() const void TransitionEditorWidget::setupScrollbar(int min, int max, int current) { - bool b = m_scrollbar->blockSignals(true); - m_scrollbar->setMinimum(min); - m_scrollbar->setMaximum(max); - m_scrollbar->setValue(current); - m_scrollbar->setSingleStep((max - min) / 10); - m_scrollbar->blockSignals(b); + int singleStep = (max - min) / 10; + + if (m_scrollbar->minimum() != min || m_scrollbar->maximum() != max + || m_scrollbar->value() != current || m_scrollbar->singleStep() != singleStep) { + bool b = m_scrollbar->blockSignals(true); + m_scrollbar->setRange(min, max); + m_scrollbar->setValue(current); + m_scrollbar->setSingleStep(singleStep); + m_scrollbar->blockSignals(b); + m_scrollbar->flash(); + } } void TransitionEditorWidget::showEvent([[maybe_unused]] QShowEvent *event)