git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@15795 
c3d73ce0-8a6f-49c7-b76d-
6d57e0e08775
         }
 
         // to make the dialog navigation work with the nested panels we must
         }
 
         // to make the dialog navigation work with the nested panels we must
-        // use this style but, unfortunately, it hangs NT4 in some situations
-        // so we shouldn't use it -- even though it means that keyboard accels
-        // in, e.g. wxWizard, don't work
-#if 0
         if ( flags & wxTAB_TRAVERSAL )
         {
             *exstyle |= WS_EX_CONTROLPARENT;
         }
         if ( flags & wxTAB_TRAVERSAL )
         {
             *exstyle |= WS_EX_CONTROLPARENT;
         }
         // place edit control from being closed with Escape in a dialog
         if ( msg->message != WM_KEYDOWN || msg->wParam != VK_ESCAPE )
         {
         // place edit control from being closed with Escape in a dialog
         if ( msg->message != WM_KEYDOWN || msg->wParam != VK_ESCAPE )
         {
-            if ( ::IsDialogMessage(GetHwnd(), msg) )
+            // ::IsDialogMessage() can enter in an infinite loop when
+            // WS_EX_CONTROLPARENT is specified and the currently focused
+            // window is disabled or hidden, so don't call it in this case
+            HWND hwndFocus = ::GetFocus();
+            if ( !hwndFocus ||
+                  ::IsWindowEnabled(hwndFocus) && ::IsWindowVisible(hwndFocus) )
-                // IsDialogMessage() did something...
-                return TRUE;
+                if ( ::IsDialogMessage(GetHwnd(), msg) )
+                {
+                    // IsDialogMessage() did something...
+                    return TRUE;
+                }