Duane Clark wrote: > > Reading the MS docs, it appears to me that in this case RDW_FRAME should > be ignored. What happens is the program has an area that needs to be > repainted, but this part of the code causes only a portion to be > repainted, leaving a portion of the screen still "invalidated". This > causes another paint request, which since nothing has changed, still > does not result in the correct repainting. And so it is stuck in an > indefinite loop. I probably should mention where in the MS docs I was getting this idea. For the function RedrawWindow: http://msdn.microsoft.com/library/default.asp?url=/library/en-us/gdi/pantdraw_81pz.asp It says "The following flags are used to validate the window." and lists only RDW_NOERASE, RDW_NOFRAME (rather than RDW_FRAME), RDW_NOINTERNALPAINT, and RDW_VALIDATE. So, I will go ahead and submit this patch, and since it is small, just attach it here again. I have been using it with Wine for about 3 months now, so it does not appear to adversely effect anything. Probably a better fix would be to correctly implement the other flags, though. Changelog: RDW_FRAME should be ignored when validating a region.
Index: windows/painting.c =================================================================== RCS file: /home/wine/wine/windows/painting.c,v retrieving revision 1.71 diff -u -r1.71 painting.c --- windows/painting.c 5 Jul 2002 01:23:31 -0000 1.71 +++ windows/painting.c 25 Jul 2002 00:44:15 -0000 @@ -779,15 +779,9 @@ OffsetRect( &r2, pt.x, pt.y ); hRgn = CreateRectRgnIndirect( &r2 ); } - else /* entire window or client depending on RDW_FRAME */ + else /* entire window */ { - if( flags & RDW_FRAME ) hRgn = 1; - else - { - GETCLIENTRECTW( wndPtr, r2 ); - hRgn = CreateRectRgnIndirect( &r2 ); - } } }