Start on ShowWindowModal for OS X Cocoa. Not working properly as children do not display.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@63232 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Kevin Ollivier 2010-01-23 20:06:48 +00:00
parent e556b61236
commit 9482c64466
5 changed files with 48 additions and 1 deletions

View File

@ -74,7 +74,7 @@ public:
virtual bool IsModal() const = 0;
// show the dialog frame-modally (needs a parent), using app-modal
// dialogs on platforms that don't support it
virtual bool ShowWindowModal () ;
virtual void ShowWindowModal () ;
virtual void SendWindowModalDialogEvent ( wxEventType type );
// Modal dialogs have a return code - usually the id of the last

View File

@ -55,6 +55,8 @@ public:
// For now, same as Show(TRUE) but returns return code
virtual int ShowModal();
virtual void ShowWindowModal();
// may be called to terminate the dialog with the given return code
virtual void EndModal(int retCode);
@ -69,6 +71,9 @@ protected:
// mac also takes command-period as cancel
virtual bool IsEscapeKey(const wxKeyEvent& event);
// needed for cleanup on the Cocoa side.
void EndWindowModal();
private:
void Init();

View File

@ -25,6 +25,20 @@
extern wxList wxModalDialogs;
void wxDialog::EndWindowModal()
{
// Nothing to do for now.
}
void wxDialog::ShowWindowModal()
{
// If someone wants to add support for this to wxOSX Carbon, here would
// be the place to start: http://trac.wxwidgets.org/ticket/9459
// Unfortunately, supporting sheets in Carbon isn't as straightforward
// as with Cocoa, so it will probably take some tweaking.
wxDialogBase::ShowWindowModal();
}
void wxDialog::DoShowModal()
{
wxCHECK_RET( !IsModal(), wxT("DoShowModal() called twice") );

View File

@ -24,6 +24,29 @@
extern wxList wxModalDialogs;
void wxDialog::ShowWindowModal()
{
wxTopLevelWindow* parent = static_cast<wxTopLevelWindow*>(wxGetTopLevelParent(GetParent()));
wxASSERT_MSG(parent, "ShowWindowModal requires the dialog to have a parent.");
NSWindow* parentWindow = parent->GetWXWindow();
NSWindow* theWindow = GetWXWindow();
wxASSERT_MSG([theWindow styleMask] & NSDocModalWindowMask, "Window must have DocModal mask set.");
[NSApp beginSheet: theWindow
modalForWindow: parentWindow
modalDelegate: theWindow
didEndSelector: nil
contextInfo: nil];
}
void wxDialog::EndWindowModal()
{
[NSApp endSheet: GetWXWindow()];
}
void wxDialog::DoShowModal()
{
wxCHECK_RET( !IsModal(), wxT("DoShowModal() called twice") );

View File

@ -145,5 +145,10 @@ void wxDialog::EndModal(int retCode)
SetReturnCode(retCode);
Show(false);
SetModal(false);
if (GetModality() == wxDIALOG_MODALITY_WINDOW_MODAL)
{
EndWindowModal(); // OS X implementation method for cleanup
SendWindowModalDialogEvent ( wxEVT_WINDOW_MODAL_DIALOG_CLOSED );
}
}