summaryrefslogtreecommitdiffstats
path: root/src/plugins/platforms/cocoa
diff options
context:
space:
mode:
authorShawn Rutledge <shawn.rutledge@digia.com>2014-08-25 15:46:13 +0200
committerShawn Rutledge <shawn.rutledge@digia.com>2014-08-25 17:04:37 +0200
commit9d9ef74a6c260b10cf7ee0ec8837261715d29a5c (patch)
tree9db0bc391d4f0a24c2e7b6b8bd14ad0049434784 /src/plugins/platforms/cocoa
parent4ca7b23dc007afd58928dc6949cb797903f10951 (diff)
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>
Diffstat (limited to 'src/plugins/platforms/cocoa')
-rw-r--r--src/plugins/platforms/cocoa/qcocoacolordialoghelper.mm19
1 files changed, 19 insertions, 0 deletions
diff --git a/src/plugins/platforms/cocoa/qcocoacolordialoghelper.mm b/src/plugins/platforms/cocoa/qcocoacolordialoghelper.mm
index 5a7cdec83e..8158c244ab 100644
--- a/src/plugins/platforms/cocoa/qcocoacolordialoghelper.mm
+++ b/src/plugins/platforms/cocoa/qcocoacolordialoghelper.mm
@@ -81,6 +81,7 @@ static NSButton *macCreateButton(const char *text, NSView *superview)
NSInteger mResultCode;
BOOL mDialogIsExecuting;
BOOL mResultSet;
+ BOOL mClosingDueToKnownButton;
};
- (void)restoreOriginalContentView;
- (void)relayout;
@@ -103,6 +104,7 @@ QT_NAMESPACE_ALIAS_OBJC_CLASS(QNSColorPanelDelegate);
mResultCode = NSCancelButton;
mDialogIsExecuting = false;
mResultSet = false;
+ mClosingDueToKnownButton = false;
#if MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_7
if (QSysInfo::MacintoshVersion >= QSysInfo::MV_10_7)
@@ -114,6 +116,11 @@ QT_NAMESPACE_ALIAS_OBJC_CLASS(QNSColorPanelDelegate);
name:NSColorPanelColorDidChangeNotification
object:mColorPanel];
+ [[NSNotificationCenter defaultCenter] addObserver:self
+ selector:@selector(windowWillClose:)
+ name:NSWindowWillCloseNotification
+ object:mColorPanel];
+
[mColorPanel retain];
return self;
}
@@ -179,6 +186,15 @@ QT_NAMESPACE_ALIAS_OBJC_CLASS(QNSColorPanelDelegate);
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
{
if (mStolenContentView) {
@@ -246,6 +262,7 @@ QT_NAMESPACE_ALIAS_OBJC_CLASS(QNSColorPanelDelegate);
- (void)onOkClicked
{
+ mClosingDueToKnownButton = true;
[mColorPanel close];
[self updateQtColor];
[self finishOffWithCode:NSOKButton];
@@ -254,6 +271,7 @@ QT_NAMESPACE_ALIAS_OBJC_CLASS(QNSColorPanelDelegate);
- (void)onCancelClicked
{
if (mOkButton) {
+ mClosingDueToKnownButton = true;
[mColorPanel close];
mQtColor = QColor();
[self finishOffWithCode:NSCancelButton];
@@ -298,6 +316,7 @@ QT_NAMESPACE_ALIAS_OBJC_CLASS(QNSColorPanelDelegate);
{
mDialogIsExecuting = false;
mResultSet = false;
+ mClosingDueToKnownButton = false;
[mColorPanel makeKeyAndOrderFront:mColorPanel];
}