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); }