diff options
author | Pasi Matilainen <pasi.matilainen@digia.com> | 2012-08-22 11:27:36 +0300 |
---|---|---|
committer | The Qt Project <gerrit-noreply@qt-project.org> | 2012-09-27 18:35:55 +0200 |
commit | 2e902799df6298ad4c75b4c565a0baf9cb7f7ab8 (patch) | |
tree | 7ef833b5733c46664bcf049158323ba6f5b73b14 /src/plugins | |
parent | ccf0669da933e519edcff03698643e906b5935d5 (diff) |
Sand box support, fix for the file dialogs.
- Also get rid of all deprecated calls
Task-number: QTBUG-21609
Change-Id: I284587517537c7be4229d99637c6907d7e7652a5
Reviewed-by: Christoph Schleifenbaum <christoph.schleifenbaum@kdab.com>
Reviewed-by: Morten Johan Sørvig <morten.sorvig@digia.com>
Diffstat (limited to 'src/plugins')
-rw-r--r-- | src/plugins/platforms/cocoa/qcocoafiledialoghelper.mm | 87 |
1 files changed, 45 insertions, 42 deletions
diff --git a/src/plugins/platforms/cocoa/qcocoafiledialoghelper.mm b/src/plugins/platforms/cocoa/qcocoafiledialoghelper.mm index c8ff1f239c..872a5cb79a 100644 --- a/src/plugins/platforms/cocoa/qcocoafiledialoghelper.mm +++ b/src/plugins/platforms/cocoa/qcocoafiledialoghelper.mm @@ -135,7 +135,8 @@ typedef QSharedPointer<QFileDialogOptions> SharedPointerFileDialogOptions; mOpenPanel = 0; } - [mSavePanel setLevel:NSModalPanelWindowLevel]; + if ([mSavePanel respondsToSelector:@selector(setLevel:)]) + [mSavePanel setLevel:NSModalPanelWindowLevel]; [mSavePanel setDelegate:self]; mReturnCode = -1; mHelper = helper; @@ -179,7 +180,8 @@ typedef QSharedPointer<QFileDialogOptions> SharedPointerFileDialogOptions; delete mSelectedNameFilter; delete mCurrentSelection; - [mSavePanel orderOut:mSavePanel]; + if ([mSavePanel respondsToSelector:@selector(orderOut:)]) + [mSavePanel orderOut:mSavePanel]; [mSavePanel setAccessoryView:nil]; [mPopUpButton release]; [mTextField release]; @@ -212,38 +214,40 @@ static QString strippedText(QString s) - (void)closePanel { - *mCurrentSelection = QT_PREPEND_NAMESPACE(QCFString::toQString)([mSavePanel filename]); - [mSavePanel close]; + *mCurrentSelection = QT_PREPEND_NAMESPACE(QCFString::toQString)([[mSavePanel URL] path]); + if ([mSavePanel respondsToSelector:@selector(closePanel:)]) + [mSavePanel close]; } - (void)showModelessPanel { if (mOpenPanel){ QFileInfo info(*mCurrentSelection); - NSString *filename = QT_PREPEND_NAMESPACE(QCFString::toNSString)(info.fileName()); NSString *filepath = QT_PREPEND_NAMESPACE(QCFString::toNSString)(info.filePath()); bool selectable = (mOptions->acceptMode() == QFileDialogOptions::AcceptSave) || [self panel:nil shouldShowFilename:filepath]; - [mOpenPanel - beginForDirectory:mCurrentDir - file:selectable ? filename : nil - types:nil - modelessDelegate:self - didEndSelector:@selector(openPanelDidEnd:returnCode:contextInfo:) - contextInfo:nil]; + + [mOpenPanel setAllowedFileTypes:nil]; + [mOpenPanel setDirectoryURL:selectable ? [NSURL fileURLWithPath:QT_PREPEND_NAMESPACE(QCFString::toNSString)(info.filePath())] + : [NSURL fileURLWithPath:QT_PREPEND_NAMESPACE(QCFString::toNSString)(info.path())]]; + [mOpenPanel beginWithCompletionHandler:^(NSInteger result){ + mReturnCode = result; + if (mHelper) + mHelper->QNSOpenSavePanelDelegate_panelClosed(result == NSOKButton); + }]; } } - (BOOL)runApplicationModalPanel { QFileInfo info(*mCurrentSelection); - NSString *filename = QT_PREPEND_NAMESPACE(QCFString::toNSString)(info.fileName()); NSString *filepath = QT_PREPEND_NAMESPACE(QCFString::toNSString)(info.filePath()); bool selectable = (mOptions->acceptMode() == QFileDialogOptions::AcceptSave) || [self panel:nil shouldShowFilename:filepath]; - mReturnCode = [mSavePanel - runModalForDirectory:mCurrentDir - file:selectable ? filename : @"untitled"]; + + [mOpenPanel setDirectoryURL:selectable ? [NSURL fileURLWithPath:QT_PREPEND_NAMESPACE(QCFString::toNSString)(info.filePath())] + : [NSURL fileURLWithPath:QT_PREPEND_NAMESPACE(QCFString::toNSString)(info.path())]]; + mReturnCode = [mOpenPanel runModal]; QAbstractEventDispatcher::instance()->interrupt(); return (mReturnCode == NSOKButton); @@ -257,18 +261,19 @@ static QString strippedText(QString s) - (void)showWindowModalSheet:(QWindow *)parent { QFileInfo info(*mCurrentSelection); - NSString *filename = QT_PREPEND_NAMESPACE(QCFString::toNSString)(info.fileName()); NSString *filepath = QT_PREPEND_NAMESPACE(QCFString::toNSString)(info.filePath()); bool selectable = (mOptions->acceptMode() == QFileDialogOptions::AcceptSave) || [self panel:nil shouldShowFilename:filepath]; + + [mOpenPanel 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)); - [mSavePanel - beginSheetForDirectory:mCurrentDir - file:selectable ? filename : nil - modalForWindow:nsparent - modalDelegate:self - didEndSelector:@selector(openPanelDidEnd:returnCode:contextInfo:) - contextInfo:nil]; + + [mSavePanel beginSheetModalForWindow:nsparent completionHandler:^(NSInteger result){ + mReturnCode = result; + if (mHelper) + mHelper->QNSOpenSavePanelDelegate_panelClosed(result == NSOKButton); + }]; } - (BOOL)panel:(id)sender shouldShowFilename:(NSString *)filename @@ -345,7 +350,8 @@ static QString strippedText(QString s) Q_UNUSED(sender); QString selection = mNameFilterDropDownList->value([mPopUpButton indexOfSelectedItem]); *mSelectedNameFilter = [self findStrippedFilterWithVisualFilterName:selection]; - [mSavePanel validateVisibleColumns]; + if ([mSavePanel respondsToSelector:@selector(validateVisibleColumns:)]) + [mSavePanel validateVisibleColumns]; [self updateProperties]; if (mHelper) mHelper->QNSOpenSavePanelDelegate_filterSelected([mPopUpButton indexOfSelectedItem]); @@ -358,11 +364,15 @@ static QString strippedText(QString s) - (QStringList)selectedFiles { - if (mOpenPanel) - return QT_PREPEND_NAMESPACE(qt_mac_NSArrayToQStringList)([mOpenPanel filenames]); - else{ + if (mOpenPanel) { + QStringList result; + NSArray* array = [mOpenPanel URLs]; + for (NSUInteger i=0; i<[array count]; ++i) + result << QCFString::toQString([[array objectAtIndex:i] path]); + return result; + } else { QStringList result; - QString filename = QT_PREPEND_NAMESPACE(QCFString::toQString)([mSavePanel filename]); + QString filename = QT_PREPEND_NAMESPACE(QCFString::toQString)([[mSavePanel URL] path]); result << filename.remove(QLatin1String("___qt_very_unlikely_prefix_")); return result; } @@ -392,15 +402,17 @@ static QString strippedText(QString s) ext.prepend(defaultSuffix); [mSavePanel setAllowedFileTypes:ext.isEmpty() ? nil : QT_PREPEND_NAMESPACE(qt_mac_QStringListToNSMutableArray(ext))]; - if ([mSavePanel isVisible]) - [mOpenPanel validateVisibleColumns]; + if ([mOpenPanel respondsToSelector:@selector(isVisible)] && [mSavePanel isVisible]) { + if ([mOpenPanel respondsToSelector:@selector(validateVisibleColumns)]) + [mOpenPanel validateVisibleColumns]; + } } - (void)panelSelectionDidChange:(id)sender { Q_UNUSED(sender); if (mHelper) { - QString selection = QT_PREPEND_NAMESPACE(QCFString::toQString([mSavePanel filename])); + QString selection = QT_PREPEND_NAMESPACE(QCFString::toQString([[mSavePanel URL] path])); if (selection != mCurrentSelection) { *mCurrentSelection = selection; mHelper->QNSOpenSavePanelDelegate_selectionChanged(selection); @@ -408,15 +420,6 @@ static QString strippedText(QString s) } } -- (void)openPanelDidEnd:(NSOpenPanel *)panel returnCode:(int)returnCode contextInfo:(void *)contextInfo -{ - Q_UNUSED(panel); - Q_UNUSED(contextInfo); - mReturnCode = returnCode; - if (mHelper) - mHelper->QNSOpenSavePanelDelegate_panelClosed(returnCode == NSOKButton); -} - - (void)panel:(id)sender directoryDidChange:(NSString *)path { Q_UNUSED(sender); @@ -559,7 +562,7 @@ 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 setDirectory:QCFString::toNSString(directory)]; + [delegate->mSavePanel setDirectoryURL:[NSURL fileURLWithPath:QCFString::toNSString(directory)]]; } QString QCocoaFileDialogHelper::directory() const |