Do give focus to the wxNotebook page when switching to it under MSW.

Switching to the page but keeping the focus on the notebook itself makes it
difficult to use the UI from keyboard and is inconsistent with the behaviour
of native property sheets. Do restore the code to set the focus to the page as
the bug that resulted in a wrong radio button being selected when we did this
was apparently fixed elsewhere in the meanwhile because it doesn't happen any
more even with this change.

See #2268.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@72657 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Vadim Zeitlin
2012-10-13 22:49:33 +00:00
parent c254e996ca
commit 256edfbf11

View File

@@ -375,18 +375,23 @@ void wxNotebook::UpdateSelection(int selNew)
{
wxNotebookPage *pPage = m_pages[selNew];
pPage->Show(true);
// 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();
}
}
// 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();
m_selection = selNew;
}