Several bug fixes in QCocoaFileDialogHelper to support declarative
Required to prevent crashes and incorrect behavior in https://codereview.qt-project.org/#change,44201 Change-Id: If6025429caabafd150cdd44fec152ff584232220 Reviewed-by: Morten Johan Sørvig <morten.sorvig@digia.com>bb10
parent
119c581dd1
commit
896bf9ff5c
|
|
@ -216,7 +216,7 @@ static QString strippedText(QString s)
|
|||
- (void)closePanel
|
||||
{
|
||||
*mCurrentSelection = QT_PREPEND_NAMESPACE(QCFString::toQString)([[mSavePanel URL] path]);
|
||||
if ([mSavePanel respondsToSelector:@selector(closePanel:)])
|
||||
if ([mSavePanel respondsToSelector:@selector(close)])
|
||||
[mSavePanel close];
|
||||
}
|
||||
|
||||
|
|
@ -228,6 +228,7 @@ static QString strippedText(QString s)
|
|||
bool selectable = (mOptions->acceptMode() == QFileDialogOptions::AcceptSave)
|
||||
|| [self panel:nil shouldShowFilename:filepath];
|
||||
|
||||
[self updateProperties];
|
||||
[mOpenPanel setAllowedFileTypes:nil];
|
||||
[mOpenPanel setDirectoryURL:selectable ? [NSURL fileURLWithPath:QT_PREPEND_NAMESPACE(QCFString::toNSString)(info.filePath())]
|
||||
: [NSURL fileURLWithPath:QT_PREPEND_NAMESPACE(QCFString::toNSString)(info.path())]];
|
||||
|
|
@ -271,6 +272,7 @@ static QString strippedText(QString s)
|
|||
bool selectable = (mOptions->acceptMode() == QFileDialogOptions::AcceptSave)
|
||||
|| [self panel:nil shouldShowFilename:filepath];
|
||||
|
||||
[self updateProperties];
|
||||
[mSavePanel setDirectoryURL:selectable ? [NSURL fileURLWithPath:QT_PREPEND_NAMESPACE(QCFString::toNSString)(info.filePath())]
|
||||
: [NSURL fileURLWithPath:QT_PREPEND_NAMESPACE(QCFString::toNSString)(info.path())]];
|
||||
NSWindow *nsparent = static_cast<NSWindow *>(qGuiApp->platformNativeInterface()->nativeResourceForWindow("nswindow", parent));
|
||||
|
|
@ -401,6 +403,9 @@ static QString strippedText(QString s)
|
|||
[mSavePanel setCanCreateDirectories:!(mOptions->testOption(QT_PREPEND_NAMESPACE(QFileDialogOptions::ReadOnly)))];
|
||||
[mOpenPanel setAllowsMultipleSelection:(fileMode == QT_PREPEND_NAMESPACE(QFileDialogOptions::ExistingFiles))];
|
||||
[mOpenPanel setResolvesAliases:!(mOptions->testOption(QT_PREPEND_NAMESPACE(QFileDialogOptions::DontResolveSymlinks)))];
|
||||
[mOpenPanel setTitle:QCFString::toNSString(mOptions->windowTitle())];
|
||||
[mSavePanel setTitle:QCFString::toNSString(mOptions->windowTitle())];
|
||||
[mPopUpButton setHidden:chooseDirsOnly]; // TODO hide the whole sunken pane instead?
|
||||
|
||||
QStringList ext = [self acceptableExtensionsForSave];
|
||||
const QString defaultSuffix = mOptions->defaultSuffix();
|
||||
|
|
@ -569,13 +574,16 @@ extern void qt_mac_to_pascal_string(QString s, Str255 str, TextEncoding encoding
|
|||
void QCocoaFileDialogHelper::setDirectory(const QString &directory)
|
||||
{
|
||||
QT_MANGLE_NAMESPACE(QNSOpenSavePanelDelegate) *delegate = static_cast<QT_MANGLE_NAMESPACE(QNSOpenSavePanelDelegate) *>(mDelegate);
|
||||
[delegate->mSavePanel setDirectoryURL:[NSURL fileURLWithPath:QCFString::toNSString(directory)]];
|
||||
if (delegate)
|
||||
[delegate->mSavePanel setDirectoryURL:[NSURL fileURLWithPath:QCFString::toNSString(directory)]];
|
||||
}
|
||||
|
||||
QString QCocoaFileDialogHelper::directory() const
|
||||
{
|
||||
QT_MANGLE_NAMESPACE(QNSOpenSavePanelDelegate) *delegate = static_cast<QT_MANGLE_NAMESPACE(QNSOpenSavePanelDelegate) *>(mDelegate);
|
||||
return QCFString::toQString([delegate->mSavePanel directory]);
|
||||
if (delegate)
|
||||
return QCFString::toQString([delegate->mSavePanel directory]);
|
||||
return QString();
|
||||
}
|
||||
|
||||
void QCocoaFileDialogHelper::selectFile(const QString &filename)
|
||||
|
|
@ -592,12 +600,16 @@ void QCocoaFileDialogHelper::selectFile(const QString &filename)
|
|||
QStringList QCocoaFileDialogHelper::selectedFiles() const
|
||||
{
|
||||
QT_MANGLE_NAMESPACE(QNSOpenSavePanelDelegate) *delegate = static_cast<QT_MANGLE_NAMESPACE(QNSOpenSavePanelDelegate) *>(mDelegate);
|
||||
return [delegate selectedFiles];
|
||||
if (delegate)
|
||||
return [delegate selectedFiles];
|
||||
return QStringList();
|
||||
}
|
||||
|
||||
void QCocoaFileDialogHelper::setFilter()
|
||||
{
|
||||
QT_MANGLE_NAMESPACE(QNSOpenSavePanelDelegate) *delegate = static_cast<QT_MANGLE_NAMESPACE(QNSOpenSavePanelDelegate) *>(mDelegate);
|
||||
if (!delegate)
|
||||
return;
|
||||
const SharedPointerFileDialogOptions &opts = options();
|
||||
[delegate->mSavePanel setTitle:QCFString::toNSString(opts->windowTitle())];
|
||||
if (opts->isLabelExplicitlySet(QFileDialogOptions::Accept))
|
||||
|
|
@ -610,9 +622,13 @@ void QCocoaFileDialogHelper::setFilter()
|
|||
|
||||
void QCocoaFileDialogHelper::selectNameFilter(const QString &filter)
|
||||
{
|
||||
if (!options())
|
||||
return;
|
||||
const int index = options()->nameFilters().indexOf(filter);
|
||||
if (index != -1) {
|
||||
QT_MANGLE_NAMESPACE(QNSOpenSavePanelDelegate) *delegate = static_cast<QT_MANGLE_NAMESPACE(QNSOpenSavePanelDelegate) *>(mDelegate);
|
||||
if (!delegate)
|
||||
return;
|
||||
[delegate->mPopUpButton selectItemAtIndex:index];
|
||||
[delegate filterChanged:nil];
|
||||
}
|
||||
|
|
@ -621,7 +637,11 @@ void QCocoaFileDialogHelper::selectNameFilter(const QString &filter)
|
|||
QString QCocoaFileDialogHelper::selectedNameFilter() const
|
||||
{
|
||||
QT_MANGLE_NAMESPACE(QNSOpenSavePanelDelegate) *delegate = static_cast<QT_MANGLE_NAMESPACE(QNSOpenSavePanelDelegate) *>(mDelegate);
|
||||
if (!delegate)
|
||||
return QString();
|
||||
int index = [delegate->mPopUpButton indexOfSelectedItem];
|
||||
if (index >= options()->nameFilters().count())
|
||||
return QString();
|
||||
return index != -1 ? options()->nameFilters().at(index) : QString();
|
||||
}
|
||||
|
||||
|
|
@ -667,6 +687,8 @@ bool QCocoaFileDialogHelper::showCocoaFilePanel(Qt::WindowModality windowModalit
|
|||
{
|
||||
createNSOpenSavePanelDelegate();
|
||||
QT_MANGLE_NAMESPACE(QNSOpenSavePanelDelegate) *delegate = static_cast<QT_MANGLE_NAMESPACE(QNSOpenSavePanelDelegate) *>(mDelegate);
|
||||
if (!delegate)
|
||||
return false;
|
||||
if (windowModality == Qt::NonModal)
|
||||
[delegate showModelessPanel];
|
||||
else if (windowModality == Qt::WindowModal && parent)
|
||||
|
|
|
|||
Loading…
Reference in New Issue