diff options
author | Sami Merila <sami.merila@nokia.com> | 2010-11-03 07:40:16 (GMT) |
---|---|---|
committer | Sami Merila <sami.merila@nokia.com> | 2010-11-03 07:40:16 (GMT) |
commit | 6382a038d6394135a4dc2d8e1e47133d9ea0b659 (patch) | |
tree | 01fd0cfbfd3a19f20051732d91dfce5e718a45ce /src/gui/styles | |
parent | 8e2b95b1115bc07f81d0fa22cc2929bb28d3e9bb (diff) | |
download | Qt-6382a038d6394135a4dc2d8e1e47133d9ea0b659.zip Qt-6382a038d6394135a4dc2d8e1e47133d9ea0b659.tar.gz Qt-6382a038d6394135a4dc2d8e1e47133d9ea0b659.tar.bz2 |
Qt/Symbian: QInputDialog layout and size are wrong
The QInputDialog with anything but QLineEdit as the input widget,
will show up as minimal size on device/emulator. Also, the dialog
looks bad since the widgets are deployed very close to the dialog
borders.
As a fix, layout will not get the size policy set on Symbian, but
the dialog itself is stretched to occupy screen width and thus, layout
grows to occupy the available size. Additionally, style will set layout
pixel metrics for dialogs larger than for other widgets, to avoid
the layout from putting widgets very close to dialog border.
Task-number: QTBUG-14331
Reviewed-by: Janne Anttila
Diffstat (limited to 'src/gui/styles')
-rw-r--r-- | src/gui/styles/qs60style.cpp | 22 | ||||
-rw-r--r-- | src/gui/styles/qs60style_p.h | 1 |
2 files changed, 21 insertions, 2 deletions
diff --git a/src/gui/styles/qs60style.cpp b/src/gui/styles/qs60style.cpp index d39a2ba..53ca28c 100644 --- a/src/gui/styles/qs60style.cpp +++ b/src/gui/styles/qs60style.cpp @@ -112,6 +112,8 @@ const short QS60StylePrivate::data[][MAX_PIXELMETRICS] = { // *** End of generated data *** }; +QSet<const QWidget *> *QS60StylePrivate::m_autoFillDisabledWidgets = 0; + const short *QS60StylePrivate::m_pmPointer = QS60StylePrivate::data[0]; // theme background texture @@ -152,6 +154,8 @@ const double KTabFontMul = 0.72; QS60StylePrivate::~QS60StylePrivate() { + delete m_autoFillDisabledWidgets; + m_autoFillDisabledWidgets = 0; clearCaches(); //deletes also background image deleteThemePalette(); #ifdef Q_WS_S60 @@ -2521,9 +2525,9 @@ int QS60Style::pixelMetric(PixelMetric metric, const QStyleOption *option, const metricValue = QS60StylePrivate::pixelMetric(PM_LayoutLeftMargin); } - if (widget && (metric == PM_LayoutTopMargin)) + if (widget && (metric == PM_LayoutTopMargin || metric == PM_LayoutLeftMargin || metric == PM_LayoutRightMargin)) if (widget->windowType() == Qt::Dialog) - //double the top layout margin for dialogs, it is very close to real value + //double the layout margins (except bottom) for dialogs, it is very close to real value //without having to define custom pixel metric metricValue *= 2; @@ -3184,6 +3188,13 @@ void QS60Style::polish(QWidget *widget) } d->setThemePalette(widget); d->setFont(widget); + + if (widget->autoFillBackground()) { + if (!d->m_autoFillDisabledWidgets) + d->m_autoFillDisabledWidgets = new QSet<const QWidget *>; + widget->setAutoFillBackground(false); + d->m_autoFillDisabledWidgets->insert(widget); + } } /*! @@ -3218,6 +3229,13 @@ void QS60Style::unpolish(QWidget *widget) if (widget) widget->setPalette(QPalette()); + + if (d->m_autoFillDisabledWidgets && + !d->m_autoFillDisabledWidgets->isEmpty() && + d->m_autoFillDisabledWidgets->contains(widget)) { + widget->setAutoFillBackground(true); + d->m_autoFillDisabledWidgets->remove(widget); + } #if defined(Q_WS_S60) && !defined(QT_NO_PROGRESSBAR) if (QProgressBar *bar = qobject_cast<QProgressBar *>(widget)) { diff --git a/src/gui/styles/qs60style_p.h b/src/gui/styles/qs60style_p.h index b46f75e..3d66c40 100644 --- a/src/gui/styles/qs60style_p.h +++ b/src/gui/styles/qs60style_p.h @@ -625,6 +625,7 @@ private: static qint64 m_webPaletteKey; static QPointer<QWidget> m_pressedWidget; + static QSet<const QWidget *> *m_autoFillDisabledWidgets; #ifdef Q_WS_S60 //list of progress bars having animation running |