Set wxTAB_TRAVERSAL for wxNavigationEnabled<> windows with focusable children.

We need to have this flag under wxMSW in order for navigation events to be
generated for the window. As wxNavigationEnabled can't set this flag on
creation because its ctor is called too early, do it in overridden AddChild().

Closes #13271.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@72664 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Vadim Zeitlin 2012-10-13 22:52:12 +00:00
parent e68b7b364a
commit 861bdae474

View File

@ -73,7 +73,7 @@ public:
// Returns whether we or one of our children accepts focus.
bool AcceptsFocusRecursively() const
bool AcceptsFocus() const { return m_acceptsFocus; }
{ return m_acceptsFocusSelf || m_acceptsFocusChildren; }
// We accept focus from keyboard if we accept it at all.
bool AcceptsFocusFromKeyboard() const { return AcceptsFocusRecursively(); }
@ -205,7 +205,13 @@ public:
{
BaseWindowClass::AddChild(child);
m_container.UpdateCanFocusChildren();
if ( m_container.UpdateCanFocusChildren() )
{
// Under MSW we must have wxTAB_TRAVERSAL style for TAB navigation
// to work.
if ( !BaseWindowClass::HasFlag(wxTAB_TRAVERSAL) )
BaseWindowClass::ToggleWindowStyle(wxTAB_TRAVERSAL);
}
}
WXDLLIMPEXP_INLINE_CORE virtual void RemoveChild(wxWindowBase *child)
@ -216,6 +222,8 @@ public:
BaseWindowClass::RemoveChild(child);
// We could reset wxTAB_TRAVERSAL here but it doesn't seem to do any
// harm to keep it.
m_container.UpdateCanFocusChildren();
}