X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/2f1ae4143271ae63a17e052a1a471d16e9cd8c44..40d601782ec2466a02eab190aeb59ee168a12ea9:/src/mac/carbon/dialog.cpp diff --git a/src/mac/carbon/dialog.cpp b/src/mac/carbon/dialog.cpp index 760c07680a..8a066964ca 100644 --- a/src/mac/carbon/dialog.cpp +++ b/src/mac/carbon/dialog.cpp @@ -19,24 +19,26 @@ #include "wx/app.h" #include "wx/settings.h" -#include +#include "wx/mac/uma.h" // Lists to keep track of windows, so we can disable/enable them // for modal dialogs wxList wxModalDialogs; -wxList wxModelessWindows; // Frames and modeless dialogs +//wxList wxModelessWindows; // Frames and modeless dialogs extern wxList wxPendingDelete; #if !USE_SHARED_LIBRARY -IMPLEMENT_DYNAMIC_CLASS(wxDialog, wxPanel) +IMPLEMENT_DYNAMIC_CLASS(wxDialog, wxTopLevelWindow) -BEGIN_EVENT_TABLE(wxDialog, wxPanel) - EVT_SIZE(wxDialog::OnSize) +BEGIN_EVENT_TABLE(wxDialog, wxTopLevelWindow) EVT_BUTTON(wxID_OK, wxDialog::OnOK) 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) END_EVENT_TABLE() @@ -58,19 +60,13 @@ bool wxDialog::Create(wxWindow *parent, wxWindowID id, SetBackgroundColour(wxSystemSettings::GetSystemColour(wxSYS_COLOUR_3DFACE)); - if (!parent) - wxTopLevelWindows.Append(this); - - if (parent) parent->AddChild(this); - if ( id == -1 ) - m_windowId = (int)NewControlId(); - else - m_windowId = id; + if ( !wxTopLevelWindow::Create(parent, id, title, pos, size, style, name) ) + return FALSE; MacCreateRealWindow( title , pos , size , MacRemoveBordersFromStyle(style) , name ) ; - m_macWindowData->m_macWindowBackgroundTheme = kThemeBrushDialogBackgroundActive ; + m_macWindowBackgroundTheme = kThemeBrushDialogBackgroundActive ; return TRUE; } @@ -93,29 +89,16 @@ void wxDialog::SetModal(bool flag) wxDialog::~wxDialog() { m_isBeingDeleted = TRUE ; - wxTopLevelWindows.DeleteObject(this); - - Show(FALSE); - - if ( !IsModal() ) - wxModelessWindows.DeleteObject(this); - - // If this is the last top-level window, exit. - if (wxTheApp && (wxTopLevelWindows.Number() == 0)) - { - wxTheApp->SetTopWindow(NULL); - - if (wxTheApp->GetExitOnFrameDelete()) - { - wxTheApp->ExitMainLoop() ; - } - } + Show(FALSE); } -// By default, pressing escape cancels the dialog +// By default, pressing escape cancels the dialog , on mac command-stop does the same thing void wxDialog::OnCharHook(wxKeyEvent& event) { - if (event.m_keyCode == WXK_ESCAPE) + if ( + ( event.m_keyCode == WXK_ESCAPE || + ( event.m_keyCode == '.' && event.MetaDown() ) ) + && FindWindow(wxID_CANCEL) ) { // Behaviour changed in 2.0: we'll send a Cancel message // to the dialog instead of Close. @@ -129,27 +112,6 @@ void wxDialog::OnCharHook(wxKeyEvent& event) event.Skip(); } -void wxDialog::Iconize(bool WXUNUSED(iconize)) -{ - // mac dialogs cannot be iconized -} - -bool wxDialog::IsIconized() const -{ - // mac dialogs cannot be iconized - return FALSE; -} - -void wxDialog::DoSetClientSize(int width, int height) -{ - wxWindow::DoSetClientSize( width , height ) ; -} - -void wxDialog::DoGetPosition(int *x, int *y) const -{ - wxWindow::DoGetPosition( x , y ) ; -} - bool wxDialog::IsModal() const { return (GetWindowStyleFlag() & wxDIALOG_MODAL) != 0; @@ -161,7 +123,6 @@ bool wxDialog::IsModalShowing() const return wxModalDialogs.Find((wxDialog *)this) != NULL; // const_cast } - extern bool s_macIsInModalLoop ; bool wxDialog::Show(bool show) @@ -215,6 +176,7 @@ void wxDialog::DoShowModal() } // TODO : test whether parent gets disabled + bool formerModal = s_macIsInModalLoop ; s_macIsInModalLoop = true ; while ( IsModalShowing() ) @@ -225,7 +187,7 @@ void wxDialog::DoShowModal() wxTheApp->MacDoOneEvent() ; } - s_macIsInModalLoop = false ; + s_macIsInModalLoop = formerModal ; // TODO probably reenable the parent window if any @@ -304,16 +266,6 @@ void wxDialog::OnCloseWindow(wxCloseEvent& event) closing.DeleteObject(this); } -// Destroy the window (delayed, if a managed window) -bool wxDialog::Destroy() -{ - wxCHECK_MSG( !wxPendingDelete.Member(this), FALSE, - _T("wxDialog destroyed twice") ); - - wxPendingDelete.Append(this); - return TRUE; -} - void wxDialog::OnSysColourChanged(wxSysColourChangedEvent& event) { SetBackgroundColour(wxSystemSettings::GetSystemColour(wxSYS_COLOUR_3DFACE));