#include "wx/dcclient.h"
#include "wx/dcmemory.h"
#include "wx/control.h"
+ #include "wx/panel.h"
#endif // WX_PRECOMP
#include "wx/imaglist.h"
// succeeded: save the pointer to the page
m_pages.Insert(pPage, nPage);
+ // also ensure that the notebook background is used for its pages by making
+ // them transparent: this ensures that MSWGetBgBrush() queries the notebook
+ // for the background brush to be used for erasing them
+ if ( wxPanel *panel = wxDynamicCast(pPage, wxPanel) )
+ {
+ panel->MSWSetTransparentBackground();
+ }
+
// 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
// the wxObject* casts are required to avoid MinGW GCC 2.95.3 ICE
const bool isFromParent = event.GetEventObject() == (wxObject*) parent;
const bool isFromSelf = event.GetEventObject() == (wxObject*) this;
+ const bool isForward = event.GetDirection();
- if ( isFromParent || isFromSelf )
+ if ( isFromSelf && !isForward )
+ {
+ // focus is currently on notebook tab and should leave
+ // it backwards (Shift-TAB)
+ event.SetCurrentFocus(this);
+ parent->HandleWindowEvent(event);
+ }
+ else if ( isFromParent || isFromSelf )
{
// no, it doesn't come from child, case (b) or (c): forward to a
- // page but only if direction is backwards (TAB) or from ourselves,
+ // page but only if entering notebook page (i.e. direction is
+ // backwards (Shift-TAB) comething from out-of-notebook, or
+ // direction is forward (TAB) from ourselves),
if ( m_nSelection != wxNOT_FOUND &&
(!event.GetDirection() || isFromSelf) )
{
// if the direction is forwards. Otherwise set the focus to the
// notebook itself. The notebook is always the 'first' control of a
// page.
- if ( !event.GetDirection() )
+ if ( !isForward )
{
SetFocus();
}