From: Václav Slavík Date: Sun, 30 May 2010 12:21:49 +0000 (+0000) Subject: Fix Shift+TAB navigation from wxNotebook. X-Git-Url: https://git.saurik.com/wxWidgets.git/commitdiff_plain/4a0dcc87af44792d5dc993daa5b20f10348233da Fix Shift+TAB navigation from wxNotebook. 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 --- diff --git a/src/msw/notebook.cpp b/src/msw/notebook.cpp index 333a22bfc9..1e9a26dbbf 100644 --- a/src/msw/notebook.cpp +++ b/src/msw/notebook.cpp @@ -1138,11 +1138,21 @@ void wxNotebook::OnNavigationKey(wxNavigationKeyEvent& event) // 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) ) { @@ -1168,7 +1178,7 @@ void wxNotebook::OnNavigationKey(wxNavigationKeyEvent& event) // 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(); }