X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/c219cecc129fd06327faa9d0a417550740f8bd64..9bfa7bfcbd458dc83d6eb5e85bebfaa24caa567f:/src/msw/frame.cpp diff --git a/src/msw/frame.cpp b/src/msw/frame.cpp index db3bd68269..ffa5812de3 100644 --- a/src/msw/frame.cpp +++ b/src/msw/frame.cpp @@ -154,6 +154,9 @@ wxFrame::~wxFrame() // For some reason, wxWindows can activate another task altogether // when a frame is destroyed after a modal dialog has been invoked. // Try to bring the parent to the top. + // MT:Only do this if this frame is currently the active window, else weird + // things start to happen + if ( wxGetActiveWindow() == this ) if (GetParent() && GetParent()->GetHWND()) ::BringWindowToTop((HWND) GetParent()->GetHWND()); } @@ -175,8 +178,10 @@ void wxFrame::DoGetClientSize(int *x, int *y) const rect.bottom -= pt.y; rect.right -= pt.x; - *x = rect.right; - *y = rect.bottom; + if ( x ) + *x = rect.right; + if ( y ) + *y = rect.bottom; } // Set the client size (i.e. leave the calculation of borders etc. @@ -239,15 +244,6 @@ void wxFrame::DoGetPosition(int *x, int *y) const *y = point.y; } -void wxFrame::DoSetSize(int x, int y, int width, int height, int sizeFlags) -{ - wxWindow::DoSetSize(x, y, width, height, sizeFlags); - - wxSizeEvent event(wxSize(width, height), m_windowId); - event.SetEventObject( this ); - GetEventHandler()->ProcessEvent(event); -} - bool wxFrame::Show(bool show) { int cshow; @@ -367,7 +363,7 @@ wxStatusBar* wxFrame::CreateStatusBar(int number, long style, wxWindowID id, { // VZ: calling CreateStatusBar twice is an error - why anyone would do it? wxCHECK_MSG( m_frameStatusBar == NULL, FALSE, - _T("recreating status bar in wxFrame") ); + wxT("recreating status bar in wxFrame") ); m_frameStatusBar = OnCreateStatusBar(number, style, id, name); @@ -382,14 +378,14 @@ wxStatusBar* wxFrame::CreateStatusBar(int number, long style, wxWindowID id, void wxFrame::SetStatusText(const wxString& text, int number) { - wxCHECK_RET( m_frameStatusBar != NULL, _T("no statusbar to set text for") ); + wxCHECK_RET( m_frameStatusBar != NULL, wxT("no statusbar to set text for") ); m_frameStatusBar->SetStatusText(text, number); } void wxFrame::SetStatusWidths(int n, const int widths_field[]) { - wxCHECK_RET( m_frameStatusBar != NULL, _T("no statusbar to set widths for") ); + wxCHECK_RET( m_frameStatusBar != NULL, wxT("no statusbar to set widths for") ); m_frameStatusBar->SetStatusWidths(n, widths_field); PositionStatusBar(); @@ -416,15 +412,24 @@ void wxFrame::PositionStatusBar() } #endif // wxUSE_STATUSBAR +void wxFrame::DetachMenuBar() +{ + if (m_frameMenuBar) + { + m_frameMenuBar->Detach(); + m_frameMenuBar = NULL; + } +} + void wxFrame::SetMenuBar(wxMenuBar *menu_bar) { if (!menu_bar) { - m_frameMenuBar = NULL; + DetachMenuBar(); return; } - wxCHECK_RET( !menu_bar->GetFrame(), _T("this menubar is already attached") ); + wxCHECK_RET( !menu_bar->GetFrame(), wxT("this menubar is already attached") ); if (m_frameMenuBar) delete m_frameMenuBar; @@ -666,10 +671,8 @@ bool wxFrame::ProcessCommand(int id) return FALSE; wxMenuItem *item = bar->FindItemForId(id); - if ( !item ) - return FALSE; - if ( item->IsCheckable() ) + if ( item && item->IsCheckable() ) { bar->Check(id, !bar->IsChecked(id)) ; } @@ -730,7 +733,7 @@ void wxFrame::ClientToScreen(int *x, int *y) const wxToolBar* wxFrame::CreateToolBar(long style, wxWindowID id, const wxString& name) { wxCHECK_MSG( m_frameToolBar == NULL, FALSE, - _T("recreating toolbar in wxFrame") ); + wxT("recreating toolbar in wxFrame") ); wxToolBar* toolBar = OnCreateToolBar(style, id, name); if (toolBar) @@ -878,10 +881,7 @@ bool wxFrame::HandlePaint() } else { - wxPaintEvent event(m_windowId); - event.m_eventObject = this; - - return GetEventHandler()->ProcessEvent(event); + return wxWindow::HandlePaint(); } } else @@ -1061,3 +1061,4 @@ long wxFrame::MSWWindowProc(WXUINT message, WXWPARAM wParam, WXLPARAM lParam) return rc; } +