OSX: show file dialog in showCocoaFilePanel, don't wait for exec()

This reverts commit 21e6c7ae47
because in QtQuick.Controls, we do not call exec(): we just set the
dialog visible.  If it is a sheet, then it is already acting as a
modal dialog, basically.

Task-number: QTBUG-46691
Change-Id: I7fe89f2a2ade0d4ddcf540c9bfc4f5963a077471
Reviewed-by: Timur Pocheptsov <Timur.Pocheptsov@digia.com>
This commit is contained in:
Shawn Rutledge 2015-06-16 15:09:09 +02:00 committed by Jani Heikkinen
parent 997f52b83d
commit aec2b28eea
5 changed files with 8 additions and 33 deletions

View File

@ -137,12 +137,6 @@ QVariant QPlatformDialogHelper::defaultStyleHint(QPlatformDialogHelper::StyleHi
return QVariant();
}
void QPlatformDialogHelper::execModalForWindow(QWindow *parent)
{
Q_UNUSED(parent);
exec();
}
// Font dialog
class QFontDialogOptionsPrivate : public QSharedData

View File

@ -145,7 +145,6 @@ public:
virtual QVariant styleHint(StyleHint hint) const;
virtual void exec() = 0;
virtual void execModalForWindow(QWindow *parent);
virtual bool show(Qt::WindowFlags windowFlags,
Qt::WindowModality windowModality,
QWindow *parent) = 0;

View File

@ -51,7 +51,6 @@ public:
virtual ~QCocoaFileDialogHelper();
void exec();
void execModalForWindow(QWindow *parent);
bool defaultNameFilterDisables() const;

View File

@ -254,22 +254,17 @@ static QString strippedText(QString s)
|| [self panel:nil shouldShowFilename:filepath];
[self updateProperties];
QCocoaMenuBar::redirectKnownMenuItemsToFirstResponder();
[mSavePanel setDirectoryURL: [NSURL fileURLWithPath:mCurrentDir]];
[mSavePanel setNameFieldStringValue:selectable ? QCFString::toNSString(info.fileName()) : @""];
NSWindow *nsparent = static_cast<NSWindow *>(qGuiApp->platformNativeInterface()->nativeResourceForWindow("nswindow", parent));
qApp->processEvents(QEventLoop::ExcludeUserInputEvents | QEventLoop::ExcludeSocketNotifiers);
QCocoaMenuBar::redirectKnownMenuItemsToFirstResponder();
[mSavePanel beginSheetModalForWindow:nsparent completionHandler:^(NSInteger result){
[[NSApplication sharedApplication] stopModalWithCode:result];
mReturnCode = result;
if (mHelper)
mHelper->QNSOpenSavePanelDelegate_panelClosed(result == NSOKButton);
}];
mReturnCode = [[NSApplication sharedApplication] runModalForWindow:nsparent];
QAbstractEventDispatcher::instance()->interrupt();
if (mHelper)
mHelper->QNSOpenSavePanelDelegate_panelClosed(mReturnCode == NSOKButton);
}
- (BOOL)isHiddenFile:(NSString *)filename isDir:(BOOL)isDir
@ -711,15 +706,14 @@ void QCocoaFileDialogHelper::createNSOpenSavePanelDelegate()
bool QCocoaFileDialogHelper::showCocoaFilePanel(Qt::WindowModality windowModality, QWindow *parent)
{
Q_UNUSED(parent)
createNSOpenSavePanelDelegate();
if (!mDelegate)
return false;
if (windowModality == Qt::NonModal)
[mDelegate showModelessPanel];
// no need to show a Qt::ApplicationModal dialog here, since it will be done in exec;
// Qt::WindowModal will be done in execModalForWindow.
else if (windowModality == Qt::WindowModal && parent)
[mDelegate showWindowModalSheet:parent];
// no need to show a Qt::ApplicationModal dialog here, since it will be done in _q_platformRunNativeAppModalPanel()
return true;
}
@ -751,14 +745,6 @@ void QCocoaFileDialogHelper::exec()
}
void QCocoaFileDialogHelper::execModalForWindow(QWindow *parent)
{
if (!parent)
return exec();
[mDelegate showWindowModalSheet:parent];
}
bool QCocoaFileDialogHelper::defaultNameFilterDisables() const
{
return true;

View File

@ -534,10 +534,7 @@ int QDialog::exec()
QPointer<QDialog> guard = this;
if (d->nativeDialogInUse) {
if (windowModality() == Qt::WindowModal)
d->platformHelper()->execModalForWindow(d->parentWindow());
else
d->platformHelper()->exec();
d->platformHelper()->exec();
} else {
QEventLoop eventLoop;
d->eventLoop = &eventLoop;