diff --git a/src/private/ScrollViewHelper.qml b/src/private/ScrollViewHelper.qml index 9e8e78d61245eff1ace72b9841aaa49f02ebddaa..c992de92ce432d9bc26c7349d0419a8cac3361ac 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 115841adf04076c8998e56a867c1f62ca4d603f6..f9809155f63acc8c731ebe484bab4cc8dab0bbfd 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 eee9e6e51f78fc20f6e66697f2ffefc2a0a775f0..cfe9866ebdb14592ffd8040270f369212d631270 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 deddc354a6ea940322f02e5cfcd1372b98ac6256..203a9ec4b7b5f583c9c7f951fa9e96a469b7faf1 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"