aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/templates/qquickapplicationwindow.cpp6
-rw-r--r--src/templates/qquickcontrol.cpp6
-rw-r--r--src/templates/qquicklabel.cpp12
-rw-r--r--src/templates/qquicktextarea.cpp12
-rw-r--r--src/templates/qquicktextfield.cpp12
-rw-r--r--tests/auto/controls/data/tst_control.qml48
-rw-r--r--tests/auto/controls/data/tst_label.qml48
-rw-r--r--tests/auto/controls/data/tst_textarea.qml48
-rw-r--r--tests/auto/controls/data/tst_textfield.qml48
9 files changed, 227 insertions, 13 deletions
diff --git a/src/templates/qquickapplicationwindow.cpp b/src/templates/qquickapplicationwindow.cpp
index 9a9e5460..309c8d3a 100644
--- a/src/templates/qquickapplicationwindow.cpp
+++ b/src/templates/qquickapplicationwindow.cpp
@@ -396,7 +396,7 @@ QFont QQuickApplicationWindow::font() const
void QQuickApplicationWindow::setFont(const QFont &f)
{
Q_D(QQuickApplicationWindow);
- if (d->font == f)
+ if (d->font.resolve() == f.resolve() && d->font == f)
return;
QFont resolvedFont = f.resolve(QQuickControlPrivate::themeFont(QPlatformTheme::SystemFont));
@@ -417,11 +417,13 @@ void QQuickApplicationWindowPrivate::resolveFont()
void QQuickApplicationWindowPrivate::updateFont(const QFont &f)
{
Q_Q(QQuickApplicationWindow);
+ const bool changed = font != f;
font = f;
QQuickControlPrivate::updateFontRecur(q->contentItem(), f);
- emit q->fontChanged();
+ if (changed)
+ emit q->fontChanged();
}
QLocale QQuickApplicationWindow::locale() const
diff --git a/src/templates/qquickcontrol.cpp b/src/templates/qquickcontrol.cpp
index 0e14bc37..78ecaa91 100644
--- a/src/templates/qquickcontrol.cpp
+++ b/src/templates/qquickcontrol.cpp
@@ -287,11 +287,13 @@ void QQuickControlPrivate::resolveFont()
void QQuickControlPrivate::updateFont(const QFont &f)
{
Q_Q(QQuickControl);
+ const bool changed = font != f;
font = f;
QQuickControlPrivate::updateFontRecur(q, f);
- emit q->fontChanged();
+ if (changed)
+ emit q->fontChanged();
}
void QQuickControlPrivate::updateFontRecur(QQuickItem *item, const QFont &f)
@@ -411,7 +413,7 @@ QFont QQuickControl::font() const
void QQuickControl::setFont(const QFont &f)
{
Q_D(QQuickControl);
- if (d->font == f)
+ if (d->font.resolve() == f.resolve() && d->font == f)
return;
// Determine which font is inherited from this control's ancestors and
diff --git a/src/templates/qquicklabel.cpp b/src/templates/qquicklabel.cpp
index 13ff3a6e..7de520d9 100644
--- a/src/templates/qquicklabel.cpp
+++ b/src/templates/qquicklabel.cpp
@@ -113,9 +113,12 @@ void QQuickLabelPrivate::resolveFont()
if (sourceFont.resolve() == resolvedFont.resolve() && sourceFont == resolvedFont)
return;
+ const bool changed = sourceFont != resolvedFont;
+
q->QQuickText::setFont(resolvedFont);
- emit q->fontChanged();
+ if (changed)
+ emit q->fontChanged();
}
void QQuickLabelPrivate::_q_textChanged(const QString &text)
@@ -158,7 +161,7 @@ QFont QQuickLabel::font() const
void QQuickLabel::setFont(const QFont &font)
{
Q_D(QQuickLabel);
- if (d->sourceFont == font)
+ if (d->sourceFont.resolve() == font.resolve() && d->sourceFont == font)
return;
// Determine which font is inherited from this control's ancestors and
@@ -170,9 +173,12 @@ void QQuickLabel::setFont(const QFont &font)
if (d->sourceFont.resolve() == resolvedFont.resolve() && d->sourceFont == resolvedFont)
return;
+ const bool changed = d->sourceFont != resolvedFont;
+
QQuickText::setFont(font);
- emit fontChanged();
+ if (changed)
+ emit fontChanged();
}
/*!
diff --git a/src/templates/qquicktextarea.cpp b/src/templates/qquicktextarea.cpp
index 05b1b9a7..97eff350 100644
--- a/src/templates/qquicktextarea.cpp
+++ b/src/templates/qquicktextarea.cpp
@@ -166,9 +166,12 @@ void QQuickTextAreaPrivate::resolveFont()
if (sourceFont.resolve() == resolvedFont.resolve() && sourceFont == resolvedFont)
return;
+ const bool changed = sourceFont != resolvedFont;
+
q->QQuickTextEdit::setFont(resolvedFont);
- emit q->fontChanged();
+ if (changed)
+ emit q->fontChanged();
}
void QQuickTextAreaPrivate::_q_readOnlyChanged(bool isReadOnly)
@@ -212,7 +215,7 @@ QFont QQuickTextArea::font() const
void QQuickTextArea::setFont(const QFont &font)
{
Q_D(QQuickTextArea);
- if (d->sourceFont == font)
+ if (d->sourceFont.resolve() == font.resolve() && d->sourceFont == font)
return;
// Determine which font is inherited from this control's ancestors and
@@ -224,9 +227,12 @@ void QQuickTextArea::setFont(const QFont &font)
if (d->sourceFont.resolve() == resolvedFont.resolve() && d->sourceFont == resolvedFont)
return;
+ const bool changed = d->sourceFont != resolvedFont;
+
QQuickTextEdit::setFont(font);
- emit fontChanged();
+ if (changed)
+ emit fontChanged();
}
/*!
diff --git a/src/templates/qquicktextfield.cpp b/src/templates/qquicktextfield.cpp
index c3070614..06a2f8e0 100644
--- a/src/templates/qquicktextfield.cpp
+++ b/src/templates/qquicktextfield.cpp
@@ -180,9 +180,12 @@ void QQuickTextFieldPrivate::resolveFont()
if (sourceFont.resolve() == resolvedFont.resolve() && sourceFont == resolvedFont)
return;
+ const bool changed = sourceFont != resolvedFont;
+
q->QQuickTextInput::setFont(resolvedFont);
- emit q->fontChanged();
+ if (changed)
+ emit q->fontChanged();
}
void QQuickTextFieldPrivate::_q_readOnlyChanged(bool isReadOnly)
@@ -237,7 +240,7 @@ QFont QQuickTextField::font() const
void QQuickTextField::setFont(const QFont &font)
{
Q_D(QQuickTextField);
- if (d->sourceFont == font)
+ if (d->sourceFont.resolve() == font.resolve() && d->sourceFont == font)
return;
// Determine which font is inherited from this control's ancestors and
@@ -249,9 +252,12 @@ void QQuickTextField::setFont(const QFont &font)
if (d->sourceFont.resolve() == resolvedFont.resolve() && d->sourceFont == resolvedFont)
return;
+ const bool changed = d->sourceFont != resolvedFont;
+
QQuickTextInput::setFont(font);
- emit fontChanged();
+ if (changed)
+ emit fontChanged();
}
/*!
diff --git a/tests/auto/controls/data/tst_control.qml b/tests/auto/controls/data/tst_control.qml
index 7fe61064..dd9abefe 100644
--- a/tests/auto/controls/data/tst_control.qml
+++ b/tests/auto/controls/data/tst_control.qml
@@ -56,6 +56,11 @@ TestCase {
T.Control { }
}
+ Component {
+ id: signalSpy
+ SignalSpy { }
+ }
+
SignalSpy {
id: mirroredSpy
signalName: "mirroredChanged"
@@ -626,6 +631,49 @@ TestCase {
control4.destroy()
}
+ function test_font_explicit_attributes_data() {
+ return [
+ {tag: "bold", value: true},
+ {tag: "capitalization", value: Font.Capitalize},
+ {tag: "family", value: "Courier"},
+ {tag: "italic", value: true},
+ {tag: "strikeout", value: true},
+ {tag: "underline", value: true},
+ {tag: "weight", value: Font.Black},
+ {tag: "wordSpacing", value: 55}
+ ]
+ }
+
+ function test_font_explicit_attributes(data) {
+ var control = component.createObject(testCase)
+ verify(control)
+
+ var child = component.createObject(control)
+ verify(child)
+
+ var controlSpy = signalSpy.createObject(control, {target: control, signalName: "fontChanged"})
+ verify(controlSpy.valid)
+
+ var childSpy = signalSpy.createObject(child, {target: child, signalName: "fontChanged"})
+ verify(childSpy.valid)
+
+ var defaultValue = control.font[data.tag]
+ child.font[data.tag] = defaultValue
+
+ compare(child.font[data.tag], defaultValue)
+ compare(childSpy.count, 0)
+
+ control.font[data.tag] = data.value
+
+ compare(control.font[data.tag], data.value)
+ compare(controlSpy.count, 1)
+
+ compare(child.font[data.tag], defaultValue)
+ compare(childSpy.count, 0)
+
+ control.destroy()
+ }
+
function test_locale() {
var control = component.createObject(testCase)
verify(control)
diff --git a/tests/auto/controls/data/tst_label.qml b/tests/auto/controls/data/tst_label.qml
index 2af02cdf..b93ca3c7 100644
--- a/tests/auto/controls/data/tst_label.qml
+++ b/tests/auto/controls/data/tst_label.qml
@@ -55,9 +55,57 @@ TestCase {
Label { }
}
+ Component {
+ id: signalSpy
+ SignalSpy { }
+ }
+
function test_creation() {
var control = label.createObject(testCase)
verify(control)
control.destroy()
}
+
+ function test_font_explicit_attributes_data() {
+ return [
+ {tag: "bold", value: true},
+ {tag: "capitalization", value: Font.Capitalize},
+ {tag: "family", value: "Courier"},
+ {tag: "italic", value: true},
+ {tag: "strikeout", value: true},
+ {tag: "underline", value: true},
+ {tag: "weight", value: Font.Black},
+ {tag: "wordSpacing", value: 55}
+ ]
+ }
+
+ function test_font_explicit_attributes(data) {
+ var control = label.createObject(testCase)
+ verify(control)
+
+ var child = label.createObject(control)
+ verify(child)
+
+ var controlSpy = signalSpy.createObject(control, {target: control, signalName: "fontChanged"})
+ verify(controlSpy.valid)
+
+ var childSpy = signalSpy.createObject(child, {target: child, signalName: "fontChanged"})
+ verify(childSpy.valid)
+
+ var defaultValue = control.font[data.tag]
+ child.font[data.tag] = defaultValue
+
+ compare(child.font[data.tag], defaultValue)
+ compare(childSpy.count, 0)
+
+ control.font[data.tag] = data.value
+
+ compare(control.font[data.tag], data.value)
+ compare(controlSpy.count, 1)
+
+ compare(child.font[data.tag], defaultValue)
+ compare(childSpy.count, 0)
+
+ control.destroy()
+ }
}
diff --git a/tests/auto/controls/data/tst_textarea.qml b/tests/auto/controls/data/tst_textarea.qml
index b1225493..269e11ec 100644
--- a/tests/auto/controls/data/tst_textarea.qml
+++ b/tests/auto/controls/data/tst_textarea.qml
@@ -55,6 +55,11 @@ TestCase {
TextArea { background: Item { } }
}
+ Component {
+ id: signalSpy
+ SignalSpy { }
+ }
+
function test_creation() {
var control = textArea.createObject(testCase)
verify(control)
@@ -89,4 +94,47 @@ TestCase {
control.destroy()
}
+
+ function test_font_explicit_attributes_data() {
+ return [
+ {tag: "bold", value: true},
+ {tag: "capitalization", value: Font.Capitalize},
+ {tag: "family", value: "Courier"},
+ {tag: "italic", value: true},
+ {tag: "strikeout", value: true},
+ {tag: "underline", value: true},
+ {tag: "weight", value: Font.Black},
+ {tag: "wordSpacing", value: 55}
+ ]
+ }
+
+ function test_font_explicit_attributes(data) {
+ var control = textArea.createObject(testCase)
+ verify(control)
+
+ var child = textArea.createObject(control)
+ verify(child)
+
+ var controlSpy = signalSpy.createObject(control, {target: control, signalName: "fontChanged"})
+ verify(controlSpy.valid)
+
+ var childSpy = signalSpy.createObject(child, {target: child, signalName: "fontChanged"})
+ verify(childSpy.valid)
+
+ var defaultValue = control.font[data.tag]
+ child.font[data.tag] = defaultValue
+
+ compare(child.font[data.tag], defaultValue)
+ compare(childSpy.count, 0)
+
+ control.font[data.tag] = data.value
+
+ compare(control.font[data.tag], data.value)
+ compare(controlSpy.count, 1)
+
+ compare(child.font[data.tag], defaultValue)
+ compare(childSpy.count, 0)
+
+ control.destroy()
+ }
}
diff --git a/tests/auto/controls/data/tst_textfield.qml b/tests/auto/controls/data/tst_textfield.qml
index 57675659..a7e2f6ec 100644
--- a/tests/auto/controls/data/tst_textfield.qml
+++ b/tests/auto/controls/data/tst_textfield.qml
@@ -55,6 +55,11 @@ TestCase {
TextField { }
}
+ Component {
+ id: signalSpy
+ SignalSpy { }
+ }
+
function test_creation() {
var control = textField.createObject(testCase)
verify(control)
@@ -90,4 +95,47 @@ TestCase {
control.destroy()
}
+
+ function test_font_explicit_attributes_data() {
+ return [
+ {tag: "bold", value: true},
+ {tag: "capitalization", value: Font.Capitalize},
+ {tag: "family", value: "Courier"},
+ {tag: "italic", value: true},
+ {tag: "strikeout", value: true},
+ {tag: "underline", value: true},
+ {tag: "weight", value: Font.Black},
+ {tag: "wordSpacing", value: 55}
+ ]
+ }
+
+ function test_font_explicit_attributes(data) {
+ var control = textField.createObject(testCase)
+ verify(control)
+
+ var child = textField.createObject(control)
+ verify(child)
+
+ var controlSpy = signalSpy.createObject(control, {target: control, signalName: "fontChanged"})
+ verify(controlSpy.valid)
+
+ var childSpy = signalSpy.createObject(child, {target: child, signalName: "fontChanged"})
+ verify(childSpy.valid)
+
+ var defaultValue = control.font[data.tag]
+ child.font[data.tag] = defaultValue
+
+ compare(child.font[data.tag], defaultValue)
+ compare(childSpy.count, 0)
+
+ control.font[data.tag] = data.value
+
+ compare(control.font[data.tag], data.value)
+ compare(controlSpy.count, 1)
+
+ compare(child.font[data.tag], defaultValue)
+ compare(childSpy.count, 0)
+
+ control.destroy()
+ }
}