X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/6f951810a1005e1388b0ae80cb8a64570c4f1a47..569f027b89890ed6f5ddbaf45bb1b53810e3519d:/src/msw/dialog.cpp diff --git a/src/msw/dialog.cpp b/src/msw/dialog.cpp index 8ec0087a81..f43c35fe3f 100644 --- a/src/msw/dialog.cpp +++ b/src/msw/dialog.cpp @@ -47,18 +47,6 @@ #include #endif -// ---------------------------------------------------------------------------- -// constants -// ---------------------------------------------------------------------------- - -// default dialog pos and size - -#define wxDIALOG_DEFAULT_X 300 -#define wxDIALOG_DEFAULT_Y 300 - -#define wxDIALOG_DEFAULT_WIDTH 500 -#define wxDIALOG_DEFAULT_HEIGHT 500 - // ---------------------------------------------------------------------------- // wxWin macros // ---------------------------------------------------------------------------- @@ -125,8 +113,6 @@ BEGIN_EVENT_TABLE(wxDialog, wxDialogBase) EVT_BUTTON(wxID_APPLY, wxDialog::OnApply) EVT_BUTTON(wxID_CANCEL, wxDialog::OnCancel) - EVT_CHAR_HOOK(wxDialog::OnCharHook) - EVT_SYS_COLOUR_CHANGED(wxDialog::OnSysColourChanged) EVT_CLOSE(wxDialog::OnCloseWindow) @@ -170,12 +156,9 @@ wxDEFINE_TIED_SCOPED_PTR_TYPE(wxDialogModalData); void wxDialog::Init() { m_oldFocus = (wxWindow *)NULL; - m_isShown = FALSE; - m_modalData = NULL; - - SetBackgroundColour(wxSystemSettings::GetColour(wxSYS_COLOUR_3DFACE)); + m_endModalCalled = FALSE; } bool wxDialog::Create(wxWindow *parent, @@ -186,8 +169,6 @@ bool wxDialog::Create(wxWindow *parent, long style, const wxString& name) { - Init(); - SetExtraStyle(GetExtraStyle() | wxTOPLEVEL_EX_DIALOG); // save focus before doing anything which can potentially change it @@ -198,9 +179,12 @@ bool wxDialog::Create(wxWindow *parent, if ( !wxTopLevelWindow::Create(parent, id, title, pos, size, style, name) ) return FALSE; - if (!m_hasFont) + + if ( !m_hasFont ) SetFont(wxSystemSettings::GetFont(wxSYS_DEFAULT_GUI_FONT)); + SetBackgroundColour(wxSystemSettings::GetColour(wxSYS_COLOUR_3DFACE)); + return TRUE; } @@ -228,35 +212,6 @@ wxDialog::~wxDialog() Show(FALSE); } -// ---------------------------------------------------------------------------- -// kbd handling -// ---------------------------------------------------------------------------- - -// By default, pressing escape cancels the dialog -void wxDialog::OnCharHook(wxKeyEvent& event) -{ - if (GetHWND()) - { - // "Esc" works as an accelerator for the "Cancel" button, but it - // shouldn't close the dialog which doesn't have any cancel button - if ( (event.m_keyCode == WXK_ESCAPE) && FindWindow(wxID_CANCEL) ) - { - wxCommandEvent cancelEvent(wxEVT_COMMAND_BUTTON_CLICKED, wxID_CANCEL); - cancelEvent.SetEventObject( this ); - GetEventHandler()->ProcessEvent(cancelEvent); - - // ensure that there is another message for this window so the - // ShowModal loop will exit and won't get stuck in GetMessage(). - ::PostMessage(GetHwnd(), WM_NULL, 0, 0); - - return; - } - } - - // We didn't process this event. - event.Skip(); -} - // ---------------------------------------------------------------------------- // showing the dialogs // ---------------------------------------------------------------------------- @@ -369,7 +324,10 @@ bool wxDialog::Show(bool show) InitDialog(); } - if ( show && IsModal() ) + // EndModal may have been called from InitDialog handler, + // which would cause an infinite loop if we didn't take it + // into account + if ( show && IsModal() && !m_endModalCalled ) { // modal dialog needs a parent window, so try to find one if ( !GetParent() ) @@ -391,6 +349,7 @@ void wxDialog::Raise() // a special version for Show(TRUE) for modal dialogs which returns return code int wxDialog::ShowModal() { + m_endModalCalled = FALSE; if ( !IsModal() ) { SetModal(TRUE); @@ -405,6 +364,7 @@ int wxDialog::ShowModal() // dialogs and should work for both of them void wxDialog::EndModal(int retCode) { + m_endModalCalled = TRUE; SetReturnCode(retCode); Show(FALSE); @@ -480,9 +440,9 @@ void wxDialog::OnSysColourChanged(wxSysColourChangedEvent& WXUNUSED(event)) // dialog window proc // --------------------------------------------------------------------------- -long wxDialog::MSWWindowProc(WXUINT message, WXWPARAM wParam, WXLPARAM lParam) +WXLRESULT wxDialog::MSWWindowProc(WXUINT message, WXWPARAM wParam, WXLPARAM lParam) { - long rc = 0; + WXLRESULT rc = 0; bool processed = FALSE; switch ( message )