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:
@@ -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();
|
||||
}
|
||||
|
Reference in New Issue
Block a user