fixes for page positioning for notebooks with wxNB_MULTILINE style (closes bugs 709099 and 645323)

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@25581 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Vadim Zeitlin 2004-02-07 20:48:18 +00:00
parent 9a6c9e31b0
commit 56b9925b11
2 changed files with 29 additions and 4 deletions

View File

@ -152,6 +152,7 @@ wxMSW:
- wxFileDialog now returns correct filter index for multiple-file dialogs
- added wxTextCtrl::HitTest()
- experimental wxURL implementation using WinInet functions (Hajo Kirchhoff)
- fixed several bugs in wxNotebook with wxNB_MULTILINE style
wxGTK:

View File

@ -619,10 +619,11 @@ bool wxNotebook::InsertPage(size_t nPage,
// succeeded: save the pointer to the page
m_pages.Insert(pPage, nPage);
// for the first page (only) we need to adjust the size again because the
// notebook size changed: the tabs which hadn't been there before are now
// shown
if ( m_pages.GetCount() == 1 )
// we may need to adjust the size again if the notebook size changed:
// normally this only happens for the first page we add (the tabs which
// hadn't been there before are now shown) but for a multiline notebook it
// can happen for any page at all as a new row could have been started
if ( m_pages.GetCount() == 1 || HasFlag(wxNB_MULTILINE) )
{
AdjustPageSize(pPage);
}
@ -698,6 +699,29 @@ void wxNotebook::OnSize(wxSizeEvent& event)
rc.left = rc.top = 0;
GetSize((int *)&rc.right, (int *)&rc.bottom);
// there seems to be a bug in the implementation of TabCtrl_AdjustRect(): it
// returns completely false values for multiline tab controls after the tabs
// are added but before getting the first WM_SIZE (off by ~50 pixels, see
//
// http://sf.net/tracker/index.php?func=detail&aid=645323&group_id=9863&atid=109863
//
// and the only work around I could find was this ugly hack... without it
// simply toggling the "multiline" checkbox in the notebook sample resulted
// in a noticeable page displacement
if ( HasFlag(wxNB_MULTILINE) )
{
// avoid an infinite recursion: we get another notification too!
static bool s_isInOnSize = false;
if ( !s_isInOnSize )
{
s_isInOnSize = true;
SendMessage(GetHwnd(), WM_SIZE, SIZE_RESTORED,
MAKELPARAM(rc.right, rc.bottom));
s_isInOnSize = false;
}
}
TabCtrl_AdjustRect(m_hwnd, false, &rc);
int width = rc.right - rc.left,