Fix flickering when resizing a frame with status bar in wxMSW.
The flicker was only visible under Windows XP or when using a class theme and was due to mis-positioning the status bar initially in PositionStatusBar(). Fix this by adjusting its position by the toolbar offset before calling its SetSize(). Closes #16705. git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@78325 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
@@ -331,16 +331,6 @@ void wxFrame::PositionStatusBar()
|
||||
int w, h;
|
||||
GetClientSize(&w, &h);
|
||||
|
||||
// Resize the status bar to its default height, as it could have been set
|
||||
// to a wrong value before by WM_SIZE sent during the frame creation and
|
||||
// our status bars preserve their programmatically set size to avoid being
|
||||
// resized by DefWindowProc() to the full window width, so if we didn't do
|
||||
// this here, the status bar would retain the possibly wrong current height.
|
||||
m_frameStatusBar->SetSize(wxDefaultSize, wxSIZE_AUTO_HEIGHT);
|
||||
|
||||
int sw, sh;
|
||||
m_frameStatusBar->GetSize(&sw, &sh);
|
||||
|
||||
int x = 0;
|
||||
#if wxUSE_TOOLBAR
|
||||
wxToolBar * const toolbar = GetToolBar();
|
||||
@@ -364,6 +354,16 @@ void wxFrame::PositionStatusBar()
|
||||
//else: no adjustments necessary for the toolbar on top
|
||||
#endif // wxUSE_TOOLBAR
|
||||
|
||||
// Resize the status bar to its default height, as it could have been set
|
||||
// to a wrong value before by WM_SIZE sent during the frame creation and
|
||||
// our status bars preserve their programmatically set size to avoid being
|
||||
// resized by DefWindowProc() to the full window width, so if we didn't do
|
||||
// this here, the status bar would retain the possibly wrong current height.
|
||||
m_frameStatusBar->SetSize(x, h, w, wxDefaultCoord, wxSIZE_AUTO_HEIGHT);
|
||||
|
||||
int sw, sh;
|
||||
m_frameStatusBar->GetSize(&sw, &sh);
|
||||
|
||||
// Since we wish the status bar to be directly under the client area,
|
||||
// we use the adjusted sizes without using wxSIZE_NO_ADJUSTMENTS.
|
||||
m_frameStatusBar->SetSize(x, h, w, sh);
|
||||
|
Reference in New Issue
Block a user