diff options
Diffstat (limited to 'src/quickdialogs')
8 files changed, 58 insertions, 22 deletions
diff --git a/src/quickdialogs/quickdialogs/qquickabstractdialog.cpp b/src/quickdialogs/quickdialogs/qquickabstractdialog.cpp index 857a75c7bd..101870ec84 100644 --- a/src/quickdialogs/quickdialogs/qquickabstractdialog.cpp +++ b/src/quickdialogs/quickdialogs/qquickabstractdialog.cpp @@ -53,7 +53,14 @@ Q_LOGGING_CATEGORY(lcDialogs, "qt.quick.dialogs") v | +-----------------+ | | m_handle valid? |--------------------->false - +-----------------+ + +-----------------+ ^ + | | + v | + true | + | | + +-------------------+ | + | m_handle->show()? |------------------->false + +-------------------+ | v true @@ -287,7 +294,25 @@ void QQuickAbstractDialog::open() return; onShow(m_handle.get()); + m_visible = m_handle->show(m_flags, m_modality, m_parentWindow); + if (!m_visible && useNativeDialog()) { + // Fall back to non-native dialog + destroy(); + if (!create(CreateOptions::DontTryNativeDialog)) + return; + + onShow(m_handle.get()); + m_visible = m_handle->show(m_flags, m_modality, m_parentWindow); + + if (m_visible) { + // The conditions that caused the non-native fallback might have + // changed the next time open() is called, so we should try again + // with a native dialog when that happens. + QObject::connect(this, &QQuickAbstractDialog::visibleChanged, + m_handle.get(), [this]{ if (!isVisible()) destroy(); }); + } + } if (m_visible) { m_result = Rejected; // in case an accepted dialog gets re-opened, then closed emit visibleChanged(); @@ -387,15 +412,15 @@ QPlatformTheme::DialogType toPlatformDialogType(QQuickDialogType quickDialogType ? QPlatformTheme::FileDialog : static_cast<QPlatformTheme::DialogType>(quickDialogType); } -bool QQuickAbstractDialog::create() +bool QQuickAbstractDialog::create(CreateOptions createOptions) { qCDebug(lcDialogs) << qmlTypeName(this) << "attempting to create dialog backend of type" << int(m_type) << "with parent window" << m_parentWindow; if (m_handle) return m_handle.get(); - qCDebug(lcDialogs) << "- attempting to create a native dialog"; - if (useNativeDialog()) { + if ((createOptions != CreateOptions::DontTryNativeDialog) && useNativeDialog()) { + qCDebug(lcDialogs) << "- attempting to create a native dialog"; m_handle.reset(QGuiApplicationPrivate::platformTheme()->createPlatformDialogHelper( toPlatformDialogType(m_type))); } diff --git a/src/quickdialogs/quickdialogs/qquickabstractdialog_p.h b/src/quickdialogs/quickdialogs/qquickabstractdialog_p.h index f1d046eb89..e314eb27b4 100644 --- a/src/quickdialogs/quickdialogs/qquickabstractdialog_p.h +++ b/src/quickdialogs/quickdialogs/qquickabstractdialog_p.h @@ -98,7 +98,8 @@ protected: void classBegin() override; void componentComplete() override; - bool create(); + enum class CreateOptions { TryAllDialogTypes = 0, DontTryNativeDialog = 1 }; + bool create(CreateOptions = CreateOptions::TryAllDialogTypes); void destroy(); virtual bool useNativeDialog() const; diff --git a/src/quickdialogs/quickdialogsquickimpl/qml/+Fusion/FileDialog.qml b/src/quickdialogs/quickdialogsquickimpl/qml/+Fusion/FileDialog.qml index 965f56bdc7..3b71a415e2 100644 --- a/src/quickdialogs/quickdialogsquickimpl/qml/+Fusion/FileDialog.qml +++ b/src/quickdialogs/quickdialogsquickimpl/qml/+Fusion/FileDialog.qml @@ -38,10 +38,12 @@ FileDialogImpl { closePolicy: Popup.CloseOnEscape | Popup.CloseOnPressOutsideParent dim: true modal: true - title: qsTr("“%1” already exists. Do you want to replace it?").arg(control.fileName) + title: qsTr("Overwrite file?") + width: control.width - control.leftPadding - control.rightPadding - Label { - text: qsTr("A file with the same name already exists in %1.\nReplacing it will overwrite its current contents.").arg(control.currentFolderName) + contentItem: Label { + text: qsTr("“%1” already exists.\nDo you want to replace it?").arg(control.fileName) + wrapMode: Text.WordWrap } footer: DialogButtonBox { diff --git a/src/quickdialogs/quickdialogsquickimpl/qml/+Imagine/FileDialog.qml b/src/quickdialogs/quickdialogsquickimpl/qml/+Imagine/FileDialog.qml index 8568be710a..3da17f60ce 100644 --- a/src/quickdialogs/quickdialogsquickimpl/qml/+Imagine/FileDialog.qml +++ b/src/quickdialogs/quickdialogsquickimpl/qml/+Imagine/FileDialog.qml @@ -47,12 +47,12 @@ FileDialogImpl { dim: true modal: true spacing: 12 - title: qsTr("“%1” already exists. Do you want to replace it?").arg(control.fileName) + title: qsTr("Overwrite file?") + width: control.width - control.leftPadding - control.rightPadding - Label { - anchors.horizontalCenter: parent.horizontalCenter - text: qsTr("A file with the same name already exists in %1.\nReplacing it will overwrite its current contents.").arg(control.currentFolderName) - horizontalAlignment: Text.AlignHCenter + contentItem: Label { + text: qsTr("“%1” already exists.\nDo you want to replace it?").arg(control.fileName) + wrapMode: Text.WordWrap } footer: DialogButtonBox { diff --git a/src/quickdialogs/quickdialogsquickimpl/qml/+Material/FileDialog.qml b/src/quickdialogs/quickdialogsquickimpl/qml/+Material/FileDialog.qml index 9700aeba79..c467e5a40c 100644 --- a/src/quickdialogs/quickdialogsquickimpl/qml/+Material/FileDialog.qml +++ b/src/quickdialogs/quickdialogsquickimpl/qml/+Material/FileDialog.qml @@ -39,10 +39,13 @@ FileDialogImpl { closePolicy: Popup.CloseOnEscape | Popup.CloseOnPressOutsideParent dim: true modal: true - title: qsTr("“%1” already exists. Do you want to replace it?").arg(control.fileName) + title: qsTr("Overwrite file?") + width: control.width - control.leftPadding - control.rightPadding + clip: true - Label { - text: qsTr("A file with the same name already exists in %1.\nReplacing it will overwrite its current contents.").arg(control.currentFolderName) + contentItem: Label { + text: qsTr("“%1” already exists.\nDo you want to replace it?").arg(control.fileName) + wrapMode: Text.WordWrap } footer: DialogButtonBox { diff --git a/src/quickdialogs/quickdialogsquickimpl/qml/+Universal/FileDialog.qml b/src/quickdialogs/quickdialogsquickimpl/qml/+Universal/FileDialog.qml index 0d2db8b426..b0bc98ee00 100644 --- a/src/quickdialogs/quickdialogsquickimpl/qml/+Universal/FileDialog.qml +++ b/src/quickdialogs/quickdialogsquickimpl/qml/+Universal/FileDialog.qml @@ -37,10 +37,12 @@ FileDialogImpl { closePolicy: Popup.CloseOnEscape | Popup.CloseOnPressOutsideParent dim: true modal: true - title: qsTr("“%1” already exists. Do you want to replace it?").arg(control.fileName) + title: qsTr("Overwrite file?") + width: control.width - control.leftPadding - control.rightPadding - Label { - text: qsTr("A file with the same name already exists in %1.\nReplacing it will overwrite its current contents.").arg(control.currentFolderName) + contentItem: Label { + text: qsTr("“%1” already exists.\nDo you want to replace it?").arg(control.fileName) + wrapMode: Text.WordWrap } footer: DialogButtonBox { diff --git a/src/quickdialogs/quickdialogsquickimpl/qml/FileDialog.qml b/src/quickdialogs/quickdialogsquickimpl/qml/FileDialog.qml index defb7dd4e2..536634edb6 100644 --- a/src/quickdialogs/quickdialogsquickimpl/qml/FileDialog.qml +++ b/src/quickdialogs/quickdialogsquickimpl/qml/FileDialog.qml @@ -41,10 +41,12 @@ FileDialogImpl { closePolicy: Popup.CloseOnEscape | Popup.CloseOnPressOutsideParent dim: true modal: true - title: qsTr("“%1” already exists. Do you want to replace it?").arg(control.fileName) + title: qsTr("Overwrite file?") + width: control.width - control.leftPadding - control.rightPadding - Label { - text: qsTr("A file with the same name already exists in %1.\nReplacing it will overwrite its current contents.").arg(control.currentFolderName) + contentItem: Label { + text: qsTr("“%1” already exists.\nDo you want to replace it?").arg(control.fileName) + wrapMode: Text.WordWrap } footer: DialogButtonBox { diff --git a/src/quickdialogs/quickdialogsquickimpl/qml/MessageDialog.qml b/src/quickdialogs/quickdialogsquickimpl/qml/MessageDialog.qml index 5dc7ee7873..562e931a69 100644 --- a/src/quickdialogs/quickdialogsquickimpl/qml/MessageDialog.qml +++ b/src/quickdialogs/quickdialogsquickimpl/qml/MessageDialog.qml @@ -3,6 +3,7 @@ import QtQuick import QtQuick.Controls +import QtQuick.Controls.impl import QtQuick.Dialogs import QtQuick.Dialogs.quickimpl import QtQuick.Layouts |
