X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/8bda0ec6a3b0a7852eb0056f20a0dba7b07ea593..3571e1add4e6ceb45ad88c224c432609f837a8dd:/src/common/dlgcmn.cpp diff --git a/src/common/dlgcmn.cpp b/src/common/dlgcmn.cpp index 18288235be..1a6b15c16b 100644 --- a/src/common/dlgcmn.cpp +++ b/src/common/dlgcmn.cpp @@ -40,9 +40,9 @@ #include "wx/statline.h" #include "wx/sysopt.h" #include "wx/module.h" -#include "wx/private/stattext.h" #include "wx/bookctrl.h" #include "wx/scrolwin.h" +#include "wx/textwrapper.h" #if wxUSE_DISPLAY #include "wx/display.h" @@ -80,8 +80,10 @@ void wxDialogBase::Init() wxWindow *wxDialogBase::CheckIfCanBeUsedAsParent(wxWindow *parent) const { - extern WXDLLIMPEXP_DATA_CORE(wxList) wxPendingDelete; + if ( !parent ) + return NULL; + extern WXDLLIMPEXP_DATA_BASE(wxList) wxPendingDelete; if ( wxPendingDelete.Member(parent) || parent->IsBeingDeleted() ) { // this window is being deleted and we shouldn't create any children @@ -102,7 +104,9 @@ wxWindow *wxDialogBase::CheckIfCanBeUsedAsParent(wxWindow *parent) const return NULL; } - if ( parent == this ) + // FIXME-VC6: this compiler requires an explicit const cast or it fails + // with error C2446 + if ( const_cast(parent) == this ) { // not sure if this can really happen but it doesn't hurt to guard // against this clearly invalid situation @@ -112,25 +116,23 @@ wxWindow *wxDialogBase::CheckIfCanBeUsedAsParent(wxWindow *parent) const return parent; } -wxWindow *wxDialogBase::GetParentForModalDialog(wxWindow *parent) const +wxWindow * +wxDialogBase::GetParentForModalDialog(wxWindow *parent, long style) const { // creating a parent-less modal dialog will result (under e.g. wxGTK2) // in an unfocused dialog, so try to find a valid parent for it unless we // were explicitly asked not to - if ( HasFlag(wxDIALOG_NO_PARENT) ) + if ( style & wxDIALOG_NO_PARENT ) return NULL; - // by default, use the parent specified in the ctor - if ( !parent ) - parent = GetParent(); - // first try the given parent if ( parent ) parent = CheckIfCanBeUsedAsParent(wxGetTopLevelParent(parent)); // then the currently active window if ( !parent ) - parent = CheckIfCanBeUsedAsParent(wxGetActiveWindow()); + parent = CheckIfCanBeUsedAsParent( + wxGetTopLevelParent(wxGetActiveWindow())); // and finally the application main window if ( !parent ) @@ -194,7 +196,7 @@ wxSizer *wxDialogBase::CreateTextSizer(const wxString& message) // the static messages created by CreateTextSizer() (used by wxMessageBox, // for example), we don't want this special meaning, so we need to quote it wxString text(message); - text.Replace(_T("&"), _T("&&")); + text.Replace(wxT("&"), wxT("&&")); wxTextSizerWrapper wrapper(this); @@ -463,6 +465,41 @@ void wxDialogBase::OnButton(wxCommandEvent& event) } } +// ---------------------------------------------------------------------------- +// compatibility methods for supporting the modality API +// ---------------------------------------------------------------------------- + +wxDEFINE_EVENT( wxEVT_WINDOW_MODAL_DIALOG_CLOSED , wxWindowModalDialogEvent ); + +IMPLEMENT_DYNAMIC_CLASS(wxWindowModalDialogEvent, wxCommandEvent) + +void wxDialogBase::ShowWindowModal () +{ + ShowModal(); + SendWindowModalDialogEvent ( wxEVT_WINDOW_MODAL_DIALOG_CLOSED ); +} + +void wxDialogBase::SendWindowModalDialogEvent ( wxEventType type ) +{ + wxWindowModalDialogEvent event ( type, GetId()); + event.SetEventObject(this); + + if ( !GetEventHandler()->ProcessEvent(event) ) + { + // the event is not propagated upwards to the parent automatically + // because the dialog is a top level window, so do it manually as + // in 9 cases of 10 the message must be processed by the dialog + // owner and not the dialog itself + (void)GetParent()->GetEventHandler()->ProcessEvent(event); + } +} + + +wxDialogModality wxDialogBase::GetModality() const +{ + return IsModal() ? wxDIALOG_MODALITY_APP_MODAL : wxDIALOG_MODALITY_NONE; +} + // ---------------------------------------------------------------------------- // other event handlers // ---------------------------------------------------------------------------- @@ -643,8 +680,7 @@ bool wxStandardDialogLayoutAdapter::DoLayoutAdaptation(wxDialog* dialog) stdButtonSizer->Realize(); else { - delete buttonSizer; - buttonSizer = NULL; + wxDELETE(buttonSizer); } }