]> git.saurik.com Git - wxWidgets.git/blobdiff - src/common/containr.cpp
Disable symbols visibility support for the Clang compiler.
[wxWidgets.git] / src / common / containr.cpp
index d5425032164a85a27e56edc40588bdb8187b3c5d..29756da6960d4e1bd0f2217e81767aa8e3af0f8f 100644 (file)
@@ -6,7 +6,7 @@
 // Created:     06.08.01
 // RCS-ID:      $Id$
 // Copyright:   (c) 2001 Vadim Zeitlin <zeitlin@dptmaths.ens-cachan.fr>
-// License:     wxWindows licence
+// Licence:     wxWindows licence
 ///////////////////////////////////////////////////////////////////////////////
 
 // ============================================================================
@@ -650,14 +650,26 @@ bool wxSetFocusToChild(wxWindow *win, wxWindow **childLastFocused)
         // It might happen that the window got reparented
         if ( (*childLastFocused)->GetParent() == win )
         {
-            wxLogTrace(TRACE_FOCUS,
-                       wxT("SetFocusToChild() => last child (0x%p)."),
-                       (*childLastFocused)->GetHandle());
+            // And it also could have become hidden in the meanwhile, in this
+            // case focus its parent instead.
+            while ( !(*childLastFocused)->IsShown() )
+            {
+                *childLastFocused = (*childLastFocused)->GetParent();
+                if ( !*childLastFocused )
+                    break;
+            }
 
-            // not SetFocusFromKbd(): we're restoring focus back to the old
-            // window and not setting it as the result of a kbd action
-            (*childLastFocused)->SetFocus();
-            return true;
+            if ( *childLastFocused )
+            {
+                wxLogTrace(TRACE_FOCUS,
+                           wxT("SetFocusToChild() => last child (0x%p)."),
+                           (*childLastFocused)->GetHandle());
+
+                // not SetFocusFromKbd(): we're restoring focus back to the old
+                // window and not setting it as the result of a kbd action
+                (*childLastFocused)->SetFocus();
+                return true;
+            }
         }
         else
         {