aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorHyunkook Khang <hyunkook.khang@qt.io>2021-02-23 10:51:31 +0900
committerMitch Curtis <mitch.curtis@qt.io>2021-05-26 13:51:21 +0200
commit6b687ad7ec46fed10766f5d26809c4fe430db608 (patch)
treee7894ddb58b4735339a9137e4d9e923fb9ac6bfb
parent14d35455e351f50ce91e71b1e27f6ee58c0c8fd0 (diff)
Fix layout is always RTL when locale is RTL
isMirrored() will always return true when locale is RTL, so that we cannot change the layout. To fix this, remove out the relation between LayoutMirroring.enabled and locale's text direction. [ChangeLog][Controls][Important Behavior Changes] Control's locale property no longer affects layout direction. Use LayoutMirroring instead. Fixes: QTBUG-91227 Change-Id: Ibedd3f09828f81f1889077892452a27c90e21533 Reviewed-by: Hyunkook Khang <hyunkook.khang@qt.io> Reviewed-by: Mitch Curtis <mitch.curtis@qt.io>
-rw-r--r--src/quicktemplates2/qquickapplicationwindow.cpp2
-rw-r--r--src/quicktemplates2/qquickcontrol.cpp19
-rw-r--r--tests/auto/controls/data/tst_control.qml14
-rw-r--r--tests/auto/controls/data/tst_popup.qml52
-rw-r--r--tests/auto/controls/data/tst_progressbar.qml2
-rw-r--r--tests/auto/controls/data/tst_rangeslider.qml11
-rw-r--r--tests/auto/controls/data/tst_scrollbar.qml2
-rw-r--r--tests/auto/controls/data/tst_slider.qml6
-rw-r--r--tests/auto/qquickmenu/tst_qquickmenu.cpp42
9 files changed, 82 insertions, 68 deletions
diff --git a/src/quicktemplates2/qquickapplicationwindow.cpp b/src/quicktemplates2/qquickapplicationwindow.cpp
index 62679110..00cab471 100644
--- a/src/quicktemplates2/qquickapplicationwindow.cpp
+++ b/src/quicktemplates2/qquickapplicationwindow.cpp
@@ -635,7 +635,7 @@ void QQuickApplicationWindow::resetFont()
the window's locale, that locale propagates to all child controls in the
window, overriding the system default locale.
- \sa Control::locale, {LayoutMirroring}{LayoutMirroring}
+ \sa Control::locale
*/
QLocale QQuickApplicationWindow::locale() const
{
diff --git a/src/quicktemplates2/qquickcontrol.cpp b/src/quicktemplates2/qquickcontrol.cpp
index c07a097b..89f6abd4 100644
--- a/src/quicktemplates2/qquickcontrol.cpp
+++ b/src/quicktemplates2/qquickcontrol.cpp
@@ -232,8 +232,7 @@ void QQuickControlPrivate::handleUngrab()
void QQuickControlPrivate::mirrorChange()
{
Q_Q(QQuickControl);
- if (locale.textDirection() == Qt::LeftToRight)
- q->mirrorChange();
+ q->mirrorChange();
}
void QQuickControlPrivate::setTopPadding(qreal value, bool reset)
@@ -636,13 +635,10 @@ void QQuickControlPrivate::updateLocale(const QLocale &l, bool e)
QLocale old = q->locale();
hasLocale = e;
if (old != l) {
- bool wasMirrored = q->isMirrored();
locale = l;
q->localeChange(l, old);
QQuickControlPrivate::updateLocaleRecur(q, l);
emit q->localeChanged();
- if (wasMirrored != q->isMirrored())
- q->mirrorChange();
}
}
@@ -1246,7 +1242,7 @@ void QQuickControl::resetSpacing()
control's locale, that locale propagates to all of the control's children,
overriding the system default locale.
- \sa mirrored, {LayoutMirroring}{LayoutMirroring}
+ \sa mirrored
*/
QLocale QQuickControl::locale() const
{
@@ -1280,16 +1276,17 @@ void QQuickControl::resetLocale()
This property holds whether the control is mirrored.
This property is provided for convenience. A control is considered mirrored
- when its visual layout direction is right-to-left; that is, when using a
- right-to-left locale or when \l {LayoutMirroring::enabled}{LayoutMirroring.enabled}
- is \c true.
+ when its visual layout direction is right-to-left; that is, when
+ \l {LayoutMirroring::enabled}{LayoutMirroring.enabled} is \c true.
- \sa locale, {LayoutMirroring}{LayoutMirroring}, {Right-to-left User Interfaces}
+ As of Qt 6.2, the \l locale property no longer affects this property.
+
+ \sa {LayoutMirroring}{LayoutMirroring}, {Right-to-left User Interfaces}
*/
bool QQuickControl::isMirrored() const
{
Q_D(const QQuickControl);
- return d->isMirrored() || d->locale.textDirection() == Qt::RightToLeft;
+ return d->isMirrored();
}
/*!
diff --git a/tests/auto/controls/data/tst_control.qml b/tests/auto/controls/data/tst_control.qml
index 1bbbe42a..4afa719e 100644
--- a/tests/auto/controls/data/tst_control.qml
+++ b/tests/auto/controls/data/tst_control.qml
@@ -435,8 +435,8 @@ TestCase {
compare(control.mirrored, false)
control.locale = Qt.locale("ar_EG")
- compare(control.mirrored, true)
- compare(mirroredSpy.count, 1)
+ compare(control.mirrored, false)
+ compare(mirroredSpy.count, 0)
control.LayoutMirroring.enabled = true
compare(control.mirrored, true)
@@ -960,14 +960,14 @@ TestCase {
control.locale = Qt.locale("ar_EG")
control.localespy.wait()
compare(control.localespy.count, 2)
- compare(control.mirroredspy.count, 1)
+ compare(control.mirroredspy.count, 0)
compare(control.locale.name, "ar_EG")
compare(control.item2_2.locale.name, "ar_EG")
compare(control.item2_3.locale.name, "ar_EG")
compare(control.localespy_2.count, 2)
- compare(control.mirroredspy_2.count, 1)
+ compare(control.mirroredspy_2.count, 0)
compare(control.localespy_3.count, 2)
- compare(control.mirroredspy_3.count, 1)
+ compare(control.mirroredspy_3.count, 0)
}
Component {
@@ -1051,11 +1051,11 @@ TestCase {
control.locale = Qt.locale("ar_EG")
control.localespy.wait()
compare(control.localespy.count, 2)
- compare(control.mirroredspy.count, 1)
+ compare(control.mirroredspy.count, 0)
compare(control.locale.name, "ar_EG")
compare(control.item6_5.locale.name, "ar_EG")
compare(control.localespy_5.count, 2)
- compare(control.mirroredspy_5.count, 1)
+ compare(control.mirroredspy_5.count, 0)
}
function test_hover_data() {
diff --git a/tests/auto/controls/data/tst_popup.qml b/tests/auto/controls/data/tst_popup.qml
index 2c94e87b..145f5552 100644
--- a/tests/auto/controls/data/tst_popup.qml
+++ b/tests/auto/controls/data/tst_popup.qml
@@ -810,9 +810,9 @@ TestCase {
compare(control.popup.button1.locale.name, defaultLocale.name)
compare(control.popup.button2.locale.name, defaultLocale.name)
compare(control.localespy.count, 3)
- compare(control.mirrorspy.count, 1)
+ compare(control.mirrorspy.count, 0)
compare(control.button.localespy.count, 3)
- compare(control.button.mirrorspy.count, 1)
+ compare(control.button.mirrorspy.count, 0)
compare(control.popup.localespy.count, 2)
compare(control.popup.button1.localespy.count, 2)
compare(control.popup.button2.localespy.count, 2)
@@ -825,14 +825,14 @@ TestCase {
compare(control.popup.button1.locale.name, "ar_EG")
compare(control.popup.button2.locale.name, "ar_EG")
compare(control.localespy.count, 3)
- compare(control.mirrorspy.count, 1)
+ compare(control.mirrorspy.count, 0)
compare(control.button.localespy.count, 3)
- compare(control.button.mirrorspy.count, 1)
+ compare(control.button.mirrorspy.count, 0)
compare(control.popup.localespy.count, 3)
compare(control.popup.button1.localespy.count, 3)
- compare(control.popup.button1.mirrorspy.count, 1)
+ compare(control.popup.button1.mirrorspy.count, 0)
compare(control.popup.button2.localespy.count, 3)
- compare(control.popup.button2.mirrorspy.count, 1)
+ compare(control.popup.button2.mirrorspy.count, 0)
control.button.locale = Qt.locale("nb_NO")
compare(control.ApplicationWindow.window.locale.name, "ar_EG")
@@ -842,9 +842,9 @@ TestCase {
compare(control.popup.button1.locale.name, "ar_EG")
compare(control.popup.button2.locale.name, "ar_EG")
compare(control.localespy.count, 3)
- compare(control.mirrorspy.count, 1)
+ compare(control.mirrorspy.count, 0)
compare(control.button.localespy.count, 4)
- compare(control.button.mirrorspy.count, 2)
+ compare(control.button.mirrorspy.count, 0)
compare(control.popup.localespy.count, 3)
compare(control.popup.button1.localespy.count, 3)
compare(control.popup.button2.localespy.count, 3)
@@ -857,9 +857,9 @@ TestCase {
compare(control.popup.button1.locale.name, "ar_EG")
compare(control.popup.button2.locale.name, "ar_EG")
compare(control.localespy.count, 3)
- compare(control.mirrorspy.count, 1)
+ compare(control.mirrorspy.count, 0)
compare(control.button.localespy.count, 4)
- compare(control.button.mirrorspy.count, 2)
+ compare(control.button.mirrorspy.count, 0)
compare(control.popup.localespy.count, 3)
compare(control.popup.button1.localespy.count, 3)
compare(control.popup.button2.localespy.count, 3)
@@ -872,14 +872,14 @@ TestCase {
compare(control.popup.button1.locale.name, "nb_NO")
compare(control.popup.button2.locale.name, "ar_EG")
compare(control.localespy.count, 3)
- compare(control.mirrorspy.count, 1)
+ compare(control.mirrorspy.count, 0)
compare(control.button.localespy.count, 4)
- compare(control.button.mirrorspy.count, 2)
+ compare(control.button.mirrorspy.count, 0)
compare(control.popup.localespy.count, 3)
compare(control.popup.button1.localespy.count, 4)
- compare(control.popup.button1.mirrorspy.count, 2)
+ compare(control.popup.button1.mirrorspy.count, 0)
compare(control.popup.button2.localespy.count, 3)
- compare(control.popup.button2.mirrorspy.count, 1)
+ compare(control.popup.button2.mirrorspy.count, 0)
control.popup.locale = Qt.locale("fi_FI")
compare(control.ApplicationWindow.window.locale.name, "ar_EG")
@@ -889,14 +889,14 @@ TestCase {
compare(control.popup.button1.locale.name, "nb_NO")
compare(control.popup.button2.locale.name, "fi_FI")
compare(control.localespy.count, 3)
- compare(control.mirrorspy.count, 1)
+ compare(control.mirrorspy.count, 0)
compare(control.button.localespy.count, 4)
- compare(control.button.mirrorspy.count, 2)
+ compare(control.button.mirrorspy.count, 0)
compare(control.popup.localespy.count, 4)
compare(control.popup.button1.localespy.count, 4)
- compare(control.popup.button1.mirrorspy.count, 2)
+ compare(control.popup.button1.mirrorspy.count, 0)
compare(control.popup.button2.localespy.count, 4)
- compare(control.popup.button2.mirrorspy.count, 2)
+ compare(control.popup.button2.mirrorspy.count, 0)
control.ApplicationWindow.window.locale = undefined
compare(control.ApplicationWindow.window.locale.name, defaultLocale.name)
@@ -906,14 +906,14 @@ TestCase {
compare(control.popup.button1.locale.name, "nb_NO")
compare(control.popup.button2.locale.name, "fi_FI")
compare(control.localespy.count, 4)
- compare(control.mirrorspy.count, 2)
+ compare(control.mirrorspy.count, 0)
compare(control.button.localespy.count, 4)
- compare(control.button.mirrorspy.count, 2)
+ compare(control.button.mirrorspy.count, 0)
compare(control.popup.localespy.count, 4)
compare(control.popup.button1.localespy.count, 4)
- compare(control.popup.button1.mirrorspy.count, 2)
+ compare(control.popup.button1.mirrorspy.count, 0)
compare(control.popup.button2.localespy.count, 4)
- compare(control.popup.button2.mirrorspy.count, 2)
+ compare(control.popup.button2.mirrorspy.count, 0)
control.popup.locale = undefined
compare(control.ApplicationWindow.window.locale.name, defaultLocale.name)
@@ -923,14 +923,14 @@ TestCase {
compare(control.popup.button1.locale.name, "nb_NO")
compare(control.popup.button2.locale.name, defaultLocale.name)
compare(control.localespy.count, 4)
- compare(control.mirrorspy.count, 2)
+ compare(control.mirrorspy.count, 0)
compare(control.button.localespy.count, 4)
- compare(control.button.mirrorspy.count, 2)
+ compare(control.button.mirrorspy.count, 0)
compare(control.popup.localespy.count, 5)
compare(control.popup.button1.localespy.count, 4)
- compare(control.popup.button1.mirrorspy.count, 2)
+ compare(control.popup.button1.mirrorspy.count, 0)
compare(control.popup.button2.localespy.count, 5)
- compare(control.popup.button2.mirrorspy.count, 2)
+ compare(control.popup.button2.mirrorspy.count, 0)
}
function test_size() {
diff --git a/tests/auto/controls/data/tst_progressbar.qml b/tests/auto/controls/data/tst_progressbar.qml
index 1bb66bb7..2d264409 100644
--- a/tests/auto/controls/data/tst_progressbar.qml
+++ b/tests/auto/controls/data/tst_progressbar.qml
@@ -163,7 +163,7 @@ TestCase {
// RTL locale
control.locale = Qt.locale("ar_EG")
- compare(control.visualPosition, 0.75)
+ compare(control.visualPosition, 0.25)
// RTL locale + LayoutMirroring
control.LayoutMirroring.enabled = true
diff --git a/tests/auto/controls/data/tst_rangeslider.qml b/tests/auto/controls/data/tst_rangeslider.qml
index 55fedd1c..28ec7a7a 100644
--- a/tests/auto/controls/data/tst_rangeslider.qml
+++ b/tests/auto/controls/data/tst_rangeslider.qml
@@ -235,8 +235,8 @@ TestCase {
// RTL locale
control.locale = Qt.locale("ar_EG")
- compare(control.first.visualPosition, 0.75)
- compare(control.second.visualPosition, 0.0)
+ compare(control.first.visualPosition, 0.25)
+ compare(control.second.visualPosition, 1.0)
// RTL locale + LayoutMirroring
control.LayoutMirroring.enabled = true
@@ -786,13 +786,12 @@ TestCase {
control.first.value = 0
control.locale = Qt.locale("ar_EG")
- mousePress(control, control.first.handle.x + control.first.handle.width / 2,
- control.first.handle.y + control.first.handle.height / 2, Qt.LeftButton)
+ mousePress(control, control.first.handle.x, control.first.handle.y, Qt.LeftButton)
compare(firstPressedSpy.count, 3)
compare(control.first.pressed, true)
compare(control.first.value, 0.0)
compare(control.first.position, 0.0)
- compare(control.first.visualPosition, 1.0)
+ compare(control.first.visualPosition, 0.0)
mouseMove(control, control.leftPadding + control.availableWidth * 0.5, control.height * 0.5, 0)
compare(firstPressedSpy.count, 3)
@@ -805,7 +804,7 @@ TestCase {
compare(firstPressedSpy.count, 3)
compare(control.first.pressed, true)
compare(control.first.value, 0.0)
- verify(control.first.position < 0.5)
+ verify(control.first.position > 0.5)
verify(control.first.visualPosition > 0.5)
mouseRelease(control, control.leftPadding + control.availableWidth * 0.5, control.height * 0.5, Qt.LeftButton)
diff --git a/tests/auto/controls/data/tst_scrollbar.qml b/tests/auto/controls/data/tst_scrollbar.qml
index edcd7aab..9e649e37 100644
--- a/tests/auto/controls/data/tst_scrollbar.qml
+++ b/tests/auto/controls/data/tst_scrollbar.qml
@@ -546,7 +546,7 @@ TestCase {
container.ScrollBar.vertical = scrollBar.createObject(container)
compare(container.ScrollBar.vertical.x, container.width - container.ScrollBar.vertical.width)
container.ScrollBar.vertical.locale = Qt.locale("ar_EG")
- compare(container.ScrollBar.vertical.x, 0)
+ compare(container.ScrollBar.vertical.x, container.width - container.ScrollBar.vertical.width)
}
function test_hover_data() {
diff --git a/tests/auto/controls/data/tst_slider.qml b/tests/auto/controls/data/tst_slider.qml
index 6872506b..05cd6ec2 100644
--- a/tests/auto/controls/data/tst_slider.qml
+++ b/tests/auto/controls/data/tst_slider.qml
@@ -179,7 +179,7 @@ TestCase {
// RTL locale
control.locale = Qt.locale("ar_EG")
- compare(control.visualPosition, 0.75)
+ compare(control.visualPosition, 0.25)
// RTL locale + LayoutMirroring
control.LayoutMirroring.enabled = true
@@ -623,7 +623,7 @@ TestCase {
compare(pressedSpy.count, 3)
compare(control.pressed, true)
compare(control.value, 0.0)
- compare(control.position, 1.0)
+ compare(control.position, 0.0)
compare(control.visualPosition, 0.0)
mouseMove(control, control.leftPadding + control.availableWidth * 0.5, control.height * 0.5, 0)
@@ -637,7 +637,7 @@ TestCase {
compare(pressedSpy.count, 3)
compare(control.pressed, true)
compare(control.value, 0.0)
- verify(control.position < 0.5)
+ verify(control.position > 0.5)
verify(control.visualPosition > 0.5)
mouseRelease(control, control.leftPadding + control.availableWidth * 0.5, control.height * 0.5, Qt.LeftButton)
diff --git a/tests/auto/qquickmenu/tst_qquickmenu.cpp b/tests/auto/qquickmenu/tst_qquickmenu.cpp
index 05c96246..92ea452a 100644
--- a/tests/auto/qquickmenu/tst_qquickmenu.cpp
+++ b/tests/auto/qquickmenu/tst_qquickmenu.cpp
@@ -1236,8 +1236,11 @@ void tst_QQuickMenu::subMenuKeyboard()
window->show();
QVERIFY(QTest::qWaitForWindowActive(window));
- if (mirrored)
- window->setLocale(QLocale("ar_EG"));
+ if (mirrored) {
+ QQmlExpression mirroringExpression(qmlContext(window), window,
+ "LayoutMirroring.childrenInherit = true; LayoutMirroring.enabled = true");
+ QVERIFY2(mirroringExpression.evaluate().isValid(), qPrintable(mirroringExpression.error().toString()));
+ }
QQuickMenu *mainMenu = window->property("mainMenu").value<QQuickMenu *>();
QVERIFY(mainMenu);
@@ -1359,8 +1362,11 @@ void tst_QQuickMenu::subMenuDisabledKeyboard()
window->show();
QVERIFY(QTest::qWaitForWindowActive(window));
- if (mirrored)
- window->setLocale(QLocale("ar_EG"));
+ if (mirrored) {
+ QQmlExpression mirroringExpression(qmlContext(window), window,
+ "LayoutMirroring.childrenInherit = true; LayoutMirroring.enabled = true");
+ QVERIFY2(mirroringExpression.evaluate().isValid(), qPrintable(mirroringExpression.error().toString()));
+ }
QQuickMenu *mainMenu = window->property("mainMenu").value<QQuickMenu *>();
QVERIFY(mainMenu);
@@ -1454,8 +1460,11 @@ void tst_QQuickMenu::subMenuPosition()
window->show();
QVERIFY(QTest::qWaitForWindowActive(window));
- if (mirrored)
- window->setLocale(QLocale("ar_EG"));
+ if (mirrored) {
+ QQmlExpression mirroringExpression(qmlContext(window), window,
+ "LayoutMirroring.childrenInherit = true; LayoutMirroring.enabled = true");
+ QVERIFY2(mirroringExpression.evaluate().isValid(), qPrintable(mirroringExpression.error().toString()));
+ }
mainMenu->setCascade(cascade);
QCOMPARE(mainMenu->cascade(), cascade);
@@ -1733,8 +1742,11 @@ void tst_QQuickMenu::menuItemWidth()
window->show();
QVERIFY(QTest::qWaitForWindowActive(window));
- if (mirrored)
- window->setLocale(QLocale("ar_EG"));
+ if (mirrored) {
+ QQmlExpression mirroringExpression(qmlContext(window), window,
+ "LayoutMirroring.childrenInherit = true; LayoutMirroring.enabled = true");
+ QVERIFY2(mirroringExpression.evaluate().isValid(), qPrintable(mirroringExpression.error().toString()));
+ }
QQuickMenu *menu = window->property("menu").value<QQuickMenu *>();
QVERIFY(menu);
@@ -1762,8 +1774,11 @@ void tst_QQuickMenu::menuItemWidthAfterMenuWidthChanged()
window->show();
QVERIFY(QTest::qWaitForWindowActive(window));
- if (mirrored)
- window->setLocale(QLocale("ar_EG"));
+ if (mirrored) {
+ QQmlExpression mirroringExpression(qmlContext(window), window,
+ "LayoutMirroring.childrenInherit = true; LayoutMirroring.enabled = true");
+ QVERIFY2(mirroringExpression.evaluate().isValid(), qPrintable(mirroringExpression.error().toString()));
+ }
QQuickMenu *menu = window->property("menu").value<QQuickMenu *>();
QVERIFY(menu);
@@ -1807,8 +1822,11 @@ void tst_QQuickMenu::menuItemWidthAfterImplicitWidthChanged()
window->show();
QVERIFY(QTest::qWaitForWindowActive(window));
- if (mirrored)
- window->setLocale(QLocale("ar_EG"));
+ if (mirrored) {
+ QQmlExpression mirroringExpression(qmlContext(window), window,
+ "LayoutMirroring.childrenInherit = true; LayoutMirroring.enabled = true");
+ QVERIFY2(mirroringExpression.evaluate().isValid(), qPrintable(mirroringExpression.error().toString()));
+ }
QQuickMenu *menu = window->property("menu").value<QQuickMenu *>();
QVERIFY(menu);