Bypass crash with Polyester-style

The Polyester style crashes when drawing a header where the
parent widget is 0.

BUG: 296453
FIXED-IN: 4.8.2
This commit is contained in:
Peter Penz 2012-03-20 21:03:38 +01:00
parent 03a65da80a
commit 4815fbd00b
2 changed files with 9 additions and 4 deletions

View file

@ -141,7 +141,7 @@ void KItemListHeader::paint(QPainter* painter, const QStyleOptionGraphicsItem* o
foreach (const QByteArray& role, m_visibleRoles) {
const qreal roleWidth = m_visibleRolesWidths.value(role);
const QRectF rect(x, 0, roleWidth, size().height());
paintRole(painter, role, rect, orderIndex);
paintRole(painter, role, rect, orderIndex, widget);
x += roleWidth;
++orderIndex;
}
@ -339,7 +339,8 @@ void KItemListHeader::slotSortOrderChanged(Qt::SortOrder current, Qt::SortOrder
void KItemListHeader::paintRole(QPainter* painter,
const QByteArray& role,
const QRectF& rect,
int orderIndex) const
int orderIndex,
QWidget* widget) const
{
// The following code is based on the code from QHeaderView::paintSection().
// Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies).
@ -378,7 +379,7 @@ void KItemListHeader::paintRole(QPainter* painter,
option.selectedPosition = QStyleOptionHeader::NotAdjacent;
option.text = m_model->roleDescription(role);
style()->drawControl(QStyle::CE_Header, &option, painter);
style()->drawControl(QStyle::CE_Header, &option, painter, widget);
}
void KItemListHeader::updatePressedRoleIndex(const QPointF& pos)

View file

@ -94,7 +94,11 @@ private slots:
void slotSortOrderChanged(Qt::SortOrder current, Qt::SortOrder previous);
private:
void paintRole(QPainter* painter, const QByteArray& role, const QRectF& rect, int orderIndex) const;
void paintRole(QPainter* painter,
const QByteArray& role,
const QRectF& rect,
int orderIndex,
QWidget* widget = 0) const;
void updatePressedRoleIndex(const QPointF& pos);
void updateHoveredRoleIndex(const QPointF& pos);