From: Vadim Zeitlin Date: Sat, 7 Feb 2004 20:48:18 +0000 (+0000) Subject: fixes for page positioning for notebooks with wxNB_MULTILINE style (closes bugs 70909... X-Git-Url: https://git.saurik.com/wxWidgets.git/commitdiff_plain/56b9925b116dfa58028fccb2556852f2da2ab9ac?hp=9a6c9e31b0731764f26a3124f7d0dabaa86a1a06 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 --- diff --git a/docs/changes.txt b/docs/changes.txt index 2d613b9056..7145774cae 100644 --- a/docs/changes.txt +++ b/docs/changes.txt @@ -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: diff --git a/src/msw/notebook.cpp b/src/msw/notebook.cpp index da0ea9377d..3ca3d0f8b5 100644 --- a/src/msw/notebook.cpp +++ b/src/msw/notebook.cpp @@ -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,