At 03:06 PM 7/17/00 -0400, you wrote:
>Ian,
>
>This patch should solve the splash screen problem you're experiencing. Let
>me know if it works.
>

Next episode of the EventExpose saga...

I've done more testing with my Wine crasher (btw if someone wants it, I can
send it, it's a chess program from the example code of Borland C 3.1).
When it starts, it outputs a message box (opening book not found). If I move
this messagebox window (by holding it in its caption), it leaves often fine marks
on the main window, especially in the menu area.
If I move the message box very fast, sometimes Wine goes in real trouble (repainting
does not occur anymore). This is leading me to think that there is some
reentry problem somewhere.

I've tried a few changes, with no great success. The best result I had was by 
replacing SendNotifyMessage by SendMessage. It fixes my original repainting 
problem without creating too much elsewhere (with all my tests I had 2 small
problems, one time Notepad 16 bits did not refresh itself after switching from
another task, another (with Acrobat viewer 32) I had an error message about
an invalid region. I can't be sure that these problems are related to all these
changes, though; and I can't reproduce them  :-/)

Gerard
--- wine/windows/defwnd.c       Fri Jul 14 10:44:48 2000
+++ wine2/windows/defwnd.c      Sun Jul 23 15:23:22 2000
@@ -593,7 +593,6 @@
     return result;
 }
 
-
 /***********************************************************************
  *  DefWindowProcA [USER32.126] 
  *
@@ -644,6 +643,15 @@
     case WM_SETTEXT:
        DEFWND_SetTextA( wndPtr, (LPCSTR)lParam );
        NC_HandleNCPaint( hwnd , (HRGN)1 );  /* Repaint caption */
+        break;
+
+    case WM_SYNCPAINT:
+        /* if the window is invalid, send a WM_NCPAINT and WM_ERASEBKGND */
+        if (wndPtr->hrgnUpdate)
+        {
+            RedrawWindow( wndPtr->hwndSelf, 0, wndPtr->hrgnUpdate,
+                          RDW_ERASENOW | RDW_ERASE | RDW_FRAME | RDW_ALLCHILDREN );
+        }
         break;
 
     default:
--- wine/windows/x11drv/event.c Fri Jun  9 02:43:49 2000
+++ wine2/windows/x11drv/event.c        Sun Jul 23 15:24:36 2000
@@ -638,9 +638,12 @@
   rect.bottom = rect.top + event->height;
   WIN_ReleaseWndPtr(pWnd);
  
+  /* invalidate the window */
   Callout.RedrawWindow( hWnd, &rect, 0,
-                          RDW_INVALIDATE | RDW_FRAME | RDW_ALLCHILDREN | RDW_ERASE |
-                          (event->count ? 0 : RDW_ERASENOW) );
+                        RDW_INVALIDATE | RDW_FRAME | RDW_ALLCHILDREN | RDW_ERASE);
+
+  /* Notify the window's thread that background need to be refresh */
+  SendMessageA(hWnd, WM_SYNCPAINT, 0, 0);
 }
 
 



Reply via email to