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:
parent
e556b61236
commit
9482c64466
@ -74,7 +74,7 @@ public:
|
|||||||
virtual bool IsModal() const = 0;
|
virtual bool IsModal() const = 0;
|
||||||
// show the dialog frame-modally (needs a parent), using app-modal
|
// show the dialog frame-modally (needs a parent), using app-modal
|
||||||
// dialogs on platforms that don't support it
|
// dialogs on platforms that don't support it
|
||||||
virtual bool ShowWindowModal () ;
|
virtual void ShowWindowModal () ;
|
||||||
virtual void SendWindowModalDialogEvent ( wxEventType type );
|
virtual void SendWindowModalDialogEvent ( wxEventType type );
|
||||||
|
|
||||||
// Modal dialogs have a return code - usually the id of the last
|
// Modal dialogs have a return code - usually the id of the last
|
||||||
|
@ -55,6 +55,8 @@ public:
|
|||||||
|
|
||||||
// For now, same as Show(TRUE) but returns return code
|
// For now, same as Show(TRUE) but returns return code
|
||||||
virtual int ShowModal();
|
virtual int ShowModal();
|
||||||
|
|
||||||
|
virtual void ShowWindowModal();
|
||||||
|
|
||||||
// may be called to terminate the dialog with the given return code
|
// may be called to terminate the dialog with the given return code
|
||||||
virtual void EndModal(int retCode);
|
virtual void EndModal(int retCode);
|
||||||
@ -69,6 +71,9 @@ protected:
|
|||||||
// mac also takes command-period as cancel
|
// mac also takes command-period as cancel
|
||||||
virtual bool IsEscapeKey(const wxKeyEvent& event);
|
virtual bool IsEscapeKey(const wxKeyEvent& event);
|
||||||
|
|
||||||
|
// needed for cleanup on the Cocoa side.
|
||||||
|
void EndWindowModal();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
void Init();
|
void Init();
|
||||||
|
|
||||||
|
@ -25,6 +25,20 @@
|
|||||||
|
|
||||||
extern wxList wxModalDialogs;
|
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()
|
void wxDialog::DoShowModal()
|
||||||
{
|
{
|
||||||
wxCHECK_RET( !IsModal(), wxT("DoShowModal() called twice") );
|
wxCHECK_RET( !IsModal(), wxT("DoShowModal() called twice") );
|
||||||
|
@ -24,6 +24,29 @@
|
|||||||
|
|
||||||
extern wxList wxModalDialogs;
|
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()
|
void wxDialog::DoShowModal()
|
||||||
{
|
{
|
||||||
wxCHECK_RET( !IsModal(), wxT("DoShowModal() called twice") );
|
wxCHECK_RET( !IsModal(), wxT("DoShowModal() called twice") );
|
||||||
|
@ -145,5 +145,10 @@ void wxDialog::EndModal(int retCode)
|
|||||||
SetReturnCode(retCode);
|
SetReturnCode(retCode);
|
||||||
Show(false);
|
Show(false);
|
||||||
SetModal(false);
|
SetModal(false);
|
||||||
|
if (GetModality() == wxDIALOG_MODALITY_WINDOW_MODAL)
|
||||||
|
{
|
||||||
|
EndWindowModal(); // OS X implementation method for cleanup
|
||||||
|
SendWindowModalDialogEvent ( wxEVT_WINDOW_MODAL_DIALOG_CLOSED );
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user