]> git.saurik.com Git - wxWidgets.git/commitdiff
Fix Shift+TAB navigation from wxNotebook.
authorVáclav Slavík <vslavik@fastmail.fm>
Sun, 30 May 2010 12:21:49 +0000 (12:21 +0000)
committerVáclav Slavík <vslavik@fastmail.fm>
Sun, 30 May 2010 12:21:49 +0000 (12:21 +0000)
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

src/msw/notebook.cpp

index 333a22bfc94cfc3c4e1d73f7d133603ad33adc24..1e9a26dbbf6bbdffee2b91abdca4cfd9bbd0e75e 100644 (file)
@@ -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();
             }