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

Attachment: wintrace.tar.gz
Description: Binary data

Reply via email to