When the focus was on a tab label, Shift+TAB didn't move it out of the
notebook to the preceding control, as it should. Instead, focus moved to
the last control in the current notebook page.
This change fixes it, TAB and Shift-TAB cycling through controls now
behaves identically modulo direction.
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@64432
c3d73ce0-8a6f-49c7-b76d-
6d57e0e08775
// 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;
// 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
{
// 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 ( 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 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() )