diff --git a/src/gui/text/qtexthtmlparser.cpp b/src/gui/text/qtexthtmlparser.cpp
index 54c291b82ea..95f882be22b 100644
--- a/src/gui/text/qtexthtmlparser.cpp
+++ b/src/gui/text/qtexthtmlparser.cpp
@@ -1213,7 +1213,13 @@ void QTextHtmlParserNode::applyCssDeclarations(const QList &d
identifier = static_cast(decl.d->values.constFirst().variant.toInt());
switch (decl.d->propertyId) {
- case QCss::BorderColor: borderBrush = QBrush(decl.colorValue()); break;
+ case QCss::BorderColor: {
+ QBrush bordersBrush[4];
+ decl.brushValues(bordersBrush);
+ if (bordersBrush[0].color().isValid())
+ borderBrush = bordersBrush[0];
+ break;
+ }
case QCss::BorderStyles:
if (decl.styleValue() != QCss::BorderStyle_Unknown && decl.styleValue() != QCss::BorderStyle_Native)
borderStyle = static_cast(decl.styleValue() - 1);
diff --git a/tests/auto/gui/text/qcssparser/tst_qcssparser.cpp b/tests/auto/gui/text/qcssparser/tst_qcssparser.cpp
index 203fe003a08..2d577198840 100644
--- a/tests/auto/gui/text/qcssparser/tst_qcssparser.cpp
+++ b/tests/auto/gui/text/qcssparser/tst_qcssparser.cpp
@@ -60,6 +60,8 @@ private slots:
void strokeLineCapValues();
void strokeLineJoinValues_data();
void strokeLineJoinValues();
+ void borderColor_data();
+ void borderColor();
};
void tst_QCssParser::scanner_data()
@@ -1814,6 +1816,57 @@ void tst_QCssParser::strokeLineJoinValues()
QCOMPARE(rule.declarations.at(0).d->values.first().toString(), value);
}
+void tst_QCssParser::borderColor_data()
+{
+ QTest::addColumn("css");
+ QTest::addColumn("expectedTopColor");
+ QTest::addColumn("expectedRightColor");
+ QTest::addColumn("expectedBottomColor");
+ QTest::addColumn("expectedLeftColor");
+
+ QTest::newRow("four values") << "border-color: red green blue white" << QColor("red") << QColor("green") << QColor("blue") << QColor("white");
+ QTest::newRow("three values") << "border-color: red green blue" << QColor("red") << QColor("green") << QColor("blue") << QColor("green");
+ QTest::newRow("two values") << "border-color: red green" << QColor("red") << QColor("green") << QColor("red") << QColor("green");
+ QTest::newRow("one value") << "border-color: red" << QColor("red") << QColor("red") << QColor("red") << QColor("red");
+}
+
+void tst_QCssParser::borderColor()
+{
+ QFETCH(QString, css);
+ QFETCH(QColor, expectedTopColor);
+ QFETCH(QColor, expectedRightColor);
+ QFETCH(QColor, expectedBottomColor);
+ QFETCH(QColor, expectedLeftColor);
+
+ css.prepend("dummy {");
+ css.append(QLatin1Char('}'));
+
+ QCss::Parser parser(css);
+ QCss::StyleSheet sheet;
+ QVERIFY(parser.parse(&sheet));
+
+ QCOMPARE(sheet.styleRules.size() + sheet.nameIndex.size(), 1);
+ QCss::StyleRule rule = (!sheet.styleRules.isEmpty()) ?
+ sheet.styleRules.at(0) : *sheet.nameIndex.begin();
+ const QList decls = rule.declarations;
+ QVERIFY(decls.size() == 1);
+ QVERIFY(decls[0].d->propertyId == QCss::BorderColor);
+
+ QBrush colors[4];
+
+ decls[0].brushValues(colors);
+ QCOMPARE(colors[QCss::TopEdge].color(), expectedTopColor);
+ QCOMPARE(colors[QCss::RightEdge].color(), expectedRightColor);
+ QCOMPARE(colors[QCss::BottomEdge].color(), expectedBottomColor);
+ QCOMPARE(colors[QCss::LeftEdge].color(), expectedLeftColor);
+
+ //QTBUG-126381 : a second evaluation should give the same results
+ QCOMPARE(colors[QCss::TopEdge].color(), expectedTopColor);
+ QCOMPARE(colors[QCss::RightEdge].color(), expectedRightColor);
+ QCOMPARE(colors[QCss::BottomEdge].color(), expectedBottomColor);
+ QCOMPARE(colors[QCss::LeftEdge].color(), expectedLeftColor);
+}
+
QTEST_MAIN(tst_QCssParser)
#include "tst_qcssparser.moc"