QPlatformDialogHelper: change ButtonRole flags to ensure 32-bit size

0x80000000 is too big for a signed 32-bit int, so the compiler ends
up choosing a 64-bit number.  Then it will not be the same size as
the parallel enum QDialogButtonBox::ButtonRole, which does not have
these extra flags.  By making EOL be the same as InvalidRole and
changing Reverse to 0x40000000, we don't need to use 0x80000000 at
all, so again the compiler can choose a 32-bit representation
for both if appropriate.  EOL is used as a terminator in the
static const int buttonRoleLayouts table and therefore as a terminator
in arrays returned from QPlatformDialogHelper::buttonLayout().
It's internal API so it's OK to change in a minor release, but
QtQuick.Dialogs is also looking for the EOL now, so we should avoid
changing it again if possible.  This is mainly for efficiency and
for avoiding surprise data type conversions when casting from one
enum to the other.

Change-Id: Ia7b7ce43c8f929d09dd999769e9b7114f695e9a4
Reviewed-by: Friedemann Kleint <Friedemann.Kleint@digia.com>
This commit is contained in:
Shawn Rutledge 2014-02-14 17:45:41 +01:00 committed by The Qt Project
parent 00b96399e6
commit 70f4bf1a48
3 changed files with 6 additions and 6 deletions

View File

@ -62,7 +62,7 @@ QT_BEGIN_NAMESPACE
*/
static const quint32 buttonRoleLayouts[2][5][14] =
static const int buttonRoleLayouts[2][5][14] =
{
// Qt::Horizontal
{
@ -800,7 +800,7 @@ QPlatformDialogHelper::ButtonRole QPlatformDialogHelper::buttonRole(QPlatformDia
return InvalidRole;
}
const quint32 *QPlatformDialogHelper::buttonLayout(Qt::Orientation orientation, ButtonLayout policy)
const int *QPlatformDialogHelper::buttonLayout(Qt::Orientation orientation, ButtonLayout policy)
{
if (policy == UnknownLayout) {
#if defined (Q_OS_OSX)

View File

@ -133,8 +133,8 @@ public:
RoleMask = 0x0FFFFFFF,
AlternateRole = 0x10000000,
Stretch = 0x20000000,
EOL = 0x40000000,
Reverse = 0x80000000
Reverse = 0x40000000,
EOL = InvalidRole
};
enum ButtonLayout {
@ -160,7 +160,7 @@ public:
static QVariant defaultStyleHint(QPlatformDialogHelper::StyleHint hint);
static const quint32 *buttonLayout(Qt::Orientation orientation = Qt::Horizontal, ButtonLayout policy = UnknownLayout);
static const int *buttonLayout(Qt::Orientation orientation = Qt::Horizontal, ButtonLayout policy = UnknownLayout);
static ButtonRole buttonRole(StandardButton button);
Q_SIGNALS:

View File

@ -266,7 +266,7 @@ void QDialogButtonBoxPrivate::layoutButtons()
tmpPolicy = 4; // Mac modeless
}
const quint32 *currentLayout = QPlatformDialogHelper::buttonLayout(
const int *currentLayout = QPlatformDialogHelper::buttonLayout(
orientation, static_cast<QPlatformDialogHelper::ButtonLayout>(tmpPolicy));
if (center)