From 8eab9cbce2014ffc6186dd6b6fb73da85956ee86 Mon Sep 17 00:00:00 2001 From: Giuseppe D'Angelo Date: Thu, 2 Feb 2012 17:48:31 +0000 Subject: [PATCH] Make QAbstractItemView::itemOptions properly initialize a V4 option Since the QStyleOptionViewItem now contains the V4 fields, they must be properly initialized when calling itemOptions. Change-Id: I1346e6887d2d9a7eb29cc458fa4eede0b815001c Reviewed-by: Lars Knoll Reviewed-by: Stephen Kelly --- src/widgets/itemviews/qabstractitemview.cpp | 53 ++++++++++----------- 1 file changed, 26 insertions(+), 27 deletions(-) diff --git a/src/widgets/itemviews/qabstractitemview.cpp b/src/widgets/itemviews/qabstractitemview.cpp index 98a17a5178..ff3de308e5 100644 --- a/src/widgets/itemviews/qabstractitemview.cpp +++ b/src/widgets/itemviews/qabstractitemview.cpp @@ -3608,38 +3608,37 @@ void QAbstractItemView::startDrag(Qt::DropActions supportedActions) QStyleOptionViewItem QAbstractItemView::viewOptions() const { Q_D(const QAbstractItemView); - QStyleOptionViewItem option; - option.init(this); - option.state &= ~QStyle::State_MouseOver; - option.font = font(); - -#ifndef Q_WS_MAC - // On mac the focus appearance follows window activation - // not widget activation - if (!hasFocus()) - option.state &= ~QStyle::State_Active; -#endif - - option.state &= ~QStyle::State_HasFocus; - if (d->iconSize.isValid()) { - option.decorationSize = d->iconSize; - } else { - int pm = style()->pixelMetric(QStyle::PM_SmallIconSize, 0, this); - option.decorationSize = QSize(pm, pm); - } - option.decorationPosition = QStyleOptionViewItem::Left; - option.decorationAlignment = Qt::AlignCenter; - option.displayAlignment = Qt::AlignLeft|Qt::AlignVCenter; - option.textElideMode = d->textElideMode; - option.rect = QRect(); - option.showDecorationSelected = style()->styleHint(QStyle::SH_ItemView_ShowDecorationSelected, 0, this); - return option; + return d->viewOptionsV4(); } QStyleOptionViewItemV4 QAbstractItemViewPrivate::viewOptionsV4() const { Q_Q(const QAbstractItemView); - QStyleOptionViewItemV4 option = q->viewOptions(); + QStyleOptionViewItemV4 option; + option.init(q); + option.state &= ~QStyle::State_MouseOver; + option.font = q->font(); + +#ifndef Q_WS_MAC + // On mac the focus appearance follows window activation + // not widget activation + if (!q->hasFocus()) + option.state &= ~QStyle::State_Active; +#endif + + option.state &= ~QStyle::State_HasFocus; + if (iconSize.isValid()) { + option.decorationSize = iconSize; + } else { + int pm = q->style()->pixelMetric(QStyle::PM_SmallIconSize, 0, q); + option.decorationSize = QSize(pm, pm); + } + option.decorationPosition = QStyleOptionViewItem::Left; + option.decorationAlignment = Qt::AlignCenter; + option.displayAlignment = Qt::AlignLeft|Qt::AlignVCenter; + option.textElideMode = textElideMode; + option.rect = QRect(); + option.showDecorationSelected = q->style()->styleHint(QStyle::SH_ItemView_ShowDecorationSelected, 0, q); if (wrapItemText) option.features = QStyleOptionViewItemV2::WrapText; option.locale = q->locale();