Fixed copying of the MDI 'Windows' menu items if the items are not of
type MFT_STRING.

diff --git a/windows/mdi.c b/windows/mdi.c
index 4048976..3fd68fb 100644
--- a/windows/mdi.c
+++ b/windows/mdi.c
@@ -249,20 +249,30 @@
         if( ci->nActiveChildren )
         {
             INT j = i - ci->nActiveChildren + 1;
-            char buffer[100];
-            UINT id,state;
+            LPWSTR buffer = NULL;
+	    MENUITEMINFOW mii;
 
             for( ; i >= j ; i-- )
             {
-                id = GetMenuItemID(ci->hWindowMenu,i );
-                state = GetMenuState(ci->hWindowMenu,i,MF_BYPOSITION); 
+		memset(&mii, 0, sizeof(mii));
+		mii.cbSize = sizeof(mii);
+		mii.fMask = MIIM_CHECKMARKS | MIIM_DATA | MIIM_ID | MIIM_STATE
+		  | MIIM_SUBMENU | MIIM_TYPE | MIIM_BITMAP;
 
-                GetMenuStringA(ci->hWindowMenu, i, buffer, 100, MF_BYPOSITION);
-
-                DeleteMenu(ci->hWindowMenu, i , MF_BYPOSITION);
-                InsertMenuA(hmenuWindow, pos, MF_BYPOSITION | MF_STRING,
-                              id, buffer);
-                CheckMenuItem(hmenuWindow ,pos , MF_BYPOSITION | (state & MF_CHECKED));
+		GetMenuItemInfoW(ci->hWindowMenu, i, TRUE, &mii);
+		if(mii.cch) { /* Menu is MFT_STRING */
+		    mii.cch++; /* add room for '\0' */
+		    buffer = HeapAlloc(GetProcessHeap(), 0,
+				       mii.cch * sizeof(WCHAR));
+		    mii.dwTypeData = buffer;
+		    GetMenuItemInfoW(ci->hWindowMenu, i, TRUE, &mii);
+		}
+                DeleteMenu(ci->hWindowMenu, i, MF_BYPOSITION);
+                InsertMenuItemW(hmenuWindow, pos, TRUE, &mii);
+		if(buffer) {
+		    HeapFree(GetProcessHeap(), 0, buffer);
+		    buffer = NULL;
+		}
             }
         }