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 - wxFileDialog now returns correct filter index for multiple-file dialogs
- added wxTextCtrl::HitTest() - added wxTextCtrl::HitTest()
- experimental wxURL implementation using WinInet functions (Hajo Kirchhoff) - experimental wxURL implementation using WinInet functions (Hajo Kirchhoff)
- fixed several bugs in wxNotebook with wxNB_MULTILINE style
wxGTK: wxGTK:

View File

@@ -619,10 +619,11 @@ bool wxNotebook::InsertPage(size_t nPage,
// succeeded: save the pointer to the page // succeeded: save the pointer to the page
m_pages.Insert(pPage, nPage); m_pages.Insert(pPage, nPage);
// for the first page (only) we need to adjust the size again because the // we may need to adjust the size again if the notebook size changed:
// notebook size changed: the tabs which hadn't been there before are now // normally this only happens for the first page we add (the tabs which
// shown // hadn't been there before are now shown) but for a multiline notebook it
if ( m_pages.GetCount() == 1 ) // 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); AdjustPageSize(pPage);
} }
@@ -698,6 +699,29 @@ void wxNotebook::OnSize(wxSizeEvent& event)
rc.left = rc.top = 0; rc.left = rc.top = 0;
GetSize((int *)&rc.right, (int *)&rc.bottom); 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); TabCtrl_AdjustRect(m_hwnd, false, &rc);
int width = rc.right - rc.left, int width = rc.right - rc.left,