Protect against wrong return value from WM_INITDIALOG.

diff --git a/windows/dialog.c b/windows/dialog.c
index bcb0255..8a01df3 100644
--- a/windows/dialog.c
+++ b/windows/dialog.c
@@ -771,12 +771,22 @@
     if (DIALOG_CreateControls( wndPtr, dlgTemplate, &template,
                                hInst, win32Template ))
     {
-       /* Send initialisation messages and set focus */
+        HWND hwndPreInitFocus;
+
+        /* Send initialisation messages and set focus */
 
 	dlgInfo->hwndFocus = GetNextDlgTabItem( hwnd, 0, FALSE );
 
+	hwndPreInitFocus = GetFocus();
 	if (SendMessageA( hwnd, WM_INITDIALOG, (WPARAM)dlgInfo->hwndFocus, param ))
             SetFocus( dlgInfo->hwndFocus );
+	else
+	{
+	  /* If the dlgproc has returned FALSE (indicating handling of keyboard focus)
+	     but the focus has not changed, set the focus where we expect it. */
+	  if ( GetFocus() == hwndPreInitFocus )
+	    SetFocus( dlgInfo->hwndFocus );
+	}
 
 	if (template.style & WS_VISIBLE && !(wndPtr->dwStyle & WS_VISIBLE)) 
 	{