Support all modality types in QPlatformDialogHelper
authorBradley T. Hughes <bradley.hughes@nokia.com>
Thu, 26 Apr 2012 11:32:14 +0000 (13:32 +0200)
committerQt by Nokia <qt-info@nokia.com>
Mon, 30 Apr 2012 12:01:22 +0000 (14:01 +0200)
commitb46189c3c3a92c9093bd05bf976b2e7a368511a3
tree13b1bbdf18b8542a58b2246071d96e89f174690e
parent842a0b094befeb6f023782da02e1ee649490091e
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 <Friedemann.Kleint@nokia.com>
Reviewed-by: Morten Johan Sørvig <morten.sorvig@nokia.com>
src/gui/kernel/qplatformdialoghelper_qpa.h
src/plugins/platforms/cocoa/qcocoacolordialoghelper.h
src/plugins/platforms/cocoa/qcocoacolordialoghelper.mm
src/plugins/platforms/cocoa/qcocoafiledialoghelper.h
src/plugins/platforms/cocoa/qcocoafiledialoghelper.mm
src/plugins/platforms/cocoa/qcocoafontdialoghelper.h
src/plugins/platforms/cocoa/qcocoafontdialoghelper.mm
src/plugins/platforms/windows/qwindowsdialoghelpers.cpp
src/plugins/platforms/windows/qwindowsdialoghelpers.h
src/widgets/dialogs/qdialog.cpp