aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorTim Jenssen <tim.jenssen@qt.io>2021-10-12 13:38:44 +0200
committerTim Jenssen <tim.jenssen@qt.io>2021-10-15 06:08:14 +0200
commita15f7105ff458dd765a6cd96745a70ae345832ed (patch)
tree9b9f687a7550e91560a80111ad3b3f5f9e334aa7 /src
parent071daed9a9a1a76ec59b56ec8c651dbe8b23db4d (diff)
Qmldebugtranslator: report elide issues correctly inside layouts
Task-number: QTBUG-96991 Change-Id: I911044893fb6eac54c6fb8f2b236f422bd04a7ae Reviewed-by: Tim Jenssen <tim.jenssen@qt.io> (cherry picked from commit dd96e919c1a69f40329c5b6a33029ab559636397) Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
Diffstat (limited to 'src')
-rw-r--r--src/plugins/qmltooling/qmldbg_preview/qqmldebugtranslationservice.cpp89
-rw-r--r--src/plugins/qmltooling/qmldbg_preview/qqmldebugtranslationservice.h4
-rw-r--r--src/qml/debugger/qqmldebugserviceinterfaces_p.h2
-rw-r--r--src/qml/debugger/qqmldebugtranslationprotocol_p.h16
-rw-r--r--src/qmldebug/qqmldebugtranslationclient.cpp2
-rw-r--r--src/quick/items/qquicktext.cpp6
6 files changed, 34 insertions, 85 deletions
diff --git a/src/plugins/qmltooling/qmldbg_preview/qqmldebugtranslationservice.cpp b/src/plugins/qmltooling/qmldbg_preview/qqmldebugtranslationservice.cpp
index 854937f4ae..8cc8c9bd41 100644
--- a/src/plugins/qmltooling/qmldbg_preview/qqmldebugtranslationservice.cpp
+++ b/src/plugins/qmltooling/qmldbg_preview/qqmldebugtranslationservice.cpp
@@ -241,10 +241,10 @@ public:
emit q->messageToClient(q->name(), packet.data());
}
- void sendMissingTranslations()
+ void sendTranslationIssues()
{
QVersionedPacket<QQmlDebugConnector> packet;
- packet << Reply::MissingTranslations;
+ packet << Reply::TranslationIssues;
QVector<TranslationIssue> issues;
for (auto &&information : qAsConst(objectTranslationBindingMultiMap)) {
@@ -255,6 +255,18 @@ public:
issue.language = proxyTranslator->currentUILanguages();
issues.append(issue);
}
+
+ QObject *scopeObject = information.scopeObject;
+ QQuickText *quickText = static_cast<QQuickText*>(scopeObject);
+ if (quickText) {
+ if (quickText->truncated()) {
+ TranslationIssue issue;
+ issue.type = TranslationIssue::Type::Elided;
+ issue.codeMarker = codeMarker(information);
+ issue.language = proxyTranslator->currentUILanguages();
+ issues.append(issue);
+ }
+ }
}
std::sort(issues.begin(), issues.end(), [](const auto &l1, const auto &l2){
return l1.codeMarker < l2.codeMarker;
@@ -263,20 +275,6 @@ public:
emit q->messageToClient(q->name(), packet.data());
}
- void sendElidedTextWarning(const TranslationBindingInformation &information)
- {
- QVersionedPacket<QQmlDebugConnector> packet;
- packet << Reply::TextElided;
-
- TranslationIssue issue;
- issue.type = TranslationIssue::Type::Elided;
- issue.codeMarker = codeMarker(information);
- issue.language = proxyTranslator->currentUILanguages();
-
- packet << issue;
- emit q->messageToClient(q->name(), packet.data());
- }
-
QQmlDebugTranslationServiceImpl *q;
bool watchTextElides = false;
@@ -335,8 +333,8 @@ QQmlDebugTranslationServiceImpl::QQmlDebugTranslationServiceImpl(QObject *parent
d, &QQmlDebugTranslationServicePrivate::sendLanguageChanged,
Qt::QueuedConnection);
- connect(this, &QQmlDebugTranslationServiceImpl::missingTranslations,
- d, &QQmlDebugTranslationServicePrivate::sendMissingTranslations,
+ connect(this, &QQmlDebugTranslationServiceImpl::translationIssues,
+ d, &QQmlDebugTranslationServicePrivate::sendTranslationIssues,
Qt::QueuedConnection);
connect(this, &QQmlDebugTranslationServiceImpl::sendTranslatableTextOccurrences,
@@ -374,8 +372,8 @@ void QQmlDebugTranslationServiceImpl::messageReceived(const QByteArray &message)
emit stateList();
break;
}
- case QQmlDebugTranslation::Request::MissingTranslations: {
- emit missingTranslations();
+ case QQmlDebugTranslation::Request::TranslationIssues: {
+ emit translationIssues();
break;
}
case QQmlDebugTranslation::Request::TranslatableTextOccurrences: {
@@ -415,57 +413,6 @@ void QQmlDebugTranslationServiceImpl::engineAboutToBeRemoved(QJSEngine *engine)
emit detachedFromEngine(engine);
}
-QString QQmlDebugTranslationServiceImpl::foundElidedText(QObject *textObject, const QString &layoutText, const QString &elideText)
-{
- Q_UNUSED(layoutText)
- QString elidedTextResult = elideText;
- // do the check only for text objects which have translation bindings
- auto it = d->objectTranslationBindingMultiMap.find(textObject);
- if (it != d->objectTranslationBindingMultiMap.end()) {
- if (QQuickItem* quickItem = qobject_cast<QQuickItem*>(textObject)) {
- const TranslationBindingInformation information = d->objectTranslationBindingMultiMap.value(quickItem);
-
- QQuickItem* parentItem = quickItem->parentItem();
- QString parentTypeName = parentItem->metaObject()->className();
-
- // Currently text fields inside a layout give false signals about elides
- // so we just omit them
-
- if (d->watchTextElides && !parentTypeName.endsWith("Layout")) {
- d->sendElidedTextWarning(information);
- }
-
- if (!d->elideConnections.contains(quickItem)) {
- // add "refresh" elide state connections which remove themself
- auto clearElideInformation = [=]() {
- //quickItem->setColor(originColor);
- for (QMetaObject::Connection connection : d->elideConnections.value(quickItem))
- quickItem->disconnect(connection);
- d->elideConnections.remove(quickItem);
- };
-
- auto connectWithChangedWidthThreshold = [=] () {
- return connect(quickItem, &QQuickItem::widthChanged, [=]() {
- if (quickItem->implicitWidth() <= quickItem->width())
- clearElideInformation();
- });
- };
- auto connectImplicitWidthChangedThreshold = [=] () {
- return connect(quickItem, &QQuickItem::implicitWidthChanged, [=]() {
- if (quickItem->implicitWidth() <= quickItem->width())
- clearElideInformation();
- });
- };
-
- d->elideConnections.insert(quickItem,
- {connectWithChangedWidthThreshold(),
- connectImplicitWidthChangedThreshold()});
- }
- }
- }
- return elidedTextResult;
-}
-
void QQmlDebugTranslationServiceImpl::foundTranslationBinding(const TranslationBindingInformation &translationBindingInformation)
{
QObject *scopeObject = translationBindingInformation.scopeObject;
diff --git a/src/plugins/qmltooling/qmldbg_preview/qqmldebugtranslationservice.h b/src/plugins/qmltooling/qmldbg_preview/qqmldebugtranslationservice.h
index 72e70f4b29..e0d1b2d9a8 100644
--- a/src/plugins/qmltooling/qmldbg_preview/qqmldebugtranslationservice.h
+++ b/src/plugins/qmltooling/qmldbg_preview/qqmldebugtranslationservice.h
@@ -68,7 +68,6 @@ public:
QQmlDebugTranslationServiceImpl(QObject *parent = 0);
~QQmlDebugTranslationServiceImpl();
- QString foundElidedText(QObject *textObject, const QString &layoutText, const QString &elideText) override;
void foundTranslationBinding(const TranslationBindingInformation &translationBindingInformation) override;
void messageReceived(const QByteArray &message) override;
@@ -80,7 +79,8 @@ signals:
void state(const QString &stateName);
void stateList();
void watchTextElides(bool);
- void missingTranslations();
+ void translationIssues();
+ void elidedTranslations();
void sendTranslatableTextOccurrences();
private:
diff --git a/src/qml/debugger/qqmldebugserviceinterfaces_p.h b/src/qml/debugger/qqmldebugserviceinterfaces_p.h
index 5d58e4d2e0..d01e472edb 100644
--- a/src/qml/debugger/qqmldebugserviceinterfaces_p.h
+++ b/src/qml/debugger/qqmldebugserviceinterfaces_p.h
@@ -108,7 +108,6 @@ class QQmlEngineControlService {};
class QQmlNativeDebugService {};
class QQmlDebugTranslationService {
public:
- virtual QString foundElidedText(QObject *, const QString &, const QString &) {return {};}
virtual void foundTranslationBinding(const TranslationBindingInformation &) {}
};
@@ -186,7 +185,6 @@ class Q_QML_PRIVATE_EXPORT QQmlDebugTranslationService : public QQmlDebugService
public:
static const QString s_key;
- virtual QString foundElidedText(QObject *qQuickTextObject, const QString &layoutText, const QString &elideText) = 0;
virtual void foundTranslationBinding(const TranslationBindingInformation &translationBindingInformation) = 0;
protected:
friend class QQmlDebugConnector;
diff --git a/src/qml/debugger/qqmldebugtranslationprotocol_p.h b/src/qml/debugger/qqmldebugtranslationprotocol_p.h
index 10010f6507..06d3850510 100644
--- a/src/qml/debugger/qqmldebugtranslationprotocol_p.h
+++ b/src/qml/debugger/qqmldebugtranslationprotocol_p.h
@@ -64,19 +64,23 @@ enum class Request {
ChangeLanguage = 1,
StateList,
ChangeState,
- MissingTranslations,
+ TranslationIssues,
TranslatableTextOccurrences,
WatchTextElides,
DisableWatchTextElides,
+ // following are obsolete, just provided for compilation compatibility
+ MissingTranslations
};
enum class Reply {
LanguageChanged = 101,
StateList,
StateChanged,
- MissingTranslations,
+ TranslationIssues,
TranslatableTextOccurrences,
- TextElided,
+ // following are obsolete, just provided for compilation compatibility
+ MissingTranslations,
+ TextElided
};
inline QByteArray createChangeLanguageRequest(QDataStream &packet, const QUrl &url,
@@ -98,6 +102,12 @@ inline QByteArray createMissingTranslationsRequest(QDataStream &packet)
return qobject_cast<QBuffer *>(packet.device())->data();
}
+inline QByteArray createTranslationIssuesRequest(QDataStream &packet)
+{
+ packet << Request::TranslationIssues;
+ return qobject_cast<QBuffer *>(packet.device())->data();
+}
+
inline QByteArray createTranslatableTextOccurrencesRequest(QDataStream &packet)
{
packet << Request::TranslatableTextOccurrences;
diff --git a/src/qmldebug/qqmldebugtranslationclient.cpp b/src/qmldebug/qqmldebugtranslationclient.cpp
index a93184b95d..431cb67283 100644
--- a/src/qmldebug/qqmldebugtranslationclient.cpp
+++ b/src/qmldebug/qqmldebugtranslationclient.cpp
@@ -59,7 +59,7 @@ void QQmlDebugTranslationClient::messageReceived(const QByteArray &message)
packet >> type;
switch (type) {
- case QQmlDebugTranslation::Reply::MissingTranslations: {
+ case QQmlDebugTranslation::Reply::TranslationIssues: {
packet >> translationIssues;
break;
}
diff --git a/src/quick/items/qquicktext.cpp b/src/quick/items/qquicktext.cpp
index 0f17af1975..2b8517e9cf 100644
--- a/src/quick/items/qquicktext.cpp
+++ b/src/quick/items/qquicktext.cpp
@@ -1153,12 +1153,6 @@ QRectF QQuickTextPrivate::setupTextLayout(qreal *const baseline)
elideLayout->setFont(layout.font());
elideLayout->setTextOption(layout.textOption());
-#if QT_CONFIG(translation) && QT_CONFIG(qml_debug)
- if (QQmlDebugTranslationService *service
- = QQmlDebugConnector::service<QQmlDebugTranslationService>()) {
- elideText = service->foundElidedText(q, layoutText, elideText);
- }
-#endif //QT_CONFIG(translation)
elideLayout->setText(elideText);
elideLayout->beginLayout();