summaryrefslogtreecommitdiffstats
path: root/src/plugins/platforms/android/qandroidplatformdialoghelpers.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/plugins/platforms/android/qandroidplatformdialoghelpers.cpp')
-rw-r--r--src/plugins/platforms/android/qandroidplatformdialoghelpers.cpp25
1 files changed, 20 insertions, 5 deletions
diff --git a/src/plugins/platforms/android/qandroidplatformdialoghelpers.cpp b/src/plugins/platforms/android/qandroidplatformdialoghelpers.cpp
index b43c714482..cc2a394d6e 100644
--- a/src/plugins/platforms/android/qandroidplatformdialoghelpers.cpp
+++ b/src/plugins/platforms/android/qandroidplatformdialoghelpers.cpp
@@ -97,11 +97,15 @@ bool QAndroidPlatformMessageDialogHelper::show(Qt::WindowFlags windowFlags
if (!str.isEmpty())
m_javaMessageDialog.callMethod<void>("setDetailedText", "(Ljava/lang/String;)V", QJNIObjectPrivate::fromString(str).object());
- for (int i = QPlatformDialogHelper::FirstButton; i < QPlatformDialogHelper::LastButton; i<<=1) {
- if ( opt->standardButtons() & i ) {
- const QString text = QGuiApplicationPrivate::platformTheme()->standardButtonText(i);
- m_javaMessageDialog.callMethod<void>("addButton", "(ILjava/lang/String;)V", i, QJNIObjectPrivate::fromString(text).object());
- }
+ // http://developer.android.com/design/building-blocks/dialogs.html
+ // dismissive action on the left, affirmative on the right
+ // There don't seem to be more fine-grained rules, but the OS X layout
+ // at least conforms to this one rule and makes the rest deterministic.
+ const int * currentLayout = buttonLayout(Qt::Horizontal, MacLayout);
+ while (*currentLayout != QPlatformDialogHelper::EOL) {
+ int role = (*currentLayout & ~QPlatformDialogHelper::Reverse);
+ addButtons(opt, static_cast<ButtonRole>(role));
+ ++currentLayout;
}
m_javaMessageDialog.callMethod<void>("show", "(J)V", jlong(static_cast<QObject*>(this)));
@@ -109,6 +113,17 @@ bool QAndroidPlatformMessageDialogHelper::show(Qt::WindowFlags windowFlags
return true;
}
+void QAndroidPlatformMessageDialogHelper::addButtons(QSharedPointer<QMessageDialogOptions> opt, ButtonRole role)
+{
+ for (int i = QPlatformDialogHelper::FirstButton; i < QPlatformDialogHelper::LastButton; i<<=1) {
+ StandardButton b = static_cast<StandardButton>(i);
+ if (buttonRole(b) == role && (opt->standardButtons() & i)) {
+ const QString text = QGuiApplicationPrivate::platformTheme()->standardButtonText(b);
+ m_javaMessageDialog.callMethod<void>("addButton", "(ILjava/lang/String;)V", i, QJNIObjectPrivate::fromString(text).object());
+ }
+ }
+}
+
void QAndroidPlatformMessageDialogHelper::hide()
{
m_javaMessageDialog.callMethod<void>("hide", "()V");