OS X QColorDialog: emit reject() when closed by the titlebar button

but only if there is a Cancel button.  A color dialog without a cancel
button might be kept open and apply to various selections, so it
doesn't make sense to reject such a dialog, only to close it.

Task-number: QTBUG-40855
Change-Id: Ifffb4ae81307c72259ed388a4776ba09543603e7
Reviewed-by: Gabriel de Dietrich <gabriel.dedietrich@digia.com>
This commit is contained in:
Shawn Rutledge 2014-08-25 15:46:13 +02:00
parent 4ca7b23dc0
commit 9d9ef74a6c

View File

@ -81,6 +81,7 @@ static NSButton *macCreateButton(const char *text, NSView *superview)
NSInteger mResultCode; NSInteger mResultCode;
BOOL mDialogIsExecuting; BOOL mDialogIsExecuting;
BOOL mResultSet; BOOL mResultSet;
BOOL mClosingDueToKnownButton;
}; };
- (void)restoreOriginalContentView; - (void)restoreOriginalContentView;
- (void)relayout; - (void)relayout;
@ -103,6 +104,7 @@ QT_NAMESPACE_ALIAS_OBJC_CLASS(QNSColorPanelDelegate);
mResultCode = NSCancelButton; mResultCode = NSCancelButton;
mDialogIsExecuting = false; mDialogIsExecuting = false;
mResultSet = false; mResultSet = false;
mClosingDueToKnownButton = false;
#if MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_7 #if MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_7
if (QSysInfo::MacintoshVersion >= QSysInfo::MV_10_7) if (QSysInfo::MacintoshVersion >= QSysInfo::MV_10_7)
@ -114,6 +116,11 @@ QT_NAMESPACE_ALIAS_OBJC_CLASS(QNSColorPanelDelegate);
name:NSColorPanelColorDidChangeNotification name:NSColorPanelColorDidChangeNotification
object:mColorPanel]; object:mColorPanel];
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(windowWillClose:)
name:NSWindowWillCloseNotification
object:mColorPanel];
[mColorPanel retain]; [mColorPanel retain];
return self; return self;
} }
@ -179,6 +186,15 @@ QT_NAMESPACE_ALIAS_OBJC_CLASS(QNSColorPanelDelegate);
emit mHelper->colorSelected(mQtColor); emit mHelper->colorSelected(mQtColor);
} }
- (void)windowWillClose:(NSNotification *)notification
{
Q_UNUSED(notification);
if (mCancelButton && mHelper && !mClosingDueToKnownButton) {
mClosingDueToKnownButton = true; // prevent repeating emit
emit mHelper->reject();
}
}
- (void)restoreOriginalContentView - (void)restoreOriginalContentView
{ {
if (mStolenContentView) { if (mStolenContentView) {
@ -246,6 +262,7 @@ QT_NAMESPACE_ALIAS_OBJC_CLASS(QNSColorPanelDelegate);
- (void)onOkClicked - (void)onOkClicked
{ {
mClosingDueToKnownButton = true;
[mColorPanel close]; [mColorPanel close];
[self updateQtColor]; [self updateQtColor];
[self finishOffWithCode:NSOKButton]; [self finishOffWithCode:NSOKButton];
@ -254,6 +271,7 @@ QT_NAMESPACE_ALIAS_OBJC_CLASS(QNSColorPanelDelegate);
- (void)onCancelClicked - (void)onCancelClicked
{ {
if (mOkButton) { if (mOkButton) {
mClosingDueToKnownButton = true;
[mColorPanel close]; [mColorPanel close];
mQtColor = QColor(); mQtColor = QColor();
[self finishOffWithCode:NSCancelButton]; [self finishOffWithCode:NSCancelButton];
@ -298,6 +316,7 @@ QT_NAMESPACE_ALIAS_OBJC_CLASS(QNSColorPanelDelegate);
{ {
mDialogIsExecuting = false; mDialogIsExecuting = false;
mResultSet = false; mResultSet = false;
mClosingDueToKnownButton = false;
[mColorPanel makeKeyAndOrderFront:mColorPanel]; [mColorPanel makeKeyAndOrderFront:mColorPanel];
} }