Fix a bug in SetWindowPos to prevent parent from erasing its child
painting area when parent window and child window don't have
WS_CLIPCHILDREN and WS_CLIPSIBLINGS.

diff --git a/windows/winpos.c b/windows/winpos.c
index 52476a1d..9794e8e 100644
--- a/windows/winpos.c
+++ b/windows/winpos.c
@@ -2821,6 +2821,11 @@
     {
 	if( !(winpos.flags & SWP_NOREDRAW) )
 	{
+	    if (wndPtr->parent == wndTemp)
+	    {   
+		/*  Desktop does not receive wm_paint message so we use RDW_ERASENOW to erase the 
+		    the desktop window  */
+ 
 	    if( uFlags & SWP_EX_PAINTSELF )
 	    {
 		PAINT_RedrawWindow( wndPtr->hwndSelf, NULL, (visRgn == 1) ? 0 : visRgn, RDW_ERASE | RDW_FRAME |
@@ -2829,9 +2834,29 @@
 	    }
 	    else
 	    {
-		PAINT_RedrawWindow( wndPtr->parent->hwndSelf, NULL, (visRgn == 1) ? 0 : visRgn, RDW_ERASE |
-				  ((winpos.flags & SWP_DEFERERASE) ? 0 : RDW_ERASENOW) | RDW_INVALIDATE |
-				    RDW_ALLCHILDREN, RDW_EX_USEHRGN );
+		    PAINT_RedrawWindow( wndPtr->parent->hwndSelf, NULL, (visRgn == 1) ? 0 : visRgn, 
+			  RDW_ERASE | RDW_ERASENOW | RDW_INVALIDATE | RDW_ALLCHILDREN, RDW_EX_USEHRGN );
+		}
+	    }
+	    else
+	    {
+		if( uFlags & SWP_EX_PAINTSELF )
+		{
+		    /*  Use PAINT_RedrawWindow to explicitly force an invalidation of the window,
+			its parent and sibling and so on, and then update the parent window, 
+			the non-top-level window. Rely on the system to repaint other affected 
+			windows later on.  */ 
+
+		    PAINT_RedrawWindow( wndPtr->hwndSelf, NULL, (visRgn == 1) ? 0 : visRgn, RDW_ERASE | 
+		       	 RDW_FRAME | RDW_INVALIDATE | RDW_ALLCHILDREN, RDW_EX_XYWINDOW | RDW_EX_USEHRGN );
+		}
+		else
+		{
+		    PAINT_RedrawWindow( wndPtr->parent->hwndSelf, NULL, (visRgn == 1) ? 0 : visRgn, 
+			 RDW_ERASE | RDW_INVALIDATE | RDW_ALLCHILDREN, RDW_EX_USEHRGN );
+
+		    UpdateWindow( wndPtr->parent->hwndSelf);
+		}
 	    }
         }
 	if( visRgn != 1 )