From 7da74973b5f2303997e65eeac1baa8ccb8139164 Mon Sep 17 00:00:00 2001 From: J-P Nurmi <jpnurmi@digia.com> Date: Tue, 11 Jun 2013 17:53:40 +0200 Subject: [PATCH] Mac: respect scrollbar style changes Task-number: QTBUG-31537 Change-Id: I670730934a48655f65df4f2be44e6ce8fa6bbdf7 Reviewed-by: Gabriel de Dietrich <gabriel.dedietrich@digia.com> --- src/private/ScrollViewHelper.qml | 16 ++++++++++++++-- src/private/qquickstyleitem.cpp | 9 +++++++-- src/private/qquickstyleitem_p.h | 5 +++++ src/styles/Desktop/ScrollViewStyle.qml | 2 +- 4 files changed, 27 insertions(+), 5 deletions(-) diff --git a/src/private/ScrollViewHelper.qml b/src/private/ScrollViewHelper.qml index 9e8e78d61..c992de92c 100644 --- a/src/private/ScrollViewHelper.qml +++ b/src/private/ScrollViewHelper.qml @@ -121,7 +121,7 @@ Item { ScrollBar { id: hscrollbar - property bool isTransient: !!__panel && __panel.styleHint("transientScrollBars") + property bool isTransient: !!__panel && __panel.transient property bool active: !!__panel && (__panel.sunken || __panel.activeControl != "none") orientation: Qt.Horizontal visible: contentWidth > availableWidth @@ -145,6 +145,12 @@ Item { value: vscrollbar.active when: hscrollbar.isTransient } + Binding { + target: hscrollbar.__panel + property: "visible" + value: true + when: !hscrollbar.isTransient + } function flash() { if (hscrollbar.isTransient) { hscrollbar.__panel.on = true @@ -155,7 +161,7 @@ Item { ScrollBar { id: vscrollbar - property bool isTransient: !!__panel && __panel.styleHint("transientScrollBars") + property bool isTransient: !!__panel && __panel.transient property bool active: !!__panel && (__panel.sunken || __panel.activeControl !== "none") orientation: Qt.Vertical visible: contentHeight > availableHeight @@ -179,6 +185,12 @@ Item { value: hscrollbar.active when: vscrollbar.isTransient } + Binding { + target: vscrollbar.__panel + property: "visible" + value: true + when: !vscrollbar.isTransient + } function flash() { if (vscrollbar.isTransient) { vscrollbar.__panel.on = true diff --git a/src/private/qquickstyleitem.cpp b/src/private/qquickstyleitem.cpp index 115841adf..f9809155f 100644 --- a/src/private/qquickstyleitem.cpp +++ b/src/private/qquickstyleitem.cpp @@ -122,6 +122,7 @@ QQuickStyleItem::QQuickStyleItem(QQuickItem *parent) m_hover(false), m_on(false), m_horizontal(true), + m_transient(false), m_sharedWidget(false), m_minimum(0), m_maximum(100), @@ -153,6 +154,7 @@ QQuickStyleItem::QQuickStyleItem(QQuickItem *parent) connect(this, SIGNAL(minimumChanged()), this, SLOT(updateItem())); connect(this, SIGNAL(valueChanged()), this, SLOT(updateItem())); connect(this, SIGNAL(horizontalChanged()), this, SLOT(updateItem())); + connect(this, SIGNAL(transientChanged()), this, SLOT(updateItem())); connect(this, SIGNAL(activeControlChanged()), this, SLOT(updateItem())); connect(this, SIGNAL(hasFocusChanged()), this, SLOT(updateItem())); connect(this, SIGNAL(activeControlChanged()), this, SLOT(updateItem())); @@ -606,6 +608,8 @@ void QQuickStyleItem::initStyleOption() opt->sliderValue = value(); opt->subControls = QStyle::SC_All; + + setTransient(qApp->style()->styleHint(QStyle::SH_ScrollBar_Transient, m_styleoption)); break; } default: @@ -962,8 +966,6 @@ QVariant QQuickStyleItem::styleHint(const QString &metric) return qApp->style()->styleHint(QStyle::SH_ScrollBar_LeftClickAbsolutePosition); else if (metric == "activateItemOnSingleClick") return qApp->style()->styleHint(QStyle::SH_ItemView_ActivateItemOnSingleClick); - else if (metric == "transientScrollBars") - return qApp->style()->styleHint(QStyle::SH_ScrollBar_Transient, m_styleoption); return 0; // Add SH_Menu_SpaceActivatesItem, SH_Menu_SubMenuPopupDelay @@ -1446,6 +1448,9 @@ bool QQuickStyleItem::event(QEvent *ev) if (ev->type() == QEvent::StyleAnimationUpdate) { polish(); return true; + } else if (ev->type() == QEvent::StyleChange) { + if (m_itemType == ScrollBar) + initStyleOption(); } return QQuickItem::event(ev); } diff --git a/src/private/qquickstyleitem_p.h b/src/private/qquickstyleitem_p.h index eee9e6e51..cfe9866eb 100644 --- a/src/private/qquickstyleitem_p.h +++ b/src/private/qquickstyleitem_p.h @@ -62,6 +62,7 @@ class QQuickStyleItem: public QQuickItem Q_PROPERTY( bool on READ on WRITE setOn NOTIFY onChanged) Q_PROPERTY( bool hover READ hover WRITE setHover NOTIFY hoverChanged) Q_PROPERTY( bool horizontal READ horizontal WRITE setHorizontal NOTIFY horizontalChanged) + Q_PROPERTY( bool transient READ transient WRITE setTransient NOTIFY transientChanged) Q_PROPERTY( QString elementType READ elementType WRITE setElementType NOTIFY elementTypeChanged) Q_PROPERTY( QString text READ text WRITE setText NOTIFY textChanged) @@ -130,6 +131,7 @@ public: bool on() const { return m_on; } bool hover() const { return m_hover; } bool horizontal() const { return m_horizontal; } + bool transient() const { return m_transient; } int minimum() const { return m_minimum; } int maximum() const { return m_maximum; } @@ -153,6 +155,7 @@ public: void setOn(bool on) { if (m_on != on) {m_on = on ; emit onChanged();}} void setHover(bool hover) { if (m_hover != hover) {m_hover = hover ; emit hoverChanged();}} void setHorizontal(bool horizontal) { if (m_horizontal != horizontal) {m_horizontal = horizontal; emit horizontalChanged();}} + void setTransient(bool transient) { if (m_transient != transient) {m_transient = transient; emit transientChanged();}} void setMinimum(int minimum) { if (m_minimum!= minimum) {m_minimum = minimum; emit minimumChanged();}} void setMaximum(int maximum) { if (m_maximum != maximum) {m_maximum = maximum; emit maximumChanged();}} void setValue(int value) { if (m_value!= value) {m_value = value; emit valueChanged();}} @@ -198,6 +201,7 @@ Q_SIGNALS: void onChanged(); void hoverChanged(); void horizontalChanged(); + void transientChanged(); void minimumChanged(); void maximumChanged(); void stepChanged(); @@ -241,6 +245,7 @@ protected: bool m_hover; bool m_on; bool m_horizontal; + bool m_transient; bool m_sharedWidget; int m_minimum; diff --git a/src/styles/Desktop/ScrollViewStyle.qml b/src/styles/Desktop/ScrollViewStyle.qml index deddc354a..203a9ec4b 100644 --- a/src/styles/Desktop/ScrollViewStyle.qml +++ b/src/styles/Desktop/ScrollViewStyle.qml @@ -69,7 +69,7 @@ Style { readonly property bool scrollToClickedPosition: __styleitem.styleHint("scrollToClickPosition") !== 0 property Component __scrollbar: StyleItem { - readonly property bool isTransient: __styleitem.styleHint("transientScrollBars") + readonly property bool isTransient: __styleitem.parent && __styleitem.transient anchors.fill:parent elementType: "scrollbar" hover: activeControl != "none" -- GitLab