]> 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 dd4e892faf978871e76bf37434160d01dd3e2970..29756da6960d4e1bd0f2217e81767aa8e3af0f8f 100644 (file)
@@ -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
         {