diff options
Diffstat (limited to 'src/quicktemplates2')
-rw-r--r-- | src/quicktemplates2/qquickdialogbuttonbox.cpp | 44 | ||||
-rw-r--r-- | src/quicktemplates2/qquickdialogbuttonbox_p_p.h | 2 | ||||
-rw-r--r-- | src/quicktemplates2/qquickicon.cpp | 25 | ||||
-rw-r--r-- | src/quicktemplates2/qquickicon_p.h | 2 |
4 files changed, 65 insertions, 8 deletions
diff --git a/src/quicktemplates2/qquickdialogbuttonbox.cpp b/src/quicktemplates2/qquickdialogbuttonbox.cpp index 91fb41f2..10d80778 100644 --- a/src/quicktemplates2/qquickdialogbuttonbox.cpp +++ b/src/quicktemplates2/qquickdialogbuttonbox.cpp @@ -430,7 +430,8 @@ void QQuickDialogButtonBoxPrivate::removeStandardButtons() while (i >= 0) { QQuickAbstractButton *button = qobject_cast<QQuickAbstractButton *>(q->itemAt(i)); if (button) { - QQuickDialogButtonBoxAttached *attached = qobject_cast<QQuickDialogButtonBoxAttached *>(qmlAttachedPropertiesObject<QQuickDialogButtonBox>(button, false)); + QQuickDialogButtonBoxAttached *attached = qobject_cast<QQuickDialogButtonBoxAttached *>( + qmlAttachedPropertiesObject<QQuickDialogButtonBox>(button, false)); if (attached) { QQuickDialogButtonBoxAttachedPrivate *p = QQuickDialogButtonBoxAttachedPrivate::get(attached); if (p->standardButton != QPlatformDialogHelper::NoButton) { @@ -443,6 +444,24 @@ void QQuickDialogButtonBoxPrivate::removeStandardButtons() } } +void QQuickDialogButtonBoxPrivate::updateLanguage() +{ + Q_Q(QQuickDialogButtonBox); + int i = q->count() - 1; + while (i >= 0) { + QQuickAbstractButton *button = qobject_cast<QQuickAbstractButton *>(itemAt(i)); + if (button) { + QQuickDialogButtonBoxAttached *attached = qobject_cast<QQuickDialogButtonBoxAttached *>( + qmlAttachedPropertiesObject<QQuickDialogButtonBox>(button, true)); + const auto boxAttachedPrivate = QQuickDialogButtonBoxAttachedPrivate::get(attached); + const QPlatformDialogHelper::StandardButton standardButton = boxAttachedPrivate->standardButton; + const QString buttonText = QGuiApplicationPrivate::platformTheme()->standardButtonText(standardButton); + button->setText(QPlatformTheme::removeMnemonics(buttonText)); + } + --i; + } +} + QQuickDialogButtonBox::QQuickDialogButtonBox(QQuickItem *parent) : QQuickContainer(*(new QQuickDialogButtonBoxPrivate), parent) { @@ -684,11 +703,34 @@ void QQuickDialogButtonBox::updatePolish() d->updateLayout(); } +class LanguageEventFilter : public QObject +{ +public: + LanguageEventFilter(QQuickDialogButtonBoxPrivate *box) + : QObject(box->q_ptr) + , boxPrivate(box) + { + } + +protected: + bool eventFilter(QObject *, QEvent *event) + { + if (event->type() == QEvent::LanguageChange) + boxPrivate->updateLanguage(); + return false; + } + +private: + QQuickDialogButtonBoxPrivate *boxPrivate; +}; + void QQuickDialogButtonBox::componentComplete() { Q_D(QQuickDialogButtonBox); QQuickContainer::componentComplete(); d->updateLayout(); + // TODO: use the solution in QTBUG-78141 instead, when it's implemented. + qApp->installEventFilter(new LanguageEventFilter(d)); } void QQuickDialogButtonBox::geometryChanged(const QRectF &newGeometry, const QRectF &oldGeometry) diff --git a/src/quicktemplates2/qquickdialogbuttonbox_p_p.h b/src/quicktemplates2/qquickdialogbuttonbox_p_p.h index 66386911..6f9c9033 100644 --- a/src/quicktemplates2/qquickdialogbuttonbox_p_p.h +++ b/src/quicktemplates2/qquickdialogbuttonbox_p_p.h @@ -78,6 +78,8 @@ public: QQuickAbstractButton *createStandardButton(QPlatformDialogHelper::StandardButton button); void removeStandardButtons(); + void updateLanguage(); + Qt::Alignment alignment = 0; QQuickDialogButtonBox::Position position = QQuickDialogButtonBox::Footer; QPlatformDialogHelper::StandardButtons standardButtons = QPlatformDialogHelper::NoButton; diff --git a/src/quicktemplates2/qquickicon.cpp b/src/quicktemplates2/qquickicon.cpp index 5a689108..bf0a4658 100644 --- a/src/quicktemplates2/qquickicon.cpp +++ b/src/quicktemplates2/qquickicon.cpp @@ -112,12 +112,14 @@ void QQuickIcon::setName(const QString &name) if ((d->resolveMask & QQuickIconPrivate::NameResolved) && d->name == name) return; + d.detach(); d->name = name; d->resolveMask |= QQuickIconPrivate::NameResolved; } void QQuickIcon::resetName() { + d.detach(); d->name = QString(); d->resolveMask &= ~QQuickIconPrivate::NameResolved; } @@ -132,12 +134,14 @@ void QQuickIcon::setSource(const QUrl &source) if ((d->resolveMask & QQuickIconPrivate::SourceResolved) && d->source == source) return; + d.detach(); d->source = source; d->resolveMask |= QQuickIconPrivate::SourceResolved; } void QQuickIcon::resetSource() { + d.detach(); d->source = QString(); d->resolveMask &= ~QQuickIconPrivate::SourceResolved; } @@ -152,12 +156,14 @@ void QQuickIcon::setWidth(int width) if ((d->resolveMask & QQuickIconPrivate::WidthResolved) && d->width == width) return; + d.detach(); d->width = width; d->resolveMask |= QQuickIconPrivate::WidthResolved; } void QQuickIcon::resetWidth() { + d.detach(); d->width = 0; d->resolveMask &= ~QQuickIconPrivate::WidthResolved; } @@ -172,12 +178,14 @@ void QQuickIcon::setHeight(int height) if ((d->resolveMask & QQuickIconPrivate::HeightResolved) && d->height == height) return; + d.detach(); d->height = height; d->resolveMask |= QQuickIconPrivate::HeightResolved; } void QQuickIcon::resetHeight() { + d.detach(); d->height = 0; d->resolveMask &= ~QQuickIconPrivate::HeightResolved; } @@ -192,12 +200,14 @@ void QQuickIcon::setColor(const QColor &color) if ((d->resolveMask & QQuickIconPrivate::ColorResolved) && d->color == color) return; + d.detach(); d->color = color; d->resolveMask |= QQuickIconPrivate::ColorResolved; } void QQuickIcon::resetColor() { + d.detach(); d->color = Qt::transparent; d->resolveMask &= ~QQuickIconPrivate::ColorResolved; } @@ -212,12 +222,14 @@ void QQuickIcon::setCache(bool cache) if ((d->resolveMask & QQuickIconPrivate::CacheResolved) && d->cache == cache) return; + d.detach(); d->cache = cache; d->resolveMask |= QQuickIconPrivate::CacheResolved; } void QQuickIcon::resetCache() { + d.detach(); d->cache = true; d->resolveMask &= ~QQuickIconPrivate::CacheResolved; } @@ -225,24 +237,25 @@ void QQuickIcon::resetCache() QQuickIcon QQuickIcon::resolve(const QQuickIcon &other) const { QQuickIcon resolved = *this; + resolved.d.detach(); if (!(d->resolveMask & QQuickIconPrivate::NameResolved)) - resolved.setName(other.name()); + resolved.d->name = other.d->name; if (!(d->resolveMask & QQuickIconPrivate::SourceResolved)) - resolved.setSource(other.source()); + resolved.d->source = other.d->source; if (!(d->resolveMask & QQuickIconPrivate::WidthResolved)) - resolved.setWidth(other.width()); + resolved.d->width = other.d->width; if (!(d->resolveMask & QQuickIconPrivate::HeightResolved)) - resolved.setHeight(other.height()); + resolved.d->height = other.d->height; if (!(d->resolveMask & QQuickIconPrivate::ColorResolved)) - resolved.setColor(other.color()); + resolved.d->color = other.d->color; if (!(d->resolveMask & QQuickIconPrivate::CacheResolved)) - resolved.setCache(other.cache()); + resolved.d->cache = other.d->cache; return resolved; } diff --git a/src/quicktemplates2/qquickicon_p.h b/src/quicktemplates2/qquickicon_p.h index 57cab720..1835585d 100644 --- a/src/quicktemplates2/qquickicon_p.h +++ b/src/quicktemplates2/qquickicon_p.h @@ -107,7 +107,7 @@ public: QQuickIcon resolve(const QQuickIcon &other) const; private: - QSharedDataPointer<QQuickIconPrivate> d; + QExplicitlySharedDataPointer<QQuickIconPrivate> d; }; QT_END_NAMESPACE |