diff options
author | marha <marha@users.sourceforge.net> | 2012-03-26 14:23:28 +0200 |
---|---|---|
committer | marha <marha@users.sourceforge.net> | 2012-03-26 14:23:28 +0200 |
commit | 76bcc36ed305418a3ddc5752d287ede894243e1b (patch) | |
tree | bacb320c825768471ce56f058f17ce863d592376 /xorg-server/hw/xwin/winwndproc.c | |
parent | 7d894e32566b710952c44cbc71939ad1d9e2fa8d (diff) | |
parent | 0f834b91a4768673833ab4917e87d86c237bb1a6 (diff) | |
download | vcxsrv-76bcc36ed305418a3ddc5752d287ede894243e1b.tar.gz vcxsrv-76bcc36ed305418a3ddc5752d287ede894243e1b.tar.bz2 vcxsrv-76bcc36ed305418a3ddc5752d287ede894243e1b.zip |
Merge remote-tracking branch 'origin/released'
Conflicts:
pixman/pixman/pixman-mmx.c
xorg-server/Xext/shm.c
xorg-server/Xext/syncsrv.h
xorg-server/Xext/xvmain.c
xorg-server/Xi/exevents.c
xorg-server/Xi/opendev.c
xorg-server/composite/compalloc.c
xorg-server/composite/compoverlay.c
xorg-server/dix/colormap.c
xorg-server/dix/devices.c
xorg-server/dix/dispatch.c
xorg-server/dix/dixfonts.c
xorg-server/dix/eventconvert.c
xorg-server/dix/events.c
xorg-server/dix/gc.c
xorg-server/dix/getevents.c
xorg-server/dix/main.c
xorg-server/dix/privates.c
xorg-server/dix/registry.c
xorg-server/dix/resource.c
xorg-server/exa/exa_accel.c
xorg-server/exa/exa_migration_classic.c
xorg-server/exa/exa_unaccel.c
xorg-server/fb/fb.h
xorg-server/fb/fbcopy.c
xorg-server/fb/fbpixmap.c
xorg-server/glx/dispatch.h
xorg-server/glx/glapi.h
xorg-server/glx/glapi_gentable.c
xorg-server/glx/glapitable.h
xorg-server/glx/glprocs.h
xorg-server/glx/glxcmds.c
xorg-server/glx/glxcmdsswap.c
xorg-server/glx/glxdricommon.c
xorg-server/glx/glxdriswrast.c
xorg-server/glx/glxext.c
xorg-server/glx/indirect_dispatch.c
xorg-server/glx/indirect_dispatch.h
xorg-server/glx/indirect_dispatch_swap.c
xorg-server/glx/indirect_size.h
xorg-server/glx/indirect_size_get.h
xorg-server/glx/indirect_table.c
xorg-server/glx/indirect_util.c
xorg-server/glx/rensize.c
xorg-server/glx/single2swap.c
xorg-server/glx/singlepix.c
xorg-server/glx/singlepixswap.c
xorg-server/glx/singlesize.c
xorg-server/hw/dmx/dmxinit.c
xorg-server/hw/kdrive/ephyr/ephyr.c
xorg-server/hw/kdrive/ephyr/hostx.c
xorg-server/hw/kdrive/ephyr/hostx.h
xorg-server/hw/kdrive/src/kinput.c
xorg-server/hw/xfree86/common/compiler.h
xorg-server/hw/xwin/InitInput.c
xorg-server/hw/xwin/InitOutput.c
xorg-server/hw/xwin/ddraw.h
xorg-server/hw/xwin/glx/glwrap.c
xorg-server/hw/xwin/glx/indirect.c
xorg-server/hw/xwin/glx/wgl_ext_api.h
xorg-server/hw/xwin/glx/winpriv.c
xorg-server/hw/xwin/win.h
xorg-server/hw/xwin/winallpriv.c
xorg-server/hw/xwin/winauth.c
xorg-server/hw/xwin/winclipboard.h
xorg-server/hw/xwin/winclipboardinit.c
xorg-server/hw/xwin/winclipboardthread.c
xorg-server/hw/xwin/winclipboardunicode.c
xorg-server/hw/xwin/winclipboardwndproc.c
xorg-server/hw/xwin/winclipboardwrappers.c
xorg-server/hw/xwin/winclipboardxevents.c
xorg-server/hw/xwin/wincmap.c
xorg-server/hw/xwin/winconfig.c
xorg-server/hw/xwin/wincreatewnd.c
xorg-server/hw/xwin/wincursor.c
xorg-server/hw/xwin/windialogs.c
xorg-server/hw/xwin/winengine.c
xorg-server/hw/xwin/winerror.c
xorg-server/hw/xwin/wingc.c
xorg-server/hw/xwin/wingetsp.c
xorg-server/hw/xwin/winkeybd.c
xorg-server/hw/xwin/winkeybd.h
xorg-server/hw/xwin/winlayouts.h
xorg-server/hw/xwin/winmisc.c
xorg-server/hw/xwin/winmonitors.c
xorg-server/hw/xwin/winmouse.c
xorg-server/hw/xwin/winmsg.c
xorg-server/hw/xwin/winmsg.h
xorg-server/hw/xwin/winmultiwindowclass.c
xorg-server/hw/xwin/winmultiwindowicons.c
xorg-server/hw/xwin/winmultiwindowshape.c
xorg-server/hw/xwin/winmultiwindowwindow.c
xorg-server/hw/xwin/winmultiwindowwm.c
xorg-server/hw/xwin/winmultiwindowwndproc.c
xorg-server/hw/xwin/winnativegdi.c
xorg-server/hw/xwin/winpfbdd.c
xorg-server/hw/xwin/winpixmap.c
xorg-server/hw/xwin/winpolyline.c
xorg-server/hw/xwin/winprefs.c
xorg-server/hw/xwin/winprocarg.c
xorg-server/hw/xwin/winregistry.c
xorg-server/hw/xwin/winscrinit.c
xorg-server/hw/xwin/winsetsp.c
xorg-server/hw/xwin/winshaddd.c
xorg-server/hw/xwin/winshadddnl.c
xorg-server/hw/xwin/winshadgdi.c
xorg-server/hw/xwin/wintrayicon.c
xorg-server/hw/xwin/winwin32rootless.c
xorg-server/hw/xwin/winwin32rootlesswindow.c
xorg-server/hw/xwin/winwin32rootlesswndproc.c
xorg-server/hw/xwin/winwindow.c
xorg-server/hw/xwin/winwindow.h
xorg-server/hw/xwin/winwindowswm.c
xorg-server/hw/xwin/winwndproc.c
xorg-server/include/callback.h
xorg-server/include/dixstruct.h
xorg-server/include/misc.h
xorg-server/include/os.h
xorg-server/include/scrnintstr.h
xorg-server/mi/micmap.c
xorg-server/mi/miinitext.c
xorg-server/mi/mioverlay.c
xorg-server/mi/misprite.c
xorg-server/mi/mivaltree.c
xorg-server/mi/miwindow.c
xorg-server/miext/damage/damage.c
xorg-server/miext/rootless/rootlessGC.c
xorg-server/miext/rootless/rootlessWindow.c
xorg-server/os/WaitFor.c
xorg-server/os/access.c
xorg-server/os/connection.c
xorg-server/os/io.c
xorg-server/os/log.c
xorg-server/os/osinit.c
xorg-server/os/utils.c
xorg-server/os/xdmcp.c
xorg-server/os/xprintf.c
xorg-server/os/xstrans.c
xorg-server/render/mipict.c
xorg-server/xkb/xkbActions.c
xorg-server/xkb/xkbInit.c
xorg-server/xkeyboard-config/compat/default.in
Diffstat (limited to 'xorg-server/hw/xwin/winwndproc.c')
-rw-r--r-- | xorg-server/hw/xwin/winwndproc.c | 2055 |
1 files changed, 1003 insertions, 1052 deletions
diff --git a/xorg-server/hw/xwin/winwndproc.c b/xorg-server/hw/xwin/winwndproc.c index 41ce51cec..77a3a76ba 100644 --- a/xorg-server/hw/xwin/winwndproc.c +++ b/xorg-server/hw/xwin/winwndproc.c @@ -53,9 +53,8 @@ */ extern Bool g_fClipboardStarted; -Bool g_fCursor = TRUE; -Bool g_fButton[3] = { FALSE, FALSE, FALSE }; - +Bool g_fCursor = TRUE; +Bool g_fButton[3] = { FALSE, FALSE, FALSE }; /* * Called by winWakeupHandler @@ -63,1254 +62,1206 @@ Bool g_fButton[3] = { FALSE, FALSE, FALSE }; */ LRESULT CALLBACK -winWindowProc (HWND hwnd, UINT message, - WPARAM wParam, LPARAM lParam) +winWindowProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) { - static winPrivScreenPtr s_pScreenPriv = NULL; - static winScreenInfo *s_pScreenInfo = NULL; - static ScreenPtr s_pScreen = NULL; - static HWND s_hwndLastPrivates = NULL; - static HINSTANCE s_hInstance; - static Bool s_fTracking = FALSE; - static unsigned long s_ulServerGeneration = 0; - static UINT s_uTaskbarRestart = 0; - int iScanCode; - int i; - - winDebugWin32Message("winWindowProc", hwnd, message, wParam, lParam); - - /* Watch for server regeneration */ - if (g_ulServerGeneration != s_ulServerGeneration) - { - /* Store new server generation */ - s_ulServerGeneration = g_ulServerGeneration; + static winPrivScreenPtr s_pScreenPriv = NULL; + static winScreenInfo *s_pScreenInfo = NULL; + static ScreenPtr s_pScreen = NULL; + static HWND s_hwndLastPrivates = NULL; + static HINSTANCE s_hInstance; + static Bool s_fTracking = FALSE; + static unsigned long s_ulServerGeneration = 0; + static UINT s_uTaskbarRestart = 0; + int iScanCode; + int i; + + winDebugWin32Message("winWindowProc", hwnd, message, wParam, lParam); + + /* Watch for server regeneration */ + if (g_ulServerGeneration != s_ulServerGeneration) { + /* Store new server generation */ + s_ulServerGeneration = g_ulServerGeneration; } - /* Only retrieve new privates pointers if window handle is null or changed */ - if ((s_pScreenPriv == NULL || hwnd != s_hwndLastPrivates) - && (s_pScreenPriv = GetProp (hwnd, WIN_SCR_PROP)) != NULL) - { - winDebug ("winWindowProc - Setting privates handle\n"); - s_pScreenInfo = s_pScreenPriv->pScreenInfo; - s_pScreen = s_pScreenInfo->pScreen; - s_hwndLastPrivates = hwnd; + /* Only retrieve new privates pointers if window handle is null or changed */ + if ((s_pScreenPriv == NULL || hwnd != s_hwndLastPrivates) + && (s_pScreenPriv = GetProp(hwnd, WIN_SCR_PROP)) != NULL) { + winDebug("winWindowProc - Setting privates handle\n"); + s_pScreenInfo = s_pScreenPriv->pScreenInfo; + s_pScreen = s_pScreenInfo->pScreen; + s_hwndLastPrivates = hwnd; } - else if (s_pScreenPriv == NULL) - { - /* For safety, handle case that should never happen */ - s_pScreenInfo = NULL; - s_pScreen = NULL; - s_hwndLastPrivates = NULL; + else if (s_pScreenPriv == NULL) { + /* For safety, handle case that should never happen */ + s_pScreenInfo = NULL; + s_pScreen = NULL; + s_hwndLastPrivates = NULL; } - /* Branch on message type */ - switch (message) - { + /* Branch on message type */ + switch (message) { case WM_TRAYICON: - return winHandleIconMessage (hwnd, message, wParam, lParam, - s_pScreenPriv); + return winHandleIconMessage(hwnd, message, wParam, lParam, + s_pScreenPriv); case WM_CREATE: - winDebug ("winWindowProc - WM_CREATE\n"); - - /* - * Add a property to our display window that references - * this screens' privates. - * - * This allows the window procedure to refer to the - * appropriate window DC and shadow DC for the window that - * it is processing. We use this to repaint exposed - * areas of our display window. - */ - s_pScreenPriv = ((LPCREATESTRUCT) lParam)->lpCreateParams; - s_hInstance = ((LPCREATESTRUCT) lParam)->hInstance; - s_pScreenInfo = s_pScreenPriv->pScreenInfo; - s_pScreen = s_pScreenInfo->pScreen; - s_hwndLastPrivates = hwnd; - s_uTaskbarRestart = RegisterWindowMessage(TEXT("TaskbarCreated")); - SetProp (hwnd, WIN_SCR_PROP, s_pScreenPriv); - - /* Setup tray icon */ - if (!s_pScreenInfo->fNoTrayIcon) - { - /* - * NOTE: The WM_CREATE message is processed before CreateWindowEx - * returns, so s_pScreenPriv->hwndScreen is invalid at this point. - * We go ahead and copy our hwnd parameter over top of the screen - * privates hwndScreen so that we have a valid value for - * that member. Otherwise, the tray icon will disappear - * the first time you move the mouse over top of it. - */ - - s_pScreenPriv->hwndScreen = hwnd; - - winInitNotifyIcon (s_pScreenPriv,FALSE); - } - return 0; + winDebug("winWindowProc - WM_CREATE\n"); + + /* + * Add a property to our display window that references + * this screens' privates. + * + * This allows the window procedure to refer to the + * appropriate window DC and shadow DC for the window that + * it is processing. We use this to repaint exposed + * areas of our display window. + */ + s_pScreenPriv = ((LPCREATESTRUCT) lParam)->lpCreateParams; + s_hInstance = ((LPCREATESTRUCT) lParam)->hInstance; + s_pScreenInfo = s_pScreenPriv->pScreenInfo; + s_pScreen = s_pScreenInfo->pScreen; + s_hwndLastPrivates = hwnd; + s_uTaskbarRestart = RegisterWindowMessage(TEXT("TaskbarCreated")); + SetProp(hwnd, WIN_SCR_PROP, s_pScreenPriv); + + /* Setup tray icon */ + if (!s_pScreenInfo->fNoTrayIcon) { + /* + * NOTE: The WM_CREATE message is processed before CreateWindowEx + * returns, so s_pScreenPriv->hwndScreen is invalid at this point. + * We go ahead and copy our hwnd parameter over top of the screen + * privates hwndScreen so that we have a valid value for + * that member. Otherwise, the tray icon will disappear + * the first time you move the mouse over top of it. + */ + + s_pScreenPriv->hwndScreen = hwnd; + + winInitNotifyIcon (s_pScreenPriv,FALSE); + } + return 0; case WM_DISPLAYCHANGE: - /* - WM_DISPLAYCHANGE seems to be sent when the monitor layout or - any monitor's resolution or depth changes, but it's lParam and - wParam always indicate the resolution and bpp for the primary - monitor (so ignore that as we could be on any monitor...) - */ - - /* We cannot handle a display mode change during initialization */ - if (s_pScreenInfo == NULL) - FatalError ("winWindowProc - WM_DISPLAYCHANGE - The display " - "mode changed while we were intializing. This is " - "very bad and unexpected. Exiting.\n"); - - /* - * We do not care about display changes with - * fullscreen DirectDraw engines, because those engines set - * their own mode when they become active. - */ - if (s_pScreenInfo->fFullScreen - && (s_pScreenInfo->dwEngine == WIN_SERVER_SHADOW_DD - || s_pScreenInfo->dwEngine == WIN_SERVER_SHADOW_DDNL + /* + WM_DISPLAYCHANGE seems to be sent when the monitor layout or + any monitor's resolution or depth changes, but it's lParam and + wParam always indicate the resolution and bpp for the primary + monitor (so ignore that as we could be on any monitor...) + */ + + /* We cannot handle a display mode change during initialization */ + if (s_pScreenInfo == NULL) + FatalError("winWindowProc - WM_DISPLAYCHANGE - The display " + "mode changed while we were intializing. This is " + "very bad and unexpected. Exiting.\n"); + + /* + * We do not care about display changes with + * fullscreen DirectDraw engines, because those engines set + * their own mode when they become active. + */ + if (s_pScreenInfo->fFullScreen + && (s_pScreenInfo->dwEngine == WIN_SERVER_SHADOW_DD + || s_pScreenInfo->dwEngine == WIN_SERVER_SHADOW_DDNL #ifdef XWIN_PRIMARYFB - || s_pScreenInfo->dwEngine == WIN_SERVER_PRIMARY_DD + || s_pScreenInfo->dwEngine == WIN_SERVER_PRIMARY_DD #endif - )) - { - break; - } + )) { + break; + } - winDebug ("winWindowProc - WM_DISPLAYCHANGE - new width: %d " - "new height: %d new bpp: %d\n", - LOWORD (lParam), HIWORD (lParam), wParam); + winDebug ("winWindowProc - WM_DISPLAYCHANGE - new width: %d " + "new height: %d new bpp: %d\n", + LOWORD(lParam), HIWORD(lParam), wParam); - /* 0 bpp has no defined meaning, ignore this message */ - if (wParam == 0) - break; + /* 0 bpp has no defined meaning, ignore this message */ + if (wParam == 0) + break; - /* - * Check for a disruptive change in depth. - * We can only display a message for a disruptive depth change, - * we cannot do anything to correct the situation. - */ - /* - XXX: maybe we need to check if GetSystemMetrics(SM_SAMEDISPLAYFORMAT) - has changed as well... - */ - if (s_pScreenInfo->dwBPP != GetDeviceCaps (s_pScreenPriv->hdcScreen, BITSPIXEL)) - { - if ((s_pScreenInfo->dwEngine == WIN_SERVER_SHADOW_DD - || s_pScreenInfo->dwEngine == WIN_SERVER_SHADOW_DDNL + /* + * Check for a disruptive change in depth. + * We can only display a message for a disruptive depth change, + * we cannot do anything to correct the situation. + */ + /* + XXX: maybe we need to check if GetSystemMetrics(SM_SAMEDISPLAYFORMAT) + has changed as well... + */ + if (s_pScreenInfo->dwBPP != + GetDeviceCaps(s_pScreenPriv->hdcScreen, BITSPIXEL)) { + if ((s_pScreenInfo->dwEngine == WIN_SERVER_SHADOW_DD || + s_pScreenInfo->dwEngine == WIN_SERVER_SHADOW_DDNL #ifdef XWIN_PRIMARYFB - || s_pScreenInfo->dwEngine == WIN_SERVER_PRIMARY_DD + || s_pScreenInfo->dwEngine == WIN_SERVER_PRIMARY_DD #endif - )) - { - /* Cannot display the visual until the depth is restored */ - winDebug ("winWindowProc - Disruptive change in depth\n"); + )) { + /* Cannot display the visual until the depth is restored */ + winDebug ("winWindowProc - Disruptive change in depth\n"); - /* Display depth change dialog */ - winDisplayDepthChangeDialog (s_pScreenPriv); + /* Display depth change dialog */ + winDisplayDepthChangeDialog(s_pScreenPriv); - /* Flag that we have an invalid screen depth */ - s_pScreenPriv->fBadDepth = TRUE; + /* Flag that we have an invalid screen depth */ + s_pScreenPriv->fBadDepth = TRUE; - /* Minimize the display window */ - ShowWindow (hwnd, SW_MINIMIZE); + /* Minimize the display window */ + ShowWindow(hwnd, SW_MINIMIZE); } - else - { - /* For GDI, performance may suffer until original depth is restored */ - ErrorF ("winWindowProc - Performance may be non-optimal after change in depth\n"); + else { + /* For GDI, performance may suffer until original depth is restored */ + ErrorF + ("winWindowProc - Performance may be non-optimal after change in depth\n"); } } - else - { - /* Flag that we have a valid screen depth */ - s_pScreenPriv->fBadDepth = FALSE; + else { + /* Flag that we have a valid screen depth */ + s_pScreenPriv->fBadDepth = FALSE; } - /* - If we could cheaply check if this WM_DISPLAYCHANGE change - affects the monitor(s) which this X screen is displayed on - then we should do so here. For the moment, assume it does. - (this is probably usually the case so that might be an - overoptimization) - */ - { - /* - In rootless modes which are monitor or virtual desktop size - use RandR to resize the X screen - */ - if ((!s_pScreenInfo->fUserGaveHeightAndWidth) && - (s_pScreenInfo->iResizeMode == resizeWithRandr) && - (FALSE + /* + If we could cheaply check if this WM_DISPLAYCHANGE change + affects the monitor(s) which this X screen is displayed on + then we should do so here. For the moment, assume it does. + (this is probably usually the case so that might be an + overoptimization) + */ + { + /* + In rootless modes which are monitor or virtual desktop size + use RandR to resize the X screen + */ + if ((!s_pScreenInfo->fUserGaveHeightAndWidth) && + (s_pScreenInfo->iResizeMode == resizeWithRandr) && (FALSE #ifdef XWIN_MULTIWINDOWEXTWM - || s_pScreenInfo->fMWExtWM + || + s_pScreenInfo-> + fMWExtWM #endif - || s_pScreenInfo->fRootless + || + s_pScreenInfo-> + fRootless #ifdef XWIN_MULTIWINDOW - || s_pScreenInfo->fMultiWindow + || + s_pScreenInfo-> + fMultiWindow #endif - )) - { - DWORD dwWidth = 0, dwHeight = 0; + )) { + DWORD dwWidth = 0, dwHeight = 0; - if (s_pScreenInfo->fMultipleMonitors) - { - /* resize to new virtual desktop size */ - dwWidth = GetSystemMetrics(SM_CXVIRTUALSCREEN); - dwHeight = GetSystemMetrics(SM_CYVIRTUALSCREEN); + if (s_pScreenInfo->fMultipleMonitors) { + /* resize to new virtual desktop size */ + dwWidth = GetSystemMetrics(SM_CXVIRTUALSCREEN); + dwHeight = GetSystemMetrics(SM_CYVIRTUALSCREEN); } - else - { - /* resize to new size of specified monitor */ - struct GetMonitorInfoData data; - if (QueryMonitor(s_pScreenInfo->iMonitor, &data)) - { - if (data.bMonitorSpecifiedExists == TRUE) - { - dwWidth = data.monitorWidth; - dwHeight = data.monitorHeight; - /* - XXX: monitor may have changed position, - so we might need to update xinerama data - */ + else { + /* resize to new size of specified monitor */ + struct GetMonitorInfoData data; + + if (QueryMonitor(s_pScreenInfo->iMonitor, &data)) { + if (data.bMonitorSpecifiedExists == TRUE) { + dwWidth = data.monitorWidth; + dwHeight = data.monitorHeight; + /* + XXX: monitor may have changed position, + so we might need to update xinerama data + */ } - else - { - ErrorF ("Monitor number %d no longer exists!\n", s_pScreenInfo->iMonitor); + else { + ErrorF("Monitor number %d no longer exists!\n", + s_pScreenInfo->iMonitor); } } } - /* - XXX: probably a small bug here: we don't compute the work area - and allow for task bar - - XXX: generally, we don't allow for the task bar being moved after - the server is started - */ - - /* Set screen size to match new size, if it is different to current */ - if ((s_pScreenInfo->dwWidth != dwWidth) || - (s_pScreenInfo->dwHeight != dwHeight)) + /* + XXX: probably a small bug here: we don't compute the work area + and allow for task bar + + XXX: generally, we don't allow for the task bar being moved after + the server is started + */ + + /* Set screen size to match new size, if it is different to current */ + if ((s_pScreenInfo->dwWidth != dwWidth) || + (s_pScreenInfo->dwHeight != dwHeight)) { + winDoRandRScreenSetSize(s_pScreen, + dwWidth, + dwHeight, + (dwWidth * 25.4) / + monitorResolution, + (dwHeight * 25.4) / + monitorResolution); + } + } + else { + /* + * We can simply recreate the same-sized primary surface when + * the display dimensions change. + */ + + /* + * NOTE: The non-DirectDraw engines set the ReleasePrimarySurface + * and CreatePrimarySurface function pointers to point + * to the no operation function, NoopDDA. This allows us + * to blindly call these functions, even if they are not + * relevant to the current engine (e.g., Shadow GDI). + */ + + winDebug + ("winWindowProc - WM_DISPLAYCHANGE - Releasing and recreating primary surface\n"); + + /* Reallocate the framebuffer used by the drawing engine */ + (*s_pScreenPriv->pwinFreeFB)(s_pScreen); + if (!(*s_pScreenPriv->pwinAllocateFB)(s_pScreen)) { - winDoRandRScreenSetSize(s_pScreen, - dwWidth, - dwHeight, - (dwWidth * 25.4) / monitorResolution, - (dwHeight * 25.4) / monitorResolution); + ErrorF ("winWindowProc - WM_DISPLAYCHANGE - Could not reallocate framebuffer\n"); } - } - else - { - /* - * We can simply recreate the same-sized primary surface when - * the display dimensions change. - */ - - /* - * NOTE: The non-DirectDraw engines set the ReleasePrimarySurface - * and CreatePrimarySurface function pointers to point - * to the no operation function, NoopDDA. This allows us - * to blindly call these functions, even if they are not - * relevant to the current engine (e.g., Shadow GDI). - */ - - winDebug ("winWindowProc - WM_DISPLAYCHANGE - Releasing and recreating primary surface\n"); - - /* Reallocate the framebuffer used by the drawing engine */ - (*s_pScreenPriv->pwinFreeFB)(s_pScreen); - if (!(*s_pScreenPriv->pwinAllocateFB)(s_pScreen)) - { - ErrorF ("winWindowProc - WM_DISPLAYCHANGE - Could not reallocate framebuffer\n"); - } - /* Update the screen pixmap to point to the new framebuffer */ - winUpdateFBPointer(s_pScreen, s_pScreenPriv->pScreenInfo->pfb); - // Restore the ability to update screen, now with new dimensions - SetRootClip(s_pScreen, TRUE); - - // and arrange for it to be repainted - miPaintWindow(s_pScreen->root, &s_pScreen->root->borderClip, PW_BACKGROUND); + /* Update the screen pixmap to point to the new framebuffer */ + winUpdateFBPointer(s_pScreen, s_pScreenPriv->pScreenInfo->pfb); + // Restore the ability to update screen, now with new dimensions + SetRootClip(s_pScreen, TRUE); + + // and arrange for it to be repainted + miPaintWindow(s_pScreen->root, &s_pScreen->root->borderClip, PW_BACKGROUND); } - } + } - break; + break; - case WM_SYSCOMMAND: - if (wParam == SC_MAXIMIZE||wParam == SC_RESTORE) - { - winDebug("Posting WM_EXITSIZEMOVE message since windows does not send it when the maximised/restored button is clicked.\n"); - PostMessage(hwnd, WM_EXITSIZEMOVE, 0, 0); - } - break; + case WM_SYSCOMMAND: + if (wParam == SC_MAXIMIZE||wParam == SC_RESTORE) + { + winDebug("Posting WM_EXITSIZEMOVE message since windows does not send it when the maximised/restored button is clicked.\n"); + PostMessage(hwnd, WM_EXITSIZEMOVE, 0, 0); + } + break; case WM_SIZE: - { - SCROLLINFO si; - RECT rcWindow; - int iWidth, iHeight; + { + SCROLLINFO si; + RECT rcWindow; + int iWidth, iHeight; - winDebug ("winWindowProc - WM_SIZE\n"); + winDebug("winWindowProc - WM_SIZE\n"); - /* Break if we do not allow resizing */ - if ((s_pScreenInfo->iResizeMode == notAllowed) - || !s_pScreenInfo->fDecoration + /* Break if we do not allow resizing */ + if ((s_pScreenInfo->iResizeMode == notAllowed) + || !s_pScreenInfo->fDecoration #ifdef XWIN_MULTIWINDOWEXTWM - || s_pScreenInfo->fMWExtWM + || s_pScreenInfo->fMWExtWM #endif - || s_pScreenInfo->fRootless + || s_pScreenInfo->fRootless #ifdef XWIN_MULTIWINDOW - || s_pScreenInfo->fMultiWindow + || s_pScreenInfo->fMultiWindow #endif - || s_pScreenInfo->fFullScreen) - break; + || s_pScreenInfo->fFullScreen) + break; - /* No need to resize if we get minimized */ - if (wParam == SIZE_MINIMIZED) - return 0; + /* No need to resize if we get minimized */ + if (wParam == SIZE_MINIMIZED) + return 0; winDebug ("winWindowProc - WM_SIZE - new client area w: %d h: %d\n", - LOWORD (lParam), HIWORD (lParam)); + LOWORD(lParam), HIWORD(lParam)); - if (s_pScreenInfo->iResizeMode == resizeWithRandr) - { + if (s_pScreenInfo->iResizeMode == resizeWithRandr) { /* Actual resizing is done on WM_EXITSIZEMOVE */ return 0; - } + } /* Otherwise iResizeMode == resizeWithScrollbars */ - /* - * Get the size of the whole window, including client area, - * scrollbars, and non-client area decorations (caption, borders). - * We do this because we need to check if the client area - * without scrollbars is large enough to display the whole visual. - * The new client area size passed by lParam already subtracts - * the size of the scrollbars if they are currently displayed. - * So checking is LOWORD(lParam) == visual_width and - * HIWORD(lParam) == visual_height will never tell us to hide - * the scrollbars because the client area would always be too small. - * GetClientRect returns the same sizes given by lParam, so we - * cannot use GetClientRect either. - */ - GetWindowRect (hwnd, &rcWindow); - iWidth = rcWindow.right - rcWindow.left; - iHeight = rcWindow.bottom - rcWindow.top; - - /* Subtract the frame size from the window size. */ - iWidth -= 2 * GetSystemMetrics (SM_CXSIZEFRAME); - iHeight -= (2 * GetSystemMetrics (SM_CYSIZEFRAME) - + GetSystemMetrics (SM_CYCAPTION)); - - /* - * Update scrollbar page sizes. - * NOTE: If page size == range, then the scrollbar is - * automatically hidden. - */ - - /* Is the naked client area large enough to show the whole visual? */ - if (iWidth < s_pScreenInfo->dwWidth - || iHeight < s_pScreenInfo->dwHeight) - { - /* Client area too small to display visual, use scrollbars */ - iWidth -= GetSystemMetrics (SM_CXVSCROLL); - iHeight -= GetSystemMetrics (SM_CYHSCROLL); - } - - /* Set the horizontal scrollbar page size */ - si.cbSize = sizeof (si); - si.fMask = SIF_PAGE | SIF_RANGE; - si.nMin = 0; - si.nMax = s_pScreenInfo->dwWidth - 1; - si.nPage = iWidth; - SetScrollInfo (hwnd, SB_HORZ, &si, TRUE); - - /* Set the vertical scrollbar page size */ - si.cbSize = sizeof (si); - si.fMask = SIF_PAGE | SIF_RANGE; - si.nMin = 0; - si.nMax = s_pScreenInfo->dwHeight - 1; - si.nPage = iHeight; - SetScrollInfo (hwnd, SB_VERT, &si, TRUE); - - /* - * NOTE: Scrollbars may have moved if they were at the - * far right/bottom, so we query their current position. - */ - - /* Get the horizontal scrollbar position and set the offset */ - si.cbSize = sizeof (si); - si.fMask = SIF_POS; - GetScrollInfo (hwnd, SB_HORZ, &si); - s_pScreenInfo->dwXOffset = -si.nPos; - - /* Get the vertical scrollbar position and set the offset */ - si.cbSize = sizeof (si); - si.fMask = SIF_POS; - GetScrollInfo (hwnd, SB_VERT, &si); - s_pScreenInfo->dwYOffset = -si.nPos; - } - return 0; + /* + * Get the size of the whole window, including client area, + * scrollbars, and non-client area decorations (caption, borders). + * We do this because we need to check if the client area + * without scrollbars is large enough to display the whole visual. + * The new client area size passed by lParam already subtracts + * the size of the scrollbars if they are currently displayed. + * So checking is LOWORD(lParam) == visual_width and + * HIWORD(lParam) == visual_height will never tell us to hide + * the scrollbars because the client area would always be too small. + * GetClientRect returns the same sizes given by lParam, so we + * cannot use GetClientRect either. + */ + GetWindowRect(hwnd, &rcWindow); + iWidth = rcWindow.right - rcWindow.left; + iHeight = rcWindow.bottom - rcWindow.top; + + /* Subtract the frame size from the window size. */ + iWidth -= 2 * GetSystemMetrics(SM_CXSIZEFRAME); + iHeight -= (2 * GetSystemMetrics(SM_CYSIZEFRAME) + + GetSystemMetrics(SM_CYCAPTION)); + + /* + * Update scrollbar page sizes. + * NOTE: If page size == range, then the scrollbar is + * automatically hidden. + */ + + /* Is the naked client area large enough to show the whole visual? */ + if (iWidth < s_pScreenInfo->dwWidth + || iHeight < s_pScreenInfo->dwHeight) { + /* Client area too small to display visual, use scrollbars */ + iWidth -= GetSystemMetrics(SM_CXVSCROLL); + iHeight -= GetSystemMetrics(SM_CYHSCROLL); + } + + /* Set the horizontal scrollbar page size */ + si.cbSize = sizeof(si); + si.fMask = SIF_PAGE | SIF_RANGE; + si.nMin = 0; + si.nMax = s_pScreenInfo->dwWidth - 1; + si.nPage = iWidth; + SetScrollInfo(hwnd, SB_HORZ, &si, TRUE); + + /* Set the vertical scrollbar page size */ + si.cbSize = sizeof(si); + si.fMask = SIF_PAGE | SIF_RANGE; + si.nMin = 0; + si.nMax = s_pScreenInfo->dwHeight - 1; + si.nPage = iHeight; + SetScrollInfo(hwnd, SB_VERT, &si, TRUE); + + /* + * NOTE: Scrollbars may have moved if they were at the + * far right/bottom, so we query their current position. + */ + + /* Get the horizontal scrollbar position and set the offset */ + si.cbSize = sizeof(si); + si.fMask = SIF_POS; + GetScrollInfo(hwnd, SB_HORZ, &si); + s_pScreenInfo->dwXOffset = -si.nPos; + + /* Get the vertical scrollbar position and set the offset */ + si.cbSize = sizeof(si); + si.fMask = SIF_POS; + GetScrollInfo(hwnd, SB_VERT, &si); + s_pScreenInfo->dwYOffset = -si.nPos; + } + return 0; case WM_ENTERSIZEMOVE: - winDebug("winWindowProc - WM_ENTERSIZEMOVE\n"); - break; + winDebug("winWindowProc - WM_ENTERSIZEMOVE\n"); + break; case WM_EXITSIZEMOVE: - winDebug("winWindowProc - WM_EXITSIZEMOVE\n"); - - if (s_pScreenInfo->iResizeMode == resizeWithRandr) - { - /* Set screen size to match new client area, if it is different to current */ - RECT rcClient; - DWORD dwWidth, dwHeight; - - GetClientRect (hwnd, &rcClient); - dwWidth = rcClient.right - rcClient.left; - dwHeight = rcClient.bottom - rcClient.top; - - if ((s_pScreenInfo->dwWidth != dwWidth) || - (s_pScreenInfo->dwHeight != dwHeight)) - { - /* mm = dots * (25.4 mm / inch) / (dots / inch) */ - winDoRandRScreenSetSize(s_pScreen, - dwWidth, - dwHeight, - (dwWidth * 25.4) / monitorResolution, - (dwHeight * 25.4) / monitorResolution); + winDebug("winWindowProc - WM_EXITSIZEMOVE\n"); + + if (s_pScreenInfo->iResizeMode == resizeWithRandr) { + /* Set screen size to match new client area, if it is different to current */ + RECT rcClient; + DWORD dwWidth, dwHeight; + + GetClientRect(hwnd, &rcClient); + dwWidth = rcClient.right - rcClient.left; + dwHeight = rcClient.bottom - rcClient.top; + + if ((s_pScreenInfo->dwWidth != dwWidth) || + (s_pScreenInfo->dwHeight != dwHeight)) { + /* mm = dots * (25.4 mm / inch) / (dots / inch) */ + winDoRandRScreenSetSize(s_pScreen, + dwWidth, + dwHeight, + (dwWidth * 25.4) / monitorResolution, + (dwHeight * 25.4) / monitorResolution); } } - break; + break; case WM_VSCROLL: - { - SCROLLINFO si; - int iVertPos; + { + SCROLLINFO si; + int iVertPos; + + winDebug("winWindowProc - WM_VSCROLL\n"); + + /* Get vertical scroll bar info */ + si.cbSize = sizeof(si); + si.fMask = SIF_ALL; + GetScrollInfo(hwnd, SB_VERT, &si); + + /* Save the vertical position for comparison later */ + iVertPos = si.nPos; + + /* + * Don't forget: + * moving the scrollbar to the DOWN, scroll the content UP + */ + switch (LOWORD(wParam)) { + case SB_TOP: + si.nPos = si.nMin; + break; - winDebug ("winWindowProc - WM_VSCROLL\n"); - - /* Get vertical scroll bar info */ - si.cbSize = sizeof (si); - si.fMask = SIF_ALL; - GetScrollInfo (hwnd, SB_VERT, &si); - - /* Save the vertical position for comparison later */ - iVertPos = si.nPos; - - /* - * Don't forget: - * moving the scrollbar to the DOWN, scroll the content UP - */ - switch (LOWORD(wParam)) - { - case SB_TOP: - si.nPos = si.nMin; - break; - - case SB_BOTTOM: - si.nPos = si.nMax - si.nPage + 1; - break; - - case SB_LINEUP: - si.nPos -= 1; - break; - - case SB_LINEDOWN: - si.nPos += 1; - break; - - case SB_PAGEUP: - si.nPos -= si.nPage; - break; - - case SB_PAGEDOWN: - si.nPos += si.nPage; - break; - - case SB_THUMBTRACK: - si.nPos = si.nTrackPos; - break; - - default: - break; - } - - /* - * We retrieve the position after setting it, - * because Windows may adjust it. - */ - si.fMask = SIF_POS; - SetScrollInfo (hwnd, SB_VERT, &si, TRUE); - GetScrollInfo (hwnd, SB_VERT, &si); - - /* Scroll the window if the position has changed */ - if (si.nPos != iVertPos) - { - /* Save the new offset for bit block transfers, etc. */ - s_pScreenInfo->dwYOffset = -si.nPos; - - /* Change displayed region in the window */ - ScrollWindowEx (hwnd, - 0, - iVertPos - si.nPos, - NULL, - NULL, - NULL, - NULL, - SW_INVALIDATE); - - /* Redraw the window contents */ - UpdateWindow (hwnd); - } - } - return 0; + case SB_BOTTOM: + si.nPos = si.nMax - si.nPage + 1; + break; + + case SB_LINEUP: + si.nPos -= 1; + break; + + case SB_LINEDOWN: + si.nPos += 1; + break; + + case SB_PAGEUP: + si.nPos -= si.nPage; + break; + + case SB_PAGEDOWN: + si.nPos += si.nPage; + break; + + case SB_THUMBTRACK: + si.nPos = si.nTrackPos; + break; + + default: + break; + } + + /* + * We retrieve the position after setting it, + * because Windows may adjust it. + */ + si.fMask = SIF_POS; + SetScrollInfo(hwnd, SB_VERT, &si, TRUE); + GetScrollInfo(hwnd, SB_VERT, &si); + + /* Scroll the window if the position has changed */ + if (si.nPos != iVertPos) { + /* Save the new offset for bit block transfers, etc. */ + s_pScreenInfo->dwYOffset = -si.nPos; + + /* Change displayed region in the window */ + ScrollWindowEx(hwnd, + 0, + iVertPos - si.nPos, + NULL, NULL, NULL, NULL, SW_INVALIDATE); + + /* Redraw the window contents */ + UpdateWindow(hwnd); + } + } + return 0; case WM_HSCROLL: - { - SCROLLINFO si; - int iHorzPos; + { + SCROLLINFO si; + int iHorzPos; + + winDebug("winWindowProc - WM_HSCROLL\n"); + + /* Get horizontal scroll bar info */ + si.cbSize = sizeof(si); + si.fMask = SIF_ALL; + GetScrollInfo(hwnd, SB_HORZ, &si); + + /* Save the horizontal position for comparison later */ + iHorzPos = si.nPos; + + /* + * Don't forget: + * moving the scrollbar to the RIGHT, scroll the content LEFT + */ + switch (LOWORD(wParam)) { + case SB_LEFT: + si.nPos = si.nMin; + break; - winDebug ("winWindowProc - WM_HSCROLL\n"); - - /* Get horizontal scroll bar info */ - si.cbSize = sizeof (si); - si.fMask = SIF_ALL; - GetScrollInfo (hwnd, SB_HORZ, &si); - - /* Save the horizontal position for comparison later */ - iHorzPos = si.nPos; - - /* - * Don't forget: - * moving the scrollbar to the RIGHT, scroll the content LEFT - */ - switch (LOWORD(wParam)) - { - case SB_LEFT: - si.nPos = si.nMin; - break; - - case SB_RIGHT: - si.nPos = si.nMax - si.nPage + 1; - break; - - case SB_LINELEFT: - si.nPos -= 1; - break; - - case SB_LINERIGHT: - si.nPos += 1; - break; - - case SB_PAGELEFT: - si.nPos -= si.nPage; - break; - - case SB_PAGERIGHT: - si.nPos += si.nPage; - break; - - case SB_THUMBTRACK: - si.nPos = si.nTrackPos; - break; - - default: - break; - } - - /* - * We retrieve the position after setting it, - * because Windows may adjust it. - */ - si.fMask = SIF_POS; - SetScrollInfo (hwnd, SB_HORZ, &si, TRUE); - GetScrollInfo (hwnd, SB_HORZ, &si); - - /* Scroll the window if the position has changed */ - if (si.nPos != iHorzPos) - { - /* Save the new offset for bit block transfers, etc. */ - s_pScreenInfo->dwXOffset = -si.nPos; - - /* Change displayed region in the window */ - ScrollWindowEx (hwnd, - iHorzPos - si.nPos, - 0, - NULL, - NULL, - NULL, - NULL, - SW_INVALIDATE); - - /* Redraw the window contents */ - UpdateWindow (hwnd); - } - } - return 0; + case SB_RIGHT: + si.nPos = si.nMax - si.nPage + 1; + break; + + case SB_LINELEFT: + si.nPos -= 1; + break; + + case SB_LINERIGHT: + si.nPos += 1; + break; + + case SB_PAGELEFT: + si.nPos -= si.nPage; + break; + + case SB_PAGERIGHT: + si.nPos += si.nPage; + break; + + case SB_THUMBTRACK: + si.nPos = si.nTrackPos; + break; + + default: + break; + } + + /* + * We retrieve the position after setting it, + * because Windows may adjust it. + */ + si.fMask = SIF_POS; + SetScrollInfo(hwnd, SB_HORZ, &si, TRUE); + GetScrollInfo(hwnd, SB_HORZ, &si); + + /* Scroll the window if the position has changed */ + if (si.nPos != iHorzPos) { + /* Save the new offset for bit block transfers, etc. */ + s_pScreenInfo->dwXOffset = -si.nPos; + + /* Change displayed region in the window */ + ScrollWindowEx(hwnd, + iHorzPos - si.nPos, + 0, NULL, NULL, NULL, NULL, SW_INVALIDATE); + + /* Redraw the window contents */ + UpdateWindow(hwnd); + } + } + return 0; case WM_GETMINMAXINFO: - { - MINMAXINFO *pMinMaxInfo = (MINMAXINFO *) lParam; - int iCaptionHeight; - int iBorderHeight, iBorderWidth; - - winDebug ("winWindowProc - WM_GETMINMAXINFO - pScreenInfo: %08x\n", - s_pScreenInfo); - - /* Can't do anything without screen info */ - if (s_pScreenInfo == NULL - || (s_pScreenInfo->iResizeMode != resizeWithScrollbars) - || s_pScreenInfo->fFullScreen - || !s_pScreenInfo->fDecoration + { + MINMAXINFO *pMinMaxInfo = (MINMAXINFO *) lParam; + int iCaptionHeight; + int iBorderHeight, iBorderWidth; + + winDebug("winWindowProc - WM_GETMINMAXINFO - pScreenInfo: %08x\n", + s_pScreenInfo); + + /* Can't do anything without screen info */ + if (s_pScreenInfo == NULL + || (s_pScreenInfo->iResizeMode != resizeWithScrollbars) + || s_pScreenInfo->fFullScreen || !s_pScreenInfo->fDecoration #ifdef XWIN_MULTIWINDOWEXTWM - || s_pScreenInfo->fMWExtWM + || s_pScreenInfo->fMWExtWM #endif - || s_pScreenInfo->fRootless + || s_pScreenInfo->fRootless #ifdef XWIN_MULTIWINDOW - || s_pScreenInfo->fMultiWindow + || s_pScreenInfo->fMultiWindow #endif - ) - break; - - /* - * Here we can override the maximum tracking size, which - * is the largest size that can be assigned to our window - * via the sizing border. - */ - - /* - * FIXME: Do we only need to do this once, since our visual size - * does not change? Does Windows store this value statically - * once we have set it once? - */ - - /* Get the border and caption sizes */ - iCaptionHeight = GetSystemMetrics (SM_CYCAPTION); - iBorderWidth = 2 * GetSystemMetrics (SM_CXSIZEFRAME); - iBorderHeight = 2 * GetSystemMetrics (SM_CYSIZEFRAME); - - /* Allow the full visual to be displayed */ - pMinMaxInfo->ptMaxTrackSize.x - = s_pScreenInfo->dwWidth + iBorderWidth; - pMinMaxInfo->ptMaxTrackSize.y - = s_pScreenInfo->dwHeight + iBorderHeight + iCaptionHeight; - } - return 0; + ) + break; + + /* + * Here we can override the maximum tracking size, which + * is the largest size that can be assigned to our window + * via the sizing border. + */ + + /* + * FIXME: Do we only need to do this once, since our visual size + * does not change? Does Windows store this value statically + * once we have set it once? + */ + + /* Get the border and caption sizes */ + iCaptionHeight = GetSystemMetrics(SM_CYCAPTION); + iBorderWidth = 2 * GetSystemMetrics(SM_CXSIZEFRAME); + iBorderHeight = 2 * GetSystemMetrics(SM_CYSIZEFRAME); + + /* Allow the full visual to be displayed */ + pMinMaxInfo->ptMaxTrackSize.x = s_pScreenInfo->dwWidth + iBorderWidth; + pMinMaxInfo->ptMaxTrackSize.y + = s_pScreenInfo->dwHeight + iBorderHeight + iCaptionHeight; + } + return 0; case WM_ERASEBKGND: - winDebug ("winWindowProc - WM_ERASEBKGND\n"); - /* - * Pretend that we did erase the background but we don't care, - * the application uses the full window estate. This avoids some - * flickering when resizing. - */ - return TRUE; + winDebug("winWindowProc - WM_ERASEBKGND\n"); + /* + * Pretend that we did erase the background but we don't care, + * the application uses the full window estate. This avoids some + * flickering when resizing. + */ + return TRUE; case WM_PAINT: - /* Only paint if we have privates and the server is enabled */ - if (s_pScreenPriv == NULL - || !s_pScreenPriv->fEnabled - || (s_pScreenInfo->fFullScreen && !s_pScreenPriv->fActive) - || s_pScreenPriv->fBadDepth) - { - /* We don't want to paint */ - break; - } - - /* Break out here if we don't have a valid paint routine */ - if (s_pScreenPriv->pwinBltExposedRegions == NULL) - break; - - /* Call the engine dependent repainter */ - (*s_pScreenPriv->pwinBltExposedRegions) (s_pScreen); - return 0; + /* Only paint if we have privates and the server is enabled */ + if (s_pScreenPriv == NULL + || !s_pScreenPriv->fEnabled + || (s_pScreenInfo->fFullScreen && !s_pScreenPriv->fActive) + || s_pScreenPriv->fBadDepth) { + /* We don't want to paint */ + break; + } + + /* Break out here if we don't have a valid paint routine */ + if (s_pScreenPriv->pwinBltExposedRegions == NULL) + break; + + /* Call the engine dependent repainter */ + (*s_pScreenPriv->pwinBltExposedRegions) (s_pScreen); + return 0; case WM_PALETTECHANGED: - { - winDebug ("winWindowProc - WM_PALETTECHANGED\n"); - /* - * Don't process if we don't have privates or a colormap, - * or if we have an invalid depth. - */ - if (s_pScreenPriv == NULL - || s_pScreenPriv->pcmapInstalled == NULL - || s_pScreenPriv->fBadDepth) - break; - - /* Return if we caused the palette to change */ - if ((HWND) wParam == hwnd) - { - /* Redraw the screen */ - (*s_pScreenPriv->pwinRedrawScreen) (s_pScreen); - return 0; - } - - /* Reinstall the windows palette */ - (*s_pScreenPriv->pwinRealizeInstalledPalette) (s_pScreen); - - /* Redraw the screen */ - (*s_pScreenPriv->pwinRedrawScreen) (s_pScreen); - return 0; - } + { + winDebug("winWindowProc - WM_PALETTECHANGED\n"); + /* + * Don't process if we don't have privates or a colormap, + * or if we have an invalid depth. + */ + if (s_pScreenPriv == NULL + || s_pScreenPriv->pcmapInstalled == NULL + || s_pScreenPriv->fBadDepth) + break; + + /* Return if we caused the palette to change */ + if ((HWND) wParam == hwnd) { + /* Redraw the screen */ + (*s_pScreenPriv->pwinRedrawScreen) (s_pScreen); + return 0; + } + + /* Reinstall the windows palette */ + (*s_pScreenPriv->pwinRealizeInstalledPalette) (s_pScreen); + + /* Redraw the screen */ + (*s_pScreenPriv->pwinRedrawScreen) (s_pScreen); + return 0; + } case WM_MOUSEMOVE: - /* We can't do anything without privates */ - if (s_pScreenPriv == NULL || s_pScreenInfo->fIgnoreInput) - break; + /* We can't do anything without privates */ + if (s_pScreenPriv == NULL || s_pScreenInfo->fIgnoreInput) + break; - /* We can't do anything without g_pwinPointer */ - if (g_pwinPointer == NULL) - break; + /* We can't do anything without g_pwinPointer */ + if (g_pwinPointer == NULL) + break; - /* Has the mouse pointer crossed screens? */ - if (s_pScreen != miPointerGetScreen(g_pwinPointer)) - miPointerSetScreen (g_pwinPointer, s_pScreenInfo->dwScreen, - GET_X_LPARAM(lParam)-s_pScreenInfo->dwXOffset, - GET_Y_LPARAM(lParam)-s_pScreenInfo->dwYOffset); - - /* Are we tracking yet? */ - if (!s_fTracking) - { - TRACKMOUSEEVENT tme; - - /* Setup data structure */ - ZeroMemory (&tme, sizeof (tme)); - tme.cbSize = sizeof (tme); - tme.dwFlags = TME_LEAVE; - tme.hwndTrack = hwnd; - - /* Call the tracking function */ - if (!TrackMouseEvent(&tme)) - ErrorF ("winWindowProc - TrackMouseEvent failed\n"); - - /* Flag that we are tracking now */ - s_fTracking = TRUE; - } - - /* Hide or show the Windows mouse cursor */ - if (g_fSoftwareCursor && g_fCursor && (s_pScreenPriv->fActive || s_pScreenInfo->fLessPointer)) - { - /* Hide Windows cursor */ - g_fCursor = FALSE; - ShowCursor (FALSE); - } - else if (g_fSoftwareCursor && !g_fCursor && !s_pScreenPriv->fActive - && !s_pScreenInfo->fLessPointer) - { - /* Show Windows cursor */ - g_fCursor = TRUE; - ShowCursor (TRUE); - } - - /* Deliver absolute cursor position to X Server */ - winEnqueueMotion(GET_X_LPARAM(lParam)-s_pScreenInfo->dwXOffset, - GET_Y_LPARAM(lParam)-s_pScreenInfo->dwYOffset); - return 0; + /* Has the mouse pointer crossed screens? */ + if (s_pScreen != miPointerGetScreen(g_pwinPointer)) + miPointerSetScreen(g_pwinPointer, s_pScreenInfo->dwScreen, + GET_X_LPARAM(lParam) - s_pScreenInfo->dwXOffset, + GET_Y_LPARAM(lParam) - s_pScreenInfo->dwYOffset); + + /* Are we tracking yet? */ + if (!s_fTracking) { + TRACKMOUSEEVENT tme; + + /* Setup data structure */ + ZeroMemory(&tme, sizeof(tme)); + tme.cbSize = sizeof(tme); + tme.dwFlags = TME_LEAVE; + tme.hwndTrack = hwnd; + + /* Call the tracking function */ + if (!TrackMouseEvent(&tme)) + ErrorF("winWindowProc - TrackMouseEvent failed\n"); + + /* Flag that we are tracking now */ + s_fTracking = TRUE; + } + + /* Hide or show the Windows mouse cursor */ + if (g_fSoftwareCursor && g_fCursor && + (s_pScreenPriv->fActive || s_pScreenInfo->fLessPointer)) { + /* Hide Windows cursor */ + g_fCursor = FALSE; + ShowCursor(FALSE); + } + else if (g_fSoftwareCursor && !g_fCursor && !s_pScreenPriv->fActive + && !s_pScreenInfo->fLessPointer) { + /* Show Windows cursor */ + g_fCursor = TRUE; + ShowCursor(TRUE); + } + + /* Deliver absolute cursor position to X Server */ + winEnqueueMotion(GET_X_LPARAM(lParam) - s_pScreenInfo->dwXOffset, + GET_Y_LPARAM(lParam) - s_pScreenInfo->dwYOffset); + return 0; case WM_NCMOUSEMOVE: - /* - * We break instead of returning 0 since we need to call - * DefWindowProc to get the mouse cursor changes - * and min/max/close button highlighting in Windows XP. - * The Platform SDK says that you should return 0 if you - * process this message, but it fails to mention that you - * will give up any default functionality if you do return 0. - */ - - /* We can't do anything without privates */ - if (s_pScreenPriv == NULL || s_pScreenInfo->fIgnoreInput) - break; - - /* Non-client mouse movement, show Windows cursor */ - if (g_fSoftwareCursor && !g_fCursor) - { - g_fCursor = TRUE; - ShowCursor (TRUE); - } - break; + /* + * We break instead of returning 0 since we need to call + * DefWindowProc to get the mouse cursor changes + * and min/max/close button highlighting in Windows XP. + * The Platform SDK says that you should return 0 if you + * process this message, but it fails to mention that you + * will give up any default functionality if you do return 0. + */ + + /* We can't do anything without privates */ + if (s_pScreenPriv == NULL || s_pScreenInfo->fIgnoreInput) + break; + + /* Non-client mouse movement, show Windows cursor */ + if (g_fSoftwareCursor && !g_fCursor) { + g_fCursor = TRUE; + ShowCursor(TRUE); + } + break; case WM_MOUSELEAVE: - /* Mouse has left our client area */ + /* Mouse has left our client area */ - /* Flag that we are no longer tracking */ - s_fTracking = FALSE; + /* Flag that we are no longer tracking */ + s_fTracking = FALSE; - /* Show the mouse cursor, if necessary */ - if (g_fSoftwareCursor && !g_fCursor) - { - g_fCursor = TRUE; - ShowCursor (TRUE); - } - return 0; + /* Show the mouse cursor, if necessary */ + if (g_fSoftwareCursor && !g_fCursor) { + g_fCursor = TRUE; + ShowCursor(TRUE); + } + return 0; case WM_LBUTTONDBLCLK: case WM_LBUTTONDOWN: - if (s_pScreenPriv == NULL || s_pScreenInfo->fIgnoreInput) - break; - if (s_pScreenInfo->fRootless + if (s_pScreenPriv == NULL || s_pScreenInfo->fIgnoreInput) + break; + if (s_pScreenInfo->fRootless #ifdef XWIN_MULTIWINDOWEXTWM - || s_pScreenInfo->fMWExtWM + || s_pScreenInfo->fMWExtWM #endif - ) - SetCapture (hwnd); - return winMouseButtonsHandle (s_pScreen, ButtonPress, Button1, wParam); - + ) + SetCapture(hwnd); + return winMouseButtonsHandle(s_pScreen, ButtonPress, Button1, wParam); + case WM_LBUTTONUP: - if (s_pScreenPriv == NULL || s_pScreenInfo->fIgnoreInput) - break; - if (s_pScreenInfo->fRootless + if (s_pScreenPriv == NULL || s_pScreenInfo->fIgnoreInput) + break; + if (s_pScreenInfo->fRootless #ifdef XWIN_MULTIWINDOWEXTWM - || s_pScreenInfo->fMWExtWM + || s_pScreenInfo->fMWExtWM #endif - ) - ReleaseCapture (); - return winMouseButtonsHandle (s_pScreen, ButtonRelease, Button1, wParam); + ) + ReleaseCapture(); + return winMouseButtonsHandle(s_pScreen, ButtonRelease, Button1, wParam); case WM_MBUTTONDBLCLK: case WM_MBUTTONDOWN: - if (s_pScreenPriv == NULL || s_pScreenInfo->fIgnoreInput) - break; - if (s_pScreenInfo->fRootless + if (s_pScreenPriv == NULL || s_pScreenInfo->fIgnoreInput) + break; + if (s_pScreenInfo->fRootless #ifdef XWIN_MULTIWINDOWEXTWM - || s_pScreenInfo->fMWExtWM + || s_pScreenInfo->fMWExtWM #endif - ) - SetCapture (hwnd); - return winMouseButtonsHandle (s_pScreen, ButtonPress, Button2, wParam); - + ) + SetCapture(hwnd); + return winMouseButtonsHandle(s_pScreen, ButtonPress, Button2, wParam); + case WM_MBUTTONUP: - if (s_pScreenPriv == NULL || s_pScreenInfo->fIgnoreInput) - break; - if (s_pScreenInfo->fRootless + if (s_pScreenPriv == NULL || s_pScreenInfo->fIgnoreInput) + break; + if (s_pScreenInfo->fRootless #ifdef XWIN_MULTIWINDOWEXTWM - || s_pScreenInfo->fMWExtWM + || s_pScreenInfo->fMWExtWM #endif - ) - ReleaseCapture (); - return winMouseButtonsHandle (s_pScreen, ButtonRelease, Button2, wParam); - + ) + ReleaseCapture(); + return winMouseButtonsHandle(s_pScreen, ButtonRelease, Button2, wParam); + case WM_RBUTTONDBLCLK: case WM_RBUTTONDOWN: - if (s_pScreenPriv == NULL || s_pScreenInfo->fIgnoreInput) - break; - if (s_pScreenInfo->fRootless + if (s_pScreenPriv == NULL || s_pScreenInfo->fIgnoreInput) + break; + if (s_pScreenInfo->fRootless #ifdef XWIN_MULTIWINDOWEXTWM - || s_pScreenInfo->fMWExtWM + || s_pScreenInfo->fMWExtWM #endif - ) - SetCapture (hwnd); - return winMouseButtonsHandle (s_pScreen, ButtonPress, Button3, wParam); - + ) + SetCapture(hwnd); + return winMouseButtonsHandle(s_pScreen, ButtonPress, Button3, wParam); + case WM_RBUTTONUP: - if (s_pScreenPriv == NULL || s_pScreenInfo->fIgnoreInput) - break; - if (s_pScreenInfo->fRootless + if (s_pScreenPriv == NULL || s_pScreenInfo->fIgnoreInput) + break; + if (s_pScreenInfo->fRootless #ifdef XWIN_MULTIWINDOWEXTWM - || s_pScreenInfo->fMWExtWM + || s_pScreenInfo->fMWExtWM #endif - ) - ReleaseCapture (); - return winMouseButtonsHandle (s_pScreen, ButtonRelease, Button3, wParam); + ) + ReleaseCapture(); + return winMouseButtonsHandle(s_pScreen, ButtonRelease, Button3, wParam); case WM_XBUTTONDBLCLK: case WM_XBUTTONDOWN: - if (s_pScreenPriv == NULL || s_pScreenInfo->fIgnoreInput) - break; - if (s_pScreenInfo->fRootless + if (s_pScreenPriv == NULL || s_pScreenInfo->fIgnoreInput) + break; + if (s_pScreenInfo->fRootless #ifdef XWIN_MULTIWINDOWEXTWM - || s_pScreenInfo->fMWExtWM + || s_pScreenInfo->fMWExtWM #endif - ) - SetCapture (hwnd); - return winMouseButtonsHandle (s_pScreen, ButtonPress, HIWORD(wParam) + 5, wParam); + ) + SetCapture(hwnd); + return winMouseButtonsHandle(s_pScreen, ButtonPress, HIWORD(wParam) + 5, + wParam); case WM_XBUTTONUP: - if (s_pScreenPriv == NULL || s_pScreenInfo->fIgnoreInput) - break; - if (s_pScreenInfo->fRootless + if (s_pScreenPriv == NULL || s_pScreenInfo->fIgnoreInput) + break; + if (s_pScreenInfo->fRootless #ifdef XWIN_MULTIWINDOWEXTWM - || s_pScreenInfo->fMWExtWM + || s_pScreenInfo->fMWExtWM #endif - ) - ReleaseCapture (); - return winMouseButtonsHandle (s_pScreen, ButtonRelease, HIWORD(wParam) + 5, wParam); + ) + ReleaseCapture(); + return winMouseButtonsHandle(s_pScreen, ButtonRelease, + HIWORD(wParam) + 5, wParam); case WM_TIMER: - if (s_pScreenPriv == NULL || s_pScreenInfo->fIgnoreInput) - break; - - /* Branch on the timer id */ - switch (wParam) - { - case WIN_E3B_TIMER_ID: - /* Send delayed button press */ - winMouseButtonsSendEvent (ButtonPress, - s_pScreenPriv->iE3BCachedPress); - - /* Kill this timer */ - KillTimer (s_pScreenPriv->hwndScreen, WIN_E3B_TIMER_ID); - - /* Clear screen privates flags */ - s_pScreenPriv->iE3BCachedPress = 0; - break; - - case WIN_POLLING_MOUSE_TIMER_ID: - { - POINT point; - WPARAM wL, wM, wR, wShift, wCtrl; - LPARAM lPos; - - /* Get the current position of the mouse cursor */ - GetCursorPos (&point); - - /* Map from screen (-X, -Y) to root (0, 0) */ - point.x -= GetSystemMetrics (SM_XVIRTUALSCREEN); - point.y -= GetSystemMetrics (SM_YVIRTUALSCREEN); - - /* Deliver absolute cursor position to X Server */ - winEnqueueMotion(point.x , point.y); - - /* Check if a button was released but we didn't see it */ - GetCursorPos (&point); - wL = (GetKeyState (VK_LBUTTON) & 0x8000)?MK_LBUTTON:0; - wM = (GetKeyState (VK_MBUTTON) & 0x8000)?MK_MBUTTON:0; - wR = (GetKeyState (VK_RBUTTON) & 0x8000)?MK_RBUTTON:0; - wShift = (GetKeyState (VK_SHIFT) & 0x8000)?MK_SHIFT:0; - wCtrl = (GetKeyState (VK_CONTROL) & 0x8000)?MK_CONTROL:0; - lPos = MAKELPARAM(point.x, point.y); - if (g_fButton[0] && !wL) - PostMessage (hwnd, WM_LBUTTONUP, wCtrl|wM|wR|wShift, lPos); - if (g_fButton[1] && !wM) - PostMessage (hwnd, WM_MBUTTONUP, wCtrl|wL|wR|wShift, lPos); - if (g_fButton[2] && !wR) - PostMessage (hwnd, WM_RBUTTONUP, wCtrl|wL|wM|wShift, lPos); - } - } - return 0; + if (s_pScreenPriv == NULL || s_pScreenInfo->fIgnoreInput) + break; + + /* Branch on the timer id */ + switch (wParam) { + case WIN_E3B_TIMER_ID: + /* Send delayed button press */ + winMouseButtonsSendEvent(ButtonPress, + s_pScreenPriv->iE3BCachedPress); + + /* Kill this timer */ + KillTimer(s_pScreenPriv->hwndScreen, WIN_E3B_TIMER_ID); + + /* Clear screen privates flags */ + s_pScreenPriv->iE3BCachedPress = 0; + break; + + case WIN_POLLING_MOUSE_TIMER_ID: + { + POINT point; + WPARAM wL, wM, wR, wShift, wCtrl; + LPARAM lPos; + + /* Get the current position of the mouse cursor */ + GetCursorPos(&point); + + /* Map from screen (-X, -Y) to root (0, 0) */ + point.x -= GetSystemMetrics(SM_XVIRTUALSCREEN); + point.y -= GetSystemMetrics(SM_YVIRTUALSCREEN); + + /* Deliver absolute cursor position to X Server */ + winEnqueueMotion(point.x, point.y); + + /* Check if a button was released but we didn't see it */ + GetCursorPos(&point); + wL = (GetKeyState(VK_LBUTTON) & 0x8000) ? MK_LBUTTON : 0; + wM = (GetKeyState(VK_MBUTTON) & 0x8000) ? MK_MBUTTON : 0; + wR = (GetKeyState(VK_RBUTTON) & 0x8000) ? MK_RBUTTON : 0; + wShift = (GetKeyState(VK_SHIFT) & 0x8000) ? MK_SHIFT : 0; + wCtrl = (GetKeyState(VK_CONTROL) & 0x8000) ? MK_CONTROL : 0; + lPos = MAKELPARAM(point.x, point.y); + if (g_fButton[0] && !wL) + PostMessage(hwnd, WM_LBUTTONUP, wCtrl | wM | wR | wShift, lPos); + if (g_fButton[1] && !wM) + PostMessage(hwnd, WM_MBUTTONUP, wCtrl | wL | wR | wShift, lPos); + if (g_fButton[2] && !wR) + PostMessage(hwnd, WM_RBUTTONUP, wCtrl | wL | wM | wShift, lPos); + } + } + return 0; case WM_CTLCOLORSCROLLBAR: - FatalError ("winWindowProc - WM_CTLCOLORSCROLLBAR - We are not " - "supposed to get this message. Exiting.\n"); - return 0; + FatalError("winWindowProc - WM_CTLCOLORSCROLLBAR - We are not " + "supposed to get this message. Exiting.\n"); + return 0; case WM_MOUSEWHEEL: - if (s_pScreenPriv == NULL || s_pScreenInfo->fIgnoreInput) - break; - winDebug ("winWindowProc - WM_MOUSEWHEEL\n"); - winMouseWheel (s_pScreen, GET_WHEEL_DELTA_WPARAM(wParam)); - break; + if (s_pScreenPriv == NULL || s_pScreenInfo->fIgnoreInput) + break; + winDebug("winWindowProc - WM_MOUSEWHEEL\n"); + winMouseWheel(s_pScreen, GET_WHEEL_DELTA_WPARAM(wParam)); + break; case WM_SETFOCUS: - if (s_pScreenPriv == NULL || s_pScreenInfo->fIgnoreInput) - break; + if (s_pScreenPriv == NULL || s_pScreenInfo->fIgnoreInput) + break; - /* Restore the state of all mode keys */ - winRestoreModeKeyStates (); + /* Restore the state of all mode keys */ + winRestoreModeKeyStates(); - /* Add the keyboard hook if possible */ - if (g_fKeyboardHookLL) - g_fKeyboardHookLL = winInstallKeyboardHookLL (); - return 0; + /* Add the keyboard hook if possible */ + if (g_fKeyboardHookLL) + g_fKeyboardHookLL = winInstallKeyboardHookLL(); + return 0; case WM_KILLFOCUS: - if (s_pScreenPriv == NULL || s_pScreenInfo->fIgnoreInput) - break; + if (s_pScreenPriv == NULL || s_pScreenInfo->fIgnoreInput) + break; - /* Release any pressed keys */ - winKeybdReleaseKeys (); + /* Release any pressed keys */ + winKeybdReleaseKeys(); - /* Remove our keyboard hook if it is installed */ - winRemoveKeyboardHookLL (); - return 0; + /* Remove our keyboard hook if it is installed */ + winRemoveKeyboardHookLL(); + return 0; case WM_SYSKEYDOWN: case WM_KEYDOWN: - if (s_pScreenPriv == NULL || s_pScreenInfo->fIgnoreInput) - break; - - /* - * FIXME: Catching Alt-F4 like this is really terrible. This should - * be generalized to handle other Windows keyboard signals. Actually, - * the list keys to catch and the actions to perform when caught should - * be configurable; that way user's can customize the keys that they - * need to have passed through to their window manager or apps, or they - * can remap certain actions to new key codes that do not conflict - * with the X apps that they are using. Yeah, that'll take awhile. - */ - if ((s_pScreenInfo->fUseWinKillKey && wParam == VK_F4 - && (GetKeyState (VK_MENU) & 0x8000)) - || (s_pScreenInfo->fUseUnixKillKey && wParam == VK_BACK - && (GetKeyState (VK_MENU) & 0x8000) - && (GetKeyState (VK_CONTROL) & 0x8000))) - { - /* - * Better leave this message here, just in case some unsuspecting - * user enters Alt + F4 and is surprised when the application - * quits. - */ - winDebug ("winWindowProc - WM_*KEYDOWN - Closekey hit, quitting\n"); - - /* Display Exit dialog */ - winDisplayExitDialog (s_pScreenPriv); - return 0; - } - - /* - * Don't do anything for the Windows keys, as focus will soon - * be returned to Windows. We may be able to trap the Windows keys, - * but we should determine if that is desirable before doing so. - */ - if ((wParam == VK_LWIN || wParam == VK_RWIN) && !g_fKeyboardHookLL) - break; - - /* Discard fake Ctrl_L events that precede AltGR on non-US keyboards */ - if (winIsFakeCtrl_L (message, wParam, lParam)) - return 0; - - /* - * Discard presses generated from Windows auto-repeat - */ - if (lParam & (1<<30)) - { - switch (wParam) - { - /* ago: Pressing LControl while RControl is pressed is - * Indicated as repeat. Fix this! - */ - case VK_CONTROL: - case VK_SHIFT: - if (winCheckKeyPressed(wParam, lParam)) - return 0; + if (s_pScreenPriv == NULL || s_pScreenInfo->fIgnoreInput) break; - default: + + /* + * FIXME: Catching Alt-F4 like this is really terrible. This should + * be generalized to handle other Windows keyboard signals. Actually, + * the list keys to catch and the actions to perform when caught should + * be configurable; that way user's can customize the keys that they + * need to have passed through to their window manager or apps, or they + * can remap certain actions to new key codes that do not conflict + * with the X apps that they are using. Yeah, that'll take awhile. + */ + if ((s_pScreenInfo->fUseWinKillKey && wParam == VK_F4 + && (GetKeyState(VK_MENU) & 0x8000)) + || (s_pScreenInfo->fUseUnixKillKey && wParam == VK_BACK + && (GetKeyState(VK_MENU) & 0x8000) + && (GetKeyState(VK_CONTROL) & 0x8000))) { + /* + * Better leave this message here, just in case some unsuspecting + * user enters Alt + F4 and is surprised when the application + * quits. + */ + winDebug ("winWindowProc - WM_*KEYDOWN - Closekey hit, quitting\n"); + + /* Display Exit dialog */ + winDisplayExitDialog(s_pScreenPriv); return 0; } - } - - /* Translate Windows key code to X scan code */ - winTranslateKey (wParam, lParam, &iScanCode); - /* Ignore repeats for CapsLock */ - if (wParam == VK_CAPITAL) - lParam = 1; + /* + * Don't do anything for the Windows keys, as focus will soon + * be returned to Windows. We may be able to trap the Windows keys, + * but we should determine if that is desirable before doing so. + */ + if ((wParam == VK_LWIN || wParam == VK_RWIN) && !g_fKeyboardHookLL) + break; - /* Send the key event(s) */ - for (i = 0; i < LOWORD(lParam); ++i) - winSendKeyEvent (iScanCode, TRUE); - return 0; + /* Discard fake Ctrl_L events that precede AltGR on non-US keyboards */ + if (winIsFakeCtrl_L(message, wParam, lParam)) + return 0; + + /* + * Discard presses generated from Windows auto-repeat + */ + if (lParam & (1 << 30)) { + switch (wParam) { + /* ago: Pressing LControl while RControl is pressed is + * Indicated as repeat. Fix this! + */ + case VK_CONTROL: + case VK_SHIFT: + if (winCheckKeyPressed(wParam, lParam)) + return 0; + break; + default: + return 0; + } + } + + /* Translate Windows key code to X scan code */ + winTranslateKey(wParam, lParam, &iScanCode); + + /* Ignore repeats for CapsLock */ + if (wParam == VK_CAPITAL) + lParam = 1; + + /* Send the key event(s) */ + for (i = 0; i < LOWORD(lParam); ++i) + winSendKeyEvent(iScanCode, TRUE); + return 0; case WM_SYSKEYUP: case WM_KEYUP: - if (s_pScreenPriv == NULL || s_pScreenInfo->fIgnoreInput) - break; - - /* - * Don't do anything for the Windows keys, as focus will soon - * be returned to Windows. We may be able to trap the Windows keys, - * but we should determine if that is desirable before doing so. - */ - if ((wParam == VK_LWIN || wParam == VK_RWIN) && !g_fKeyboardHookLL) - break; - - /* Ignore the fake Ctrl_L that follows an AltGr release */ - if (winIsFakeCtrl_L (message, wParam, lParam)) - return 0; - - /* Enqueue a keyup event */ - winTranslateKey (wParam, lParam, &iScanCode); - winSendKeyEvent (iScanCode, FALSE); - - /* Release all pressed shift keys */ - if (wParam == VK_SHIFT) - winFixShiftKeys (iScanCode); - return 0; + if (s_pScreenPriv == NULL || s_pScreenInfo->fIgnoreInput) + break; + + /* + * Don't do anything for the Windows keys, as focus will soon + * be returned to Windows. We may be able to trap the Windows keys, + * but we should determine if that is desirable before doing so. + */ + if ((wParam == VK_LWIN || wParam == VK_RWIN) && !g_fKeyboardHookLL) + break; + + /* Ignore the fake Ctrl_L that follows an AltGr release */ + if (winIsFakeCtrl_L(message, wParam, lParam)) + return 0; + + /* Enqueue a keyup event */ + winTranslateKey(wParam, lParam, &iScanCode); + winSendKeyEvent(iScanCode, FALSE); + + /* Release all pressed shift keys */ + if (wParam == VK_SHIFT) + winFixShiftKeys(iScanCode); + return 0; case WM_HOTKEY: - if (s_pScreenPriv == NULL) - break; + if (s_pScreenPriv == NULL) + break; - /* Call the engine-specific hot key handler */ - (*s_pScreenPriv->pwinHotKeyAltTab) (s_pScreen); - return 0; + /* Call the engine-specific hot key handler */ + (*s_pScreenPriv->pwinHotKeyAltTab) (s_pScreen); + return 0; case WM_ACTIVATE: - if (s_pScreenPriv == NULL - || s_pScreenInfo->fIgnoreInput) - break; - - /* TODO: Override display of window when we have a bad depth */ - if (LOWORD(wParam) != WA_INACTIVE && s_pScreenPriv->fBadDepth) - { - winDebug ("winWindowProc - WM_ACTIVATE - Bad depth, trying " - "to override window activation\n"); - - /* Minimize the window */ - ShowWindow (hwnd, SW_MINIMIZE); - - /* Display dialog box */ - if (g_hDlgDepthChange != NULL) - { - /* Make the existing dialog box active */ - SetActiveWindow (g_hDlgDepthChange); - } - else - { - /* TODO: Recreate the dialog box and bring to the top */ - ShowWindow (g_hDlgDepthChange, SW_SHOWDEFAULT); - } - - /* Don't do any other processing of this message */ - return 0; - } - - winDebug ("winWindowProc - WM_ACTIVATE\n"); - - /* - * Focus is being changed to another window. - * The other window may or may not belong to - * our process. - */ - - /* Clear any lingering wheel delta */ - s_pScreenPriv->iDeltaZ = 0; - - /* Reshow the Windows mouse cursor if we are being deactivated */ - if (g_fSoftwareCursor && LOWORD(wParam) == WA_INACTIVE - && !g_fCursor) - { - /* Show Windows cursor */ - g_fCursor = TRUE; - ShowCursor (TRUE); - } - return 0; + if (s_pScreenPriv == NULL || s_pScreenInfo->fIgnoreInput) + break; + + /* TODO: Override display of window when we have a bad depth */ + if (LOWORD(wParam) != WA_INACTIVE && s_pScreenPriv->fBadDepth) { + winDebug ("winWindowProc - WM_ACTIVATE - Bad depth, trying " + "to override window activation\n"); + + /* Minimize the window */ + ShowWindow(hwnd, SW_MINIMIZE); + + /* Display dialog box */ + if (g_hDlgDepthChange != NULL) { + /* Make the existing dialog box active */ + SetActiveWindow(g_hDlgDepthChange); + } + else { + /* TODO: Recreate the dialog box and bring to the top */ + ShowWindow(g_hDlgDepthChange, SW_SHOWDEFAULT); + } + + /* Don't do any other processing of this message */ + return 0; + } + + winDebug("winWindowProc - WM_ACTIVATE\n"); + + /* + * Focus is being changed to another window. + * The other window may or may not belong to + * our process. + */ + + /* Clear any lingering wheel delta */ + s_pScreenPriv->iDeltaZ = 0; + + /* Reshow the Windows mouse cursor if we are being deactivated */ + if (g_fSoftwareCursor && LOWORD(wParam) == WA_INACTIVE && !g_fCursor) { + /* Show Windows cursor */ + g_fCursor = TRUE; + ShowCursor(TRUE); + } + return 0; case WM_ACTIVATEAPP: - if (s_pScreenPriv == NULL - || s_pScreenInfo->fIgnoreInput) - break; + if (s_pScreenPriv == NULL || s_pScreenInfo->fIgnoreInput) + break; - winDebug ("winWindowProc - WM_ACTIVATEAPP\n"); + winDebug("winWindowProc - WM_ACTIVATEAPP\n"); - /* Activate or deactivate */ - s_pScreenPriv->fActive = wParam; + /* Activate or deactivate */ + s_pScreenPriv->fActive = wParam; - /* Reshow the Windows mouse cursor if we are being deactivated */ - if (g_fSoftwareCursor && !s_pScreenPriv->fActive - && !g_fCursor) - { - /* Show Windows cursor */ - g_fCursor = TRUE; - ShowCursor (TRUE); - } + /* Reshow the Windows mouse cursor if we are being deactivated */ + if (g_fSoftwareCursor && !s_pScreenPriv->fActive && !g_fCursor) { + /* Show Windows cursor */ + g_fCursor = TRUE; + ShowCursor(TRUE); + } #ifdef XWIN_CLIPBOARD - /* Make sure the clipboard chain is ok. */ - winFixClipboardChain (0); + /* Make sure the clipboard chain is ok. */ + winFixClipboardChain (0); #endif - /* Call engine specific screen activation/deactivation function */ - (*s_pScreenPriv->pwinActivateApp) (s_pScreen); + /* Call engine specific screen activation/deactivation function */ + (*s_pScreenPriv->pwinActivateApp) (s_pScreen); #ifdef XWIN_MULTIWINDOWINTWM - if (s_pScreenPriv->fActive) - { - /* Restack all window unless using built-in wm. */ - if (s_pScreenInfo->fInternalWM && s_pScreenInfo->fAnotherWMRunning) - winMWExtWMRestackWindows (s_pScreen); - } + if (s_pScreenPriv->fActive) { + /* Restack all window unless using built-in wm. */ + if (s_pScreenInfo->fInternalWM && s_pScreenInfo->fAnotherWMRunning) + winMWExtWMRestackWindows(s_pScreen); + } #endif - return 0; + return 0; case WM_COMMAND: - switch (LOWORD (wParam)) - { - case ID_APP_EXIT: - /* Display Exit dialog */ - winDisplayExitDialog (s_pScreenPriv); - return 0; + switch (LOWORD(wParam)) { + case ID_APP_EXIT: + /* Display Exit dialog */ + winDisplayExitDialog(s_pScreenPriv); + return 0; #ifdef XWIN_MULTIWINDOW - case ID_APP_HIDE_ROOT: - if (s_pScreenPriv->fRootWindowShown) - ShowWindow (s_pScreenPriv->hwndScreen, SW_HIDE); - else - ShowWindow (s_pScreenPriv->hwndScreen, SW_SHOW); - s_pScreenPriv->fRootWindowShown = !s_pScreenPriv->fRootWindowShown; - return 0; + case ID_APP_HIDE_ROOT: + if (s_pScreenPriv->fRootWindowShown) + ShowWindow(s_pScreenPriv->hwndScreen, SW_HIDE); + else + ShowWindow(s_pScreenPriv->hwndScreen, SW_SHOW); + s_pScreenPriv->fRootWindowShown = !s_pScreenPriv->fRootWindowShown; + return 0; #endif - case ID_APP_ABOUT: - /* Display the About box */ - winDisplayAboutDialog (s_pScreenPriv); - return 0; + case ID_APP_ABOUT: + /* Display the About box */ + winDisplayAboutDialog(s_pScreenPriv); + return 0; - default: - /* It's probably one of the custom menus... */ - if (HandleCustomWM_COMMAND (0, LOWORD (wParam))) - return 0; - } - break; + default: + /* It's probably one of the custom menus... */ + if (HandleCustomWM_COMMAND(0, LOWORD(wParam))) + return 0; + } + break; case WM_ENDSESSION: case WM_GIVEUP: - /* Tell X that we are giving up */ + /* Tell X that we are giving up */ #ifdef XWIN_MULTIWINDOW - if (s_pScreenInfo->fMultiWindow) - winDeinitMultiWindowWM (); + if (s_pScreenInfo->fMultiWindow) + winDeinitMultiWindowWM(); #endif g_fClipboardStarted=FALSE; /* This is to avoid dead-locls caused by the clipboard thread still doing some stuff */ - GiveUp (0); - return 0; + GiveUp(0); + return 0; case WM_CLOSE: - /* Display Exit dialog */ - winDisplayExitDialog (s_pScreenPriv); - return 0; + /* Display Exit dialog */ + winDisplayExitDialog(s_pScreenPriv); + return 0; case WM_SETCURSOR: - if (LOWORD(lParam) == HTCLIENT) - { - if (!g_fSoftwareCursor) SetCursor (s_pScreenPriv->cursor.handle); - return TRUE; - } - break; + if (LOWORD(lParam) == HTCLIENT) { + if (!g_fSoftwareCursor) + SetCursor(s_pScreenPriv->cursor.handle); + return TRUE; + } + break; #ifdef XWIN_MULTIWINDOWEXTWM case WM_MANAGE: - winDebug ("winWindowProc - WM_MANAGE\n"); - s_pScreenInfo->fAnotherWMRunning = FALSE; + winDebug ("winWindowProc - WM_MANAGE\n"); + s_pScreenInfo->fAnotherWMRunning = FALSE; #ifdef XWIN_MULTIWINDOWINTWM - if (s_pScreenInfo->fInternalWM) - { - EnumThreadWindows (g_dwCurrentThreadID, winMWExtWMDecorateWindow, 0); - //RootlessRepositionWindows (s_pScreen); - } + if (s_pScreenInfo->fInternalWM) { + EnumThreadWindows(g_dwCurrentThreadID, winMWExtWMDecorateWindow, 0); + //RootlessRepositionWindows (s_pScreen); + } #endif - break; + break; case WM_UNMANAGE: - winDebug ("winWindowProc - WM_UNMANAGE\n"); - s_pScreenInfo->fAnotherWMRunning = TRUE; + winDebug ("winWindowProc - WM_UNMANAGE\n"); + s_pScreenInfo->fAnotherWMRunning = TRUE; #ifdef XWIN_MULTIWINDOWINTWM - if (s_pScreenInfo->fInternalWM) - { - EnumThreadWindows (g_dwCurrentThreadID, winMWExtWMDecorateWindow, 0); - winMWExtWMRestackWindows (s_pScreen); - } + if (s_pScreenInfo->fInternalWM) { + EnumThreadWindows(g_dwCurrentThreadID, winMWExtWMDecorateWindow, 0); + winMWExtWMRestackWindows(s_pScreen); + } #endif - break; + break; #endif default: - if(message == s_uTaskbarRestart) - { - winInitNotifyIcon (s_pScreenPriv,FALSE); - } - break; + if (message == s_uTaskbarRestart) { + winInitNotifyIcon (s_pScreenPriv,FALSE); + } + break; } - return DefWindowProc (hwnd, message, wParam, lParam); + return DefWindowProc(hwnd, message, wParam, lParam); } |