fixed the bug which resulted in the focus being stolen from the panel child even if it had been explicitly set to it

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/branches/WX_2_4_BRANCH@17356 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Vadim Zeitlin
2002-09-23 15:25:55 +00:00
parent ecc4fd1e37
commit 4a39ae8916

View File

@@ -288,39 +288,18 @@ bool wxControlContainer::DoSetFocus()
wxLogTrace(_T("focus"), _T("SetFocus on wxPanel 0x%08lx."),
(unsigned long)m_winParent->GetHandle());
// If the panel gets the focus *by way of getting it set directly*
// we move the focus to the first window that can get it.
// when the panel gets the focus we move the focus to either the last
// window that had the focus or the first one that can get it unless the
// focus had been already set to some other child
// VZ: no, we set the focus to the last window too. I don't understand why
// should we make this distinction: if an app wants to set focus to
// some precise control, it may always do it directly, but if we don't
// use m_winLastFocused here, the focus won't be set correctly after a
// notebook page change nor after frame activation under MSW (it calls
// SetFocus too)
//
// RR: yes, when I the tab key to navigate in a panel with some controls and
// a notebook and the focus jumps to the notebook (typically coming from
// a button at the top) the notebook should focus the first child in the
// current notebook page, not the last one which would otherwise get the
// focus if you used the tab key to navigate from the current notebook
// page to button at the bottom. See every page in the controls sample.
//
// VZ: ok, but this still doesn't (at least I don't see how it can) take
// care of first/last child problem: i.e. if Shift-TAB is pressed in a
// situation like above, the focus should be given to the last child,
// not the first one (and not to the last focused one neither) - I
// think my addition to OnNavigationKey() above takes care of it.
// Keeping #ifdef __WXGTK__ for now, but please try removing it and see
// what happens.
//
// RR: Removed for now. Let's see what happens..
// if our child already has focus, don't take it away from it
wxWindow *win = wxWindow::FindFocus();
while ( win )
{
if ( win == m_winParent )
{
// our child already has focus, don't take it away from it
return TRUE;
}
if ( win->IsTopLevel() )
{
@@ -341,10 +320,7 @@ void wxControlContainer::HandleOnFocus(wxFocusEvent& event)
(unsigned long)m_winParent->GetHandle(),
m_winParent->GetName().c_str() );
// If we panel got the focus *by way of getting clicked on*
// we move the focus to either the last window that had the
// focus or the first one that can get it.
(void)SetFocusToChild();
DoSetFocus();
event.Skip();
}