X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/906c935a80b10d53cecf57f71ab5f3f4f1d529ec..48e05747043db02c4e9d2e286eca4fdf5dee7881:/src/osx/cocoa/dirdlg.mm diff --git a/src/osx/cocoa/dirdlg.mm b/src/osx/cocoa/dirdlg.mm index 065b554241..02f92f94f8 100644 --- a/src/osx/cocoa/dirdlg.mm +++ b/src/osx/cocoa/dirdlg.mm @@ -31,6 +31,8 @@ #endif #include "wx/filename.h" +#include "wx/evtloop.h" +#include "wx/modalhook.h" #include "wx/osx/private.h" @@ -54,12 +56,8 @@ wxDirDialog::~wxDirDialog() [m_sheetDelegate release]; } -void wxDirDialog::ShowWindowModal() +WX_NSOpenPanel wxDirDialog::OSXCreatePanel() const { - wxCFStringRef dir( m_path ); - - m_modality = wxDIALOG_MODALITY_WINDOW_MODAL; - NSOpenPanel *oPanel = [NSOpenPanel openPanel]; [oPanel setCanChooseDirectories:YES]; [oPanel setResolvesAliases:YES]; @@ -68,38 +66,40 @@ void wxDirDialog::ShowWindowModal() wxCFStringRef cf( m_message ); [oPanel setMessage:cf.AsNSString()]; - if ( HasFlag(wxDD_NEW_DIR_BUTTON) ) + if ( !HasFlag(wxDD_DIR_MUST_EXIST) ) [oPanel setCanCreateDirectories:YES]; - + + return oPanel; +} + +void wxDirDialog::ShowWindowModal() +{ wxNonOwnedWindow* parentWindow = NULL; - + if (GetParent()) parentWindow = dynamic_cast(wxGetTopLevelParent(GetParent())); - - wxASSERT_MSG(parentWindow, "Window modal display requires parent."); - - if (parentWindow) - { - NSWindow* nativeParent = parentWindow->GetWXWindow(); - [oPanel beginSheetForDirectory:dir.AsNSString() file:nil types: nil - modalForWindow: nativeParent modalDelegate: m_sheetDelegate - didEndSelector: @selector(sheetDidEnd:returnCode:contextInfo:) - contextInfo: nil]; - } + + wxCHECK_RET(parentWindow, "Window modal display requires parent."); + + m_modality = wxDIALOG_MODALITY_WINDOW_MODAL; + + NSOpenPanel *oPanel = OSXCreatePanel(); + + NSWindow* nativeParent = parentWindow->GetWXWindow(); + wxCFStringRef dir( m_path ); + [oPanel beginSheetForDirectory:dir.AsNSString() file:nil types: nil + modalForWindow: nativeParent modalDelegate: m_sheetDelegate + didEndSelector: @selector(sheetDidEnd:returnCode:contextInfo:) + contextInfo: nil]; } int wxDirDialog::ShowModal() { - NSOpenPanel *oPanel = [NSOpenPanel openPanel]; - [oPanel setCanChooseDirectories:YES]; - [oPanel setResolvesAliases:YES]; - [oPanel setCanChooseFiles:NO]; + WX_HOOK_MODAL_DIALOG(); - wxCFStringRef cf( m_message ); - [oPanel setMessage:cf.AsNSString()]; + wxCFEventLoopPauseIdleEvents pause; - if ( HasFlag(wxDD_NEW_DIR_BUTTON) ) - [oPanel setCanCreateDirectories:YES]; + NSOpenPanel *oPanel = OSXCreatePanel(); wxCFStringRef dir( m_path ); @@ -120,11 +120,11 @@ void wxDirDialog::ModalFinishedCallback(void* panel, int returnCode) if (returnCode == NSOKButton ) { NSOpenPanel* oPanel = (NSOpenPanel*)panel; - SetPath( wxCFStringRef::AsString([[oPanel filenames] objectAtIndex:0])); + SetPath( wxCFStringRef::AsStringWithNormalizationFormC([[oPanel filenames] objectAtIndex:0])); result = wxID_OK; } SetReturnCode(result); - + if (GetModality() == wxDIALOG_MODALITY_WINDOW_MODAL) SendWindowModalDialogEvent ( wxEVT_WINDOW_MODAL_DIALOG_CLOSED ); }