diff options
author | Liang Qi <liang.qi@qt.io> | 2017-04-18 15:56:51 +0200 |
---|---|---|
committer | Liang Qi <liang.qi@qt.io> | 2017-04-18 15:56:51 +0200 |
commit | f5b91d87a49c4e34063e72aa06a0f3d8eb1be50a (patch) | |
tree | ea73d00b663b00dc78a52d02914755544bef6358 /src | |
parent | bfc784a53771e4cb700e07495125b20a4f3b949c (diff) | |
parent | 91e29613f9671989455345a01da9f840a98d06f9 (diff) |
Merge remote-tracking branch 'origin/5.8' into 5.9
Change-Id: Ia851f3ac828908ad693f393797e1e2c54bea5eef
Diffstat (limited to 'src')
4 files changed, 30 insertions, 3 deletions
diff --git a/src/imports/controls/material/DialogButtonBox.qml b/src/imports/controls/material/DialogButtonBox.qml index c36a7749..c4b3e0ad 100644 --- a/src/imports/controls/material/DialogButtonBox.qml +++ b/src/imports/controls/material/DialogButtonBox.qml @@ -50,8 +50,8 @@ T.DialogButtonBox { spacing: 8 padding: 8 - topPadding: padding - 4 - bottomPadding: padding - 4 + topPadding: 2 + bottomPadding: 2 alignment: Qt.AlignRight Material.foreground: Material.accent @@ -73,6 +73,7 @@ T.DialogButtonBox { implicitHeight: 52 radius: 2 color: control.Material.dialogColor + // Rounded corners should be only at the top or at the bottom topPadding: control.position === T.DialogButtonBox.Footer ? -2 : 0 bottomPadding: control.position === T.DialogButtonBox.Header ? -2 : 0 clip: true diff --git a/src/imports/controls/material/qquickmaterialtheme.cpp b/src/imports/controls/material/qquickmaterialtheme.cpp index 63def7a5..3ea41779 100644 --- a/src/imports/controls/material/qquickmaterialtheme.cpp +++ b/src/imports/controls/material/qquickmaterialtheme.cpp @@ -36,6 +36,7 @@ #include "qquickmaterialtheme_p.h" +#include <QtGui/qpa/qplatformdialoghelper.h> #include <QtGui/qfont.h> #include <QtGui/qfontinfo.h> @@ -105,4 +106,21 @@ const QFont *QQuickMaterialTheme::font(QPlatformTheme::Font type) const } } +QVariant QQuickMaterialTheme::themeHint(ThemeHint hint) const +{ + switch (hint) { + case QPlatformTheme::DialogButtonBoxLayout: + // https://material.io/guidelines/components/dialogs.html#dialogs-specs + // As per spec, affirmative actions are placed to the right, dismissive + // actions are placed directly to the left of affirmative actions. + // In the Android sources, there are additional type of actions - + // neutral, which are placed to the left. + // Rules for macOS seems to be the most suitable here and are also used + // in the Android QPA plugin. + return QVariant(QPlatformDialogHelper::MacLayout); + default: + return QQuickProxyTheme::themeHint(hint); + } +} + QT_END_NAMESPACE diff --git a/src/imports/controls/material/qquickmaterialtheme_p.h b/src/imports/controls/material/qquickmaterialtheme_p.h index 828ca83a..d505d4ff 100644 --- a/src/imports/controls/material/qquickmaterialtheme_p.h +++ b/src/imports/controls/material/qquickmaterialtheme_p.h @@ -48,6 +48,7 @@ // We mean it. // +#include <QtCore/qvariant.h> #include <QtGui/qfont.h> #include <QtQuickControls2/private/qquickproxytheme_p.h> @@ -60,6 +61,8 @@ public: const QFont *font(Font type = SystemFont) const override; + QVariant themeHint(ThemeHint hint) const override; + private: QFont systemFont; QFont buttonFont; diff --git a/src/quicktemplates2/qquickdialogbuttonbox.cpp b/src/quicktemplates2/qquickdialogbuttonbox.cpp index 386577da..3c422268 100644 --- a/src/quicktemplates2/qquickdialogbuttonbox.cpp +++ b/src/quicktemplates2/qquickdialogbuttonbox.cpp @@ -258,7 +258,12 @@ void QQuickDialogButtonBoxPrivate::updateLayout() return firstRole != QPlatformDialogHelper::InvalidRole; } - const int *m_layout = QPlatformDialogHelper::buttonLayout(); + static const int *themeButtonLayout() + { + const int hint = QGuiApplicationPrivate::platformTheme()->themeHint(QPlatformTheme::DialogButtonBoxLayout).toInt(); + return QPlatformDialogHelper::buttonLayout(Qt::Horizontal, static_cast<QPlatformDialogHelper::ButtonLayout>(hint)); + } + const int *m_layout = themeButtonLayout(); }; std::sort(buttons.begin(), buttons.end(), ButtonLayout()); |