diff -ru xwin68/winwindow.c xwin68a/winwindow.c
--- xwin68/winwindow.c	2002-10-21 07:46:33.000000000 +0900
+++ xwin68a/winwindow.c	2002-11-07 01:25:18.000000000 +0900
@@ -198,11 +198,6 @@
 
   fResult = winGetScreenPriv(pWin->drawable.pScreen)->PositionWindow(pWin, x, y);
   
-  if (wBoundingShape(pWin))
-    {
-      winReshape (pWin);
-    }
-  
   winUpdateRgn (pWin);
   
   return fResult;
@@ -237,6 +232,7 @@
 winUnmapWindowPRootless (WindowPtr pWin)
 {
   Bool			fResult = FALSE;
+  winWindowPriv(pWin);
 
 #if CYGDEBUG
   ErrorF ("winUnmapWindowPRootless()\n");
@@ -244,6 +240,12 @@
 
   fResult = winGetScreenPriv(pWin->drawable.pScreen)->UnrealizeWindow(pWin);
   
+  if (pWinPriv->hRgn != NULL)
+    {
+      DeleteObject(pWinPriv->hRgn);
+      pWinPriv->hRgn = NULL;
+    }
+  
   winUpdateRgn (pWin);
   
   return fResult;
@@ -265,6 +267,8 @@
 
   fResult = winGetScreenPriv(pWin->drawable.pScreen)->RealizeWindow(pWin);
   
+  winReshape (pWin);
+  
   winUpdateRgn (pWin);
   
   return fResult;
@@ -402,23 +406,19 @@
       return;
     }
   
-  if (wBoundingShape(pWin)) 
+  if (pWinPriv->hRgn != NULL)
     {
-      REGION_INIT(pScreen, &rrNewShape, NullBox, 0);
-      REGION_COPY(pScreen, &rrNewShape, wBoundingShape(pWin));
-      REGION_TRANSLATE(pScreen, &rrNewShape, pWin->borderWidth,
-                       pWin->borderWidth);
-    }
-  else
-    {
-      if (pWinPriv->hRgn != NULL)
-        {
-	  DeleteObject (pWinPriv->hRgn);
-	  pWinPriv->hRgn = NULL;
-	  return;
-        }
+      DeleteObject (pWinPriv->hRgn);
+      pWinPriv->hRgn = NULL;
     }
   
+  if (!wBoundingShape(pWin)) return;
+
+  REGION_INIT(pScreen, &rrNewShape, NullBox, 0);
+  REGION_COPY(pScreen, &rrNewShape, wBoundingShape(pWin));
+  REGION_TRANSLATE(pScreen, &rrNewShape, pWin->borderWidth,
+                   pWin->borderWidth);
+  
   nRects = REGION_NUM_RECTS(&rrNewShape);
   pShape = REGION_RECTS(&rrNewShape);
   
@@ -441,24 +441,9 @@
 
 	  DeleteObject (hRgnRect);
         }
-
-      if (pWinPriv->hRgn != NULL)
-	{
-	  DeleteObject (pWinPriv->hRgn);
-	  pWinPriv->hRgn = NULL;
-	}
       
       pWinPriv->hRgn = hRgn;
     }
-  else
-    {
-      if (pWinPriv->hRgn != NULL)
-        {
-	  DeleteObject (pWinPriv->hRgn);
-	  pWinPriv->hRgn = NULL;
-        }
-      
-    }
 
   REGION_UNINIT(pScreen, &rrNewShape);
   
