path: root/src/widgets
diff options
authorBradley T. Hughes <>2012-04-26 13:32:14 +0200
committerQt by Nokia <>2012-04-30 14:01:22 +0200
commitb46189c3c3a92c9093bd05bf976b2e7a368511a3 (patch)
tree13b1bbdf18b8542a58b2246071d96e89f174690e /src/widgets
parent842a0b094befeb6f023782da02e1ee649490091e (diff)
Support all modality types in QPlatformDialogHelper
Modality is not a boolean property in Qt. There are 2 types: window modality and application modality. Native dialogs can support both of these types as well (e.g. on Cocoa, a window modal file dialog should be displayed as a Sheet). Remove the QPlatformDialogHelper::ShowFlags enum and instead pass a Qt::WindowModality parameter to QPlatformDialogHelper::show_sys(). The Windows implementation has been updated to check for Qt::ApplicationModal instead of the ShowModal flag (since only Qt::ApplicationModal dialogs are blocking). The Cocoa implementation has been updated to only use non-modal and application modal native color and font dialogs (which restores Qt 4 behavior). These are shared Cocoa panels that cannot be shown as sheets, however. If the programmer asks for window modal color/font dialogs, we use the Qt versions, not the native ones. The file dialog can be shown either as a Sheet (but we need to pass an NSWindow parent for it to work properly) or as an application modal dialog. This change has been tested on Mac OS X with tests/manual/windowmodality. Change-Id: I9064987433895c55f68aac979ef8e8207fb24bbe Reviewed-by: Friedemann Kleint <> Reviewed-by: Morten Johan Sørvig <>
Diffstat (limited to 'src/widgets')
1 files changed, 2 insertions, 4 deletions
diff --git a/src/widgets/dialogs/qdialog.cpp b/src/widgets/dialogs/qdialog.cpp
index df76d0af0e..718d64bd27 100644
--- a/src/widgets/dialogs/qdialog.cpp
+++ b/src/widgets/dialogs/qdialog.cpp
@@ -108,11 +108,9 @@ bool QDialogPrivate::setNativeDialogVisible(bool visible)
if (QPlatformDialogHelper *helper = platformHelper()) {
if (visible) {
+ Q_Q(QDialog);
- QPlatformDialogHelper::ShowFlags flags(0);
- if (q_func()->isModal())
- flags |= QPlatformDialogHelper::ShowModal;
- nativeDialogInUse = helper->show_sys(flags, q_func()->windowFlags(), parentWindow());
+ nativeDialogInUse = helper->show_sys(q->windowFlags(), q->windowModality(), parentWindow());
} else {