[PROBLEM REPORT] Focus problem for mdi children

Gerard Patel gerard.patel at nerim.net
Wed Nov 7 18:50:02 CST 2001


Mdi child window activation is broken since

ChangeSet ID:	10050857000162942344322801
CVSROOT:	/opt/cvs-commit
Module name:	wine
Changes by:	julliard at wine2.	01/11/06 17:28:20

Modified files:
	dlls/ttydrv    : wnd.c 
	dlls/x11drv    : winpos.c 
	include        : winpos.h 
	windows        : message.c winpos.c 

Log message:
	Window activation cleanups.

The change that broke it is :


--- /opt/cvs-commit/wine/dlls/x11drv/winpos.c	2001/10/22 19:08:34	1.31
+++ /opt/cvs-commit/wine/dlls/x11drv/winpos.c	2001/11/06 22:28:19	1.32
@@ -955,8 +955,7 @@
             ShowCaret(winpos->hwnd);
     }
 
-    if (!(winpos->flags & SWP_NOACTIVATE))
-        WINPOS_ChangeActiveWindow( winpos->hwnd, FALSE );
+    if (!(winpos->flags & SWP_NOACTIVATE)) SetActiveWindow( winpos->hwnd );
 
       /* And last, send the WM_WINDOWPOSCHANGED message */
 

Cause of the problem : the WM_CHILDACTIVATE message is not
sent anymore, so the mdi children are not activated (caption does not
change color, more annoyingly the active child is not set). The problem
can be seen with Eudora or ForteFreeAgent.

Using this patch :
--- winpos.c.orig       Wed Nov  7 10:41:32 2001
+++ winpos.c    Thu Nov  8 00:44:29 2001
@@ -955,7 +955,20 @@
             ShowCaret(winpos->hwnd);
     }
 
-    if (!(winpos->flags & SWP_NOACTIVATE)) SetActiveWindow( winpos->hwnd );
+    if (!(winpos->flags & SWP_NOACTIVATE))
+    {
+         SetActiveWindow( winpos->hwnd );
+         if (!(wndPtr = WIN_FindWndPtr(winpos->hwnd))) return FALSE;
+
+         /* child windows get WM_CHILDACTIVATE message */
+         if( (wndPtr->dwStyle & (WS_CHILD | WS_POPUP)) == WS_CHILD )
+         {
+             WIN_ReleaseWndPtr(wndPtr);
+             SendMessageA(winpos->hwnd, WM_CHILDACTIVATE, 0, 0L);
+         }
+         else
+             WIN_ReleaseWndPtr(wndPtr);
+    }
 
       /* And last, send the WM_WINDOWPOSCHANGED message */


seems to fix the problem. It may be too simple though :-)

Gerard





More information about the wine-devel mailing list