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:
parent
997f52b83d
commit
aec2b28eea
@ -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
|
||||
|
@ -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;
|
||||
|
@ -51,7 +51,6 @@ public:
|
||||
virtual ~QCocoaFileDialogHelper();
|
||||
|
||||
void exec();
|
||||
void execModalForWindow(QWindow *parent);
|
||||
|
||||
bool defaultNameFilterDisables() const;
|
||||
|
||||
|
@ -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;
|
||||
|
@ -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;
|
||||
|
Loading…
Reference in New Issue
Block a user