Regression in painting.c

Ron Jensen etech at jentronics.com
Fri Mar 4 09:46:06 CST 2005


dlls/user/painting.c is getting caught in an infinite loop in the function update_now()
I added two TRACE statements to try to figure out what is going on.  Uncommenting
the SendMessageW() line allows the loop to exit.  See the attached win traces for 
the working and broken cases.

I don't know enough about what this function is trying to do to fix it...

The bug can be reproduced using Irfan View's ( www.irfanview.com )  slideshow
functions.

--- painting.c.orig	2005-02-28 12:01:55.000000000 -0700
+++ painting.c	2005-03-04 08:18:52.000000000 -0700
@@ -340,6 +340,7 @@
         else if (rdw_flags & RDW_ALLCHILDREN) flags |= UPDATE_ALLCHILDREN;
 
         if (!get_update_flags( hwnd, &child, &flags )) break;
+TRACE( "flags = %d, child = %d, prev = %d\n", flags, child , prev );
         if (!flags) break;  /* nothing more to do */
 
         if (child == prev)  /* same window again, didn't get repainted properly */
@@ -351,8 +352,10 @@
             TRACE( "%p not repainted properly, erasing\n", child );
             if ((hrgn = send_ncpaint( child, NULL, &erase_flags )))
             {
+                TRACE( "hrgn = %p, deleting\n", hrgn );
                 send_erase( child, erase_flags, hrgn, &rect, NULL );
                 DeleteObject( hrgn );
+//            SendMessageW( child, WM_PAINT, 0, 0 );
             }
         }
         else
-------------- next part --------------
A non-text attachment was scrubbed...
Name: wintrace.tar.gz
Type: application/octet-stream
Size: 6420 bytes
Desc: not available
Url : http://www.winehq.org/pipermail/wine-devel/attachments/20050304/e4ae819a/wintrace.tar.obj


More information about the wine-devel mailing list