http://bugs.winehq.org/show_bug.cgi?id=3023
--- Comment #24 from Eliot Blennerhassett ewblen+wine@gmail.com 2010-06-30 20:25:19 --- refining my previous comment. OrCad is an MDI (?) app. I.e. multiple windows in a workspace.
The place part functionality fails if the specific schematic window within the workspace loses focus, either by clicking on another window in the workspace, or moving the mouse outside the workspace.
Could it be that WINPOS_ActivateOtherWindow() is activating the 'wrong' window?
I do have a patch that allows test mentioned in #22 to succeed, and yet OrCad to work. Copy static DEFDLG_GetDlgProc, then use it thus:
{ DLGPROC dlgproc;
if (!(dlgproc = DIALOG_GetDlgProc( hwnd ))) if (hwnd == GetActiveWindow()) WINPOS_ActivateOtherWindow( hwnd ); }
I.e. only call WINPOS_ActivateOtherWindow if the hwnd has no dialog proc, i.e. it is not a real dialog window.
I'd love to know what app and symptom the failing test, and this code are addressing. I have be trawling through the CVS logs, this line of code was added in 2004 by juilliard to wine/windows/dialog.c cvs r1.130, and the test in msg.c was added at the same time, with no comment about why.
I still maintain that the usage of EndDialog in tests/msg.c is unusual, and doesn't actually test the 99.9% usage case where it is called from within the dialog's dlgProc.