From 4a39ae8916407172c92dc462d1d1a8c74e1dd098 Mon Sep 17 00:00:00 2001 From: Vadim Zeitlin Date: Mon, 23 Sep 2002 15:25:55 +0000 Subject: [PATCH] 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 --- src/common/containr.cpp | 38 +++++++------------------------------- 1 file changed, 7 insertions(+), 31 deletions(-) diff --git a/src/common/containr.cpp b/src/common/containr.cpp index daf414ce55..7ca89fb072 100644 --- a/src/common/containr.cpp +++ b/src/common/containr.cpp @@ -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(); }