summaryrefslogtreecommitdiffstats
path: root/src/gui/styles
diff options
context:
space:
mode:
authorSami Merila <sami.merila@nokia.com>2010-11-03 07:40:16 (GMT)
committerSami Merila <sami.merila@nokia.com>2010-11-03 07:40:16 (GMT)
commit6382a038d6394135a4dc2d8e1e47133d9ea0b659 (patch)
tree01fd0cfbfd3a19f20051732d91dfce5e718a45ce /src/gui/styles
parent8e2b95b1115bc07f81d0fa22cc2929bb28d3e9bb (diff)
downloadQt-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.cpp22
-rw-r--r--src/gui/styles/qs60style_p.h1
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