]> git.saurik.com Git - wxWidgets.git/blobdiff - src/msw/notebook.cpp
Fix broken and missing DataView interface items for Phoenix
[wxWidgets.git] / src / msw / notebook.cpp
index 2a3a46fe781166c8dc3a0a11f460fdee118968f8..1d69e439bbe43f7fb73cda7a8d1cec1c180c0324 100644 (file)
@@ -375,17 +375,22 @@ void wxNotebook::UpdateSelection(int selNew)
     {
         wxNotebookPage *pPage = m_pages[selNew];
         pPage->Show(true);
-    }
-
-    // Changing the page should give the focus to it but, as per bug report
-    // http://sf.net/tracker/index.php?func=detail&aid=1150659&group_id=9863&atid=109863,
-    // we should not set the focus to it directly since it erroneously
-    // selects radio buttons and breaks keyboard handling for a notebook's
-    // scroll buttons. So give focus to the notebook and not the page.
 
-    // but don't do this is the notebook is hidden
-    if ( ::IsWindowVisible(GetHwnd()) )
-        SetFocus();
+        // In addition to showing the page, we also want to give focus to it to
+        // make it possible to work with it from keyboard easily. However there
+        // are two exceptions: first, don't touch the focus at all if the
+        // notebook itself is not currently shown.
+        if ( ::IsWindowVisible(GetHwnd()) )
+        {
+            // And second, don't give focus away if the tab control itself has
+            // it, as this is how the native property sheets behave: if you
+            // explicitly click on the tab label giving it focus, it will
+            // remain after switching to another page. But if the focus was
+            // inside the notebook page, it switches to the new page.
+            if ( !HasFocus() )
+                pPage->SetFocus();
+        }
+    }
 
     m_selection = selNew;
 }