Mac: disable transient scrollbar animations for non-QScrollBars
authorJ-P Nurmi <jpnurmi@digia.com>
Tue, 11 Dec 2012 14:44:14 +0000 (15:44 +0100)
committerThe Qt Project <gerrit-noreply@qt-project.org>
Tue, 11 Dec 2012 17:34:19 +0000 (18:34 +0100)
Task-number: QTBUG-28389
Task-number: QTBUG-28380
Change-Id: I91edd9c8aba60118d722bbf9ad5b85f994398823
Reviewed-by: J-P Nurmi <jpnurmi@digia.com>
Reviewed-by: Gabriel de Dietrich <gabriel.dedietrich@digia.com>
src/widgets/styles/qmacstyle_mac.mm
src/widgets/widgets/qabstractscrollarea.cpp
src/widgets/widgets/qscrollbar.cpp

index 649e7f2..b6adc38 100644 (file)
@@ -2706,6 +2706,10 @@ int QMacStyle::styleHint(StyleHint sh, const QStyleOption *opt, const QWidget *w
         ret = false;
         break;
     case SH_ScrollBar_Transient:
+        if (!qobject_cast<const QScrollBar*>(w)) {
+            ret = false;
+            break;
+        }
         ret = QSysInfo::MacintoshVersion >= QSysInfo::MV_10_7;
 #if MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_7
     if (QSysInfo::MacintoshVersion >= QSysInfo::MV_10_7)
@@ -4906,7 +4910,7 @@ void QMacStyle::drawComplexControl(ComplexControl cc, const QStyleOptionComplex
             }
 
 #if MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_7
-            if (cc == CC_ScrollBar && proxy()->styleHint(SH_ScrollBar_Transient)) {
+            if (cc == CC_ScrollBar && proxy()->styleHint(SH_ScrollBar_Transient, 0, widget)) {
                 bool wasActive = false;
                 CGFloat opacity = 1.0;
                 CGFloat expandScale = 1.0;
index 2a3bdb0..ae363fe 100644 (file)
@@ -490,7 +490,7 @@ void QAbstractScrollAreaPrivate::layoutChildren()
             horizontalScrollBarRect.adjust(vsbExt, 0, 0, 0);
 #endif
 #ifdef Q_OS_MAC
-        if (!hasCornerWidget && QSysInfo::macVersion() >= QSysInfo::MV_10_8 && q->style()->styleHint(QStyle::SH_ScrollBar_Transient))
+        if (!hasCornerWidget && QSysInfo::macVersion() >= QSysInfo::MV_10_8 && q->style()->styleHint(QStyle::SH_ScrollBar_Transient, 0, hbar))
             horizontalScrollBarRect.adjust(0, 0, cornerOffset.x(), 0);
 #endif
         scrollBarContainers[Qt::Horizontal]->setGeometry(QStyle::visualRect(opt.direction, opt.rect, horizontalScrollBarRect));
@@ -500,7 +500,7 @@ void QAbstractScrollAreaPrivate::layoutChildren()
     if (needv) {
         QRect verticalScrollBarRect  (QPoint(cornerPoint.x(), controlsRect.top() + hHeaderBottom),  QPoint(controlsRect.right(), cornerPoint.y() - 1));
 #ifdef Q_OS_MAC
-        if (!hasCornerWidget && QSysInfo::macVersion() >= QSysInfo::MV_10_8 && q->style()->styleHint(QStyle::SH_ScrollBar_Transient))
+        if (!hasCornerWidget && QSysInfo::macVersion() >= QSysInfo::MV_10_8 && q->style()->styleHint(QStyle::SH_ScrollBar_Transient, 0, vbar))
             verticalScrollBarRect.adjust(0, 0, 0, cornerOffset.y());
 #endif
         scrollBarContainers[Qt::Vertical]->setGeometry(QStyle::visualRect(opt.direction, opt.rect, verticalScrollBarRect));
index d59d7cd..491f54e 100644 (file)
@@ -235,7 +235,7 @@ void QScrollBarPrivate::setTransient(bool value)
     if (transient != value) {
         transient = value;
         if (q->isVisible()) {
-            if (q->style()->styleHint(QStyle::SH_ScrollBar_Transient))
+            if (q->style()->styleHint(QStyle::SH_ScrollBar_Transient, 0, q))
                 q->update();
         } else if (!transient) {
             q->show();
@@ -246,7 +246,7 @@ void QScrollBarPrivate::setTransient(bool value)
 void QScrollBarPrivate::flash()
 {
     Q_Q(QScrollBar);
-    if (!flashed && q->style()->styleHint(QStyle::SH_ScrollBar_Transient)) {
+    if (!flashed && q->style()->styleHint(QStyle::SH_ScrollBar_Transient, 0, q)) {
         flashed = true;
         q->show();
     }
@@ -384,7 +384,7 @@ void QScrollBarPrivate::init()
     invertedControls = true;
     pressedControl = hoverControl = QStyle::SC_None;
     pointerOutsidePressedControl = false;
-    transient = q->style()->styleHint(QStyle::SH_ScrollBar_Transient);
+    transient = q->style()->styleHint(QStyle::SH_ScrollBar_Transient, 0, q);
     flashed = false;
     q->setFocusPolicy(Qt::NoFocus);
     QSizePolicy sp(QSizePolicy::Minimum, QSizePolicy::Fixed, QSizePolicy::Slider);
@@ -484,7 +484,7 @@ bool QScrollBar::event(QEvent *event)
         d_func()->updateHoverControl(he->pos());
         break;
     case QEvent::StyleChange:
-        d_func()->setTransient(style()->styleHint(QStyle::SH_ScrollBar_Transient));
+        d_func()->setTransient(style()->styleHint(QStyle::SH_ScrollBar_Transient, 0, this));
         break;
     default:
         break;
@@ -531,7 +531,7 @@ void QScrollBar::paintEvent(QPaintEvent *)
         opt.activeSubControls = (QStyle::SubControl)d->hoverControl;
     }
     style()->drawComplexControl(QStyle::CC_ScrollBar, &opt, &p, this);
-    if (d->flashed && style()->styleHint(QStyle::SH_ScrollBar_Transient)) {
+    if (d->flashed && style()->styleHint(QStyle::SH_ScrollBar_Transient, 0, this)) {
         d->flashed = false;
         update();
     }