- Handle WM_MDIRESTORE by calling WM_SYSCOMMAND for
the child window so that the system menu is set correctly.
- In MDICascade and MDITile use WM_MDIRESTORE message
to restore maximized window so that system menu is
handled correctly.

diff --git a/windows/mdi.c b/windows/mdi.c
index b551ba5..9bfcf4b 100644
--- a/windows/mdi.c
+++ b/windows/mdi.c
@@ -640,7 +640,8 @@
     UINT32	total;
   
     if (ci->hwndChildMaximized)
-        ShowWindow16( ci->hwndChildMaximized, SW_NORMAL);
+        SendMessage32A( clientWnd->hwndSelf, WM_MDIRESTORE,
+                        (WPARAM32)ci->hwndChildMaximized, 0);
 
     if (ci->nActiveChildren == 0) return 0;
 
@@ -686,7 +687,8 @@
     UINT32	total = 0;
 
     if (ci->hwndChildMaximized)
-	ShowWindow32(ci->hwndChildMaximized, SW_NORMAL);
+        SendMessage32A( wndClient->hwndSelf, WM_MDIRESTORE,
+                        (WPARAM32)ci->hwndChildMaximized, 0);
 
     if (ci->nActiveChildren == 0) return;
 
@@ -1011,7 +1013,7 @@
 	break;
 	
       case WM_MDIRESTORE:
-	ShowWindow32( (HWND32)wParam, SW_NORMAL);
+        SendMessage32A( (HWND32)wParam, WM_SYSCOMMAND, SC_RESTORE, 0);
 	return 0;
 
       case WM_MDISETMENU: