From 861bdae4742c61aee0452316de7b71013d8c5ea9 Mon Sep 17 00:00:00 2001 From: Vadim Zeitlin Date: Sat, 13 Oct 2012 22:52:12 +0000 Subject: [PATCH] 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 --- include/wx/containr.h | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/include/wx/containr.h b/include/wx/containr.h index 69dc4a92c6..24e404a7f8 100644 --- a/include/wx/containr.h +++ b/include/wx/containr.h @@ -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(); } -- 2.45.2