summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/widgets/dialogs/qfontdialog.cpp18
-rw-r--r--tests/auto/widgets/dialogs/qfontdialog/tst_qfontdialog.cpp32
2 files changed, 42 insertions, 8 deletions
diff --git a/src/widgets/dialogs/qfontdialog.cpp b/src/widgets/dialogs/qfontdialog.cpp
index 94e96a52c5..5a68bfbc66 100644
--- a/src/widgets/dialogs/qfontdialog.cpp
+++ b/src/widgets/dialogs/qfontdialog.cpp
@@ -256,8 +256,10 @@ void QFontDialogPrivate::init()
}
updateFamilies();
- if (familyList->count() != 0)
+ if (familyList->count() != 0) {
familyList->setCurrentItem(0);
+ sizeList->setCurrentItem(0);
+ }
// grid layout
QGridLayout *mainGrid = new QGridLayout(q);
@@ -621,16 +623,13 @@ void QFontDialogPrivate::updateSizes()
QStringList str_sizes;
for(QList<int>::const_iterator it = sizes.constBegin(); it != sizes.constEnd(); ++it) {
str_sizes.append(QString::number(*it));
- if (current == -1 && *it >= size)
+ if (current == -1 && *it == size)
current = i;
++i;
}
sizeList->model()->setStringList(str_sizes);
- if (current == -1) {
- // we request a size bigger than the ones in the list, select the biggest one
- current = sizeList->count() - 1;
- }
- sizeList->setCurrentItem(current);
+ if (current != -1)
+ sizeList->setCurrentItem(current);
const QSignalBlocker blocker(sizeEdit);
sizeEdit->setText((smoothScalable ? QString::number(size) : sizeList->currentText()));
@@ -750,7 +749,10 @@ void QFontDialogPrivate::_q_sizeChanged(const QString &s)
break;
}
const QSignalBlocker blocker(sizeList);
- sizeList->setCurrentItem(i);
+ if (sizeList->text(i).toInt() == this->size)
+ sizeList->setCurrentItem(i);
+ else
+ sizeList->clearSelection();
}
_q_updateSample();
}
diff --git a/tests/auto/widgets/dialogs/qfontdialog/tst_qfontdialog.cpp b/tests/auto/widgets/dialogs/qfontdialog/tst_qfontdialog.cpp
index 6eb36115cb..c5717a808c 100644
--- a/tests/auto/widgets/dialogs/qfontdialog/tst_qfontdialog.cpp
+++ b/tests/auto/widgets/dialogs/qfontdialog/tst_qfontdialog.cpp
@@ -66,6 +66,7 @@ public slots:
void postKeyReturn();
void testGetFont();
void testSetFont();
+ void testNonStandardFontSize();
public slots:
void initTestCase();
@@ -76,6 +77,7 @@ private slots:
void defaultOkButton();
void setFont();
void task256466_wrongStyle();
+ void setNonStandardFontSize();
private:
void runSlotWithFailsafeTimer(const char *member);
@@ -203,8 +205,38 @@ void tst_QFontDialog::task256466_wrongStyle()
}
}
+void tst_QFontDialog::setNonStandardFontSize()
+{
+ runSlotWithFailsafeTimer(SLOT(testNonStandardFontSize()));
+}
+void tst_QFontDialog::testNonStandardFontSize()
+{
+ QList<int> standardSizesList = QFontDatabase::standardSizes();
+ int nonStandardFontSize;
+ if (!standardSizesList.isEmpty()) {
+ nonStandardFontSize = standardSizesList.at(standardSizesList.count()-1); // get the maximum standard size.
+ nonStandardFontSize += 1; // the increment of 1 to mock a non-standard font size.
+ } else {
+ QSKIP("QFontDatabase::standardSizes() is empty.");
+ }
+ QFont testFont;
+ testFont.setPointSize(nonStandardFontSize);
+
+ bool accepted = false;
+ QTimer::singleShot(2000, this, SLOT(postKeyReturn()));
+ QFont resultFont = QFontDialog::getFont(&accepted, testFont,
+ QApplication::activeWindow(),
+ QLatin1String("QFontDialog - NonStandardFontSize Test"),
+ QFontDialog::DontUseNativeDialog);
+ QVERIFY(accepted);
+
+ if (accepted)
+ QCOMPARE(testFont.pointSize(), resultFont.pointSize());
+ else
+ QWARN("Fail using a non-standard font size.");
+}
QTEST_MAIN(tst_QFontDialog)
#include "tst_qfontdialog.moc"