From 37212b8c063b456b036f87841e596ee7d857052f Mon Sep 17 00:00:00 2001 From: Pasi Matilainen Date: Mon, 13 Feb 2012 09:50:31 +0200 Subject: Fix crash when opening a file dialog in sandbox on Mac MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The sandboxed version of the native file dialog does not implement NSWindow methods, and does not respond to validateVisibleColumns. Calling these methods on a sandboxed file dialog results in a crash, so check support for the methods using respondsToSelector before calling. Task-number: QTBUG-21609 Change-Id: I7de7d8b24dab886a261ae02c395a4a22f0f489c0 Reviewed-by: Andy Shaw Reviewed-by: Morten Johan Sørvig --- src/gui/dialogs/qfiledialog_mac.mm | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) diff --git a/src/gui/dialogs/qfiledialog_mac.mm b/src/gui/dialogs/qfiledialog_mac.mm index a858aa7ffa..5526eec84b 100644 --- a/src/gui/dialogs/qfiledialog_mac.mm +++ b/src/gui/dialogs/qfiledialog_mac.mm @@ -154,7 +154,8 @@ QT_USE_NAMESPACE mOpenPanel = 0; } - [mSavePanel setLevel:NSModalPanelWindowLevel]; + if ([mSavePanel respondsToSelector:@selector(setLevel:)]) + [mSavePanel setLevel:NSModalPanelWindowLevel]; [mSavePanel setDelegate:self]; mQDirFilter = new QT_PREPEND_NAMESPACE(QDir::Filters)(qDirFilter); mFileOptions = new QT_PREPEND_NAMESPACE(QFileDialog::Options)(fileOptions); @@ -204,7 +205,8 @@ QT_USE_NAMESPACE delete mSelectedNameFilter; delete mCurrentSelection; - [mSavePanel orderOut:mSavePanel]; + if ([mSavePanel respondsToSelector:@selector(orderOut:)]) + [mSavePanel orderOut:mSavePanel]; [mSavePanel setAccessoryView:nil]; [mPopUpButton release]; [mTextField release]; @@ -224,7 +226,8 @@ QT_USE_NAMESPACE - (void)closePanel { *mCurrentSelection = QT_PREPEND_NAMESPACE(qt_mac_NSStringToQString)([mSavePanel filename]); - [mSavePanel close]; + if ([mSavePanel respondsToSelector:@selector(close)]) + [mSavePanel close]; } - (void)showModelessPanel @@ -361,7 +364,8 @@ QT_USE_NAMESPACE 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 (mPriv) mPriv->QNSOpenSavePanelDelegate_filterSelected([mPopUpButton indexOfSelectedItem]); @@ -406,8 +410,11 @@ QT_USE_NAMESPACE ext.prepend(mPriv->defaultSuffix); [mSavePanel setAllowedFileTypes:ext.isEmpty() ? nil : QT_PREPEND_NAMESPACE(qt_mac_QStringListToNSMutableArray(ext))]; - if ([mSavePanel isVisible]) - [mOpenPanel validateVisibleColumns]; + if ([mSavePanel respondsToSelector:@selector(isVisible)] && [mSavePanel isVisible]) + { + if ([mOpenPanel respondsToSelector:@selector(validateVisibleColumns)]) + [mOpenPanel validateVisibleColumns]; + } } - (void)panelSelectionDidChange:(id)sender -- cgit v1.2.3