Index: programs/Xserver/hw/xwin/InitInput.c =================================================================== RCS file: /cvs/xorg/xc/programs/Xserver/hw/xwin/InitInput.c,v retrieving revision 1.4 diff -u -r1.4 InitInput.c --- programs/Xserver/hw/xwin/InitInput.c 15 Nov 2004 15:06:46 -0000 1.4 +++ programs/Xserver/hw/xwin/InitInput.c 25 Nov 2004 13:19:42 -0000 @@ -61,6 +61,7 @@ extern int g_fdMessageQueue; #endif extern Bool g_fXdmcpEnabled; +extern DeviceIntPtr g_pKeyboard; #ifdef XWIN_CLIPBOARD extern winDispatchProcPtr winProcEstablishConnectionOrig; extern winDispatchProcPtr winProcQueryTreeOrig; @@ -141,7 +142,7 @@ #endif pMouse = AddInputDevice (winMouseProc, TRUE); - pKeyboard = AddInputDevice (winKeybdProc, TRUE); + g_pKeyboard = pKeyboard = AddInputDevice (winKeybdProc, TRUE); RegisterPointerDevice (pMouse); RegisterKeyboardDevice (pKeyboard); Index: programs/Xserver/hw/xwin/InitOutput.c =================================================================== RCS file: /cvs/xorg/xc/programs/Xserver/hw/xwin/InitOutput.c,v retrieving revision 1.8 diff -u -r1.8 InitOutput.c --- programs/Xserver/hw/xwin/InitOutput.c 22 Nov 2004 14:12:33 -0000 1.8 +++ programs/Xserver/hw/xwin/InitOutput.c 25 Nov 2004 13:19:43 -0000 @@ -32,7 +32,7 @@ #include "winmsg.h" #include "winconfig.h" #include "winprefs.h" -#ifdef XWIN_CLIPBOARD +#if defined(XWIN_CLIPBOARD) || defined(XWIN_MULTIWINDOW) #include "X11/Xlocale.h" #endif #ifdef __CYGWIN__ Index: programs/Xserver/hw/xwin/win.h =================================================================== RCS file: /cvs/xorg/xc/programs/Xserver/hw/xwin/win.h,v retrieving revision 1.8 diff -u -r1.8 win.h --- programs/Xserver/hw/xwin/win.h 15 Nov 2004 15:06:47 -0000 1.8 +++ programs/Xserver/hw/xwin/win.h 25 Nov 2004 13:19:45 -0000 @@ -484,6 +484,8 @@ DWORD dwModeKeyStates; + WindowPtr pFocusedWindow; + /* Handle to icons that must be freed */ HICON hiconNotifyIcon; Index: programs/Xserver/hw/xwin/winglobals.c =================================================================== RCS file: /cvs/xorg/xc/programs/Xserver/hw/xwin/winglobals.c,v retrieving revision 1.5 diff -u -r1.5 winglobals.c --- programs/Xserver/hw/xwin/winglobals.c 22 Nov 2004 14:12:33 -0000 1.5 +++ programs/Xserver/hw/xwin/winglobals.c 25 Nov 2004 13:19:45 -0000 @@ -74,6 +74,7 @@ Bool g_fNoHelpMessageBox = FALSE; Bool g_fSoftwareCursor = FALSE; Bool g_fSilentDupError = FALSE; +DeviceIntPtr g_pKeyboard = NULL; /* Index: programs/Xserver/hw/xwin/winwndproc.c =================================================================== RCS file: /cvs/xorg/xc/programs/Xserver/hw/xwin/winwndproc.c,v retrieving revision 1.8 diff -u -r1.8 winwndproc.c --- programs/Xserver/hw/xwin/winwndproc.c 15 Nov 2004 15:06:48 -0000 1.8 +++ programs/Xserver/hw/xwin/winwndproc.c 25 Nov 2004 13:19:47 -0000 @@ -34,6 +34,7 @@ /* $XFree86: xc/programs/Xserver/hw/xwin/winwndproc.c,v 1.23 2002/10/17 08:18:25 alanh Exp $ */ #include "win.h" +#include "inputstr.h" #include #include "winprefs.h" #include "winconfig.h" @@ -58,6 +59,7 @@ extern HWND g_hwndKeyboardFocus; extern Bool g_fSoftwareCursor; extern DWORD g_dwCurrentThreadID; +extern DeviceIntPtr g_pKeyboard; /* * Called by winWakeupHandler @@ -1165,6 +1167,28 @@ } #endif + if (s_pScreenPriv->fActive) + { + Window focus; + + if (s_pScreenPriv->pFocusedWindow == NoneWin) + focus = None; + else if (s_pScreenPriv->pFocusedWindow == PointerRootWin) + focus = PointerRoot; + else + focus = s_pScreenPriv->pFocusedWindow->drawable.id; + + if (s_pScreenPriv->pFocusedWindow) + SetInputFocus (serverClient, g_pKeyboard, focus, + RevertToPointerRoot, CurrentTime, FALSE); + } + else + { + s_pScreenPriv->pFocusedWindow = g_pKeyboard->focus->win; + SetInputFocus (serverClient, g_pKeyboard, PointerRoot, + RevertToPointerRoot, CurrentTime, FALSE); + } + return 0; case WM_COMMAND: