1226 lines
26 KiB
C
1226 lines
26 KiB
C
/*
|
|
*Copyright (C) 1994-2000 The XFree86 Project, Inc. All Rights Reserved.
|
|
*
|
|
*Permission is hereby granted, free of charge, to any person obtaining
|
|
* a copy of this software and associated documentation files (the
|
|
*"Software"), to deal in the Software without restriction, including
|
|
*without limitation the rights to use, copy, modify, merge, publish,
|
|
*distribute, sublicense, and/or sell copies of the Software, and to
|
|
*permit persons to whom the Software is furnished to do so, subject to
|
|
*the following conditions:
|
|
*
|
|
*The above copyright notice and this permission notice shall be
|
|
*included in all copies or substantial portions of the Software.
|
|
*
|
|
*THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
|
*EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
|
*MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
|
*NONINFRINGEMENT. IN NO EVENT SHALL THE XFREE86 PROJECT BE LIABLE FOR
|
|
*ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF
|
|
*CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
|
*WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
*
|
|
*Except as contained in this notice, the name of the XFree86 Project
|
|
*shall not be used in advertising or otherwise to promote the sale, use
|
|
*or other dealings in this Software without prior written authorization
|
|
*from the XFree86 Project.
|
|
*
|
|
* Authors: Dakshinamurthy Karra
|
|
* Suhaib M Siddiqi
|
|
* Peter Busch
|
|
* Harold L Hunt II
|
|
* Kensuke Matsuzaki
|
|
*/
|
|
|
|
#ifndef _WIN_H_
|
|
#define _WIN_H_
|
|
|
|
#ifndef NO
|
|
#define NO 0
|
|
#endif
|
|
#ifndef YES
|
|
#define YES 1
|
|
#endif
|
|
|
|
/* We can handle WM_MOUSEHWHEEL even though _WIN32_WINNT < 0x0600 */
|
|
#ifndef WM_MOUSEHWHEEL
|
|
#define WM_MOUSEHWHEEL 0x020E
|
|
#endif
|
|
|
|
/* Turn debug messages on or off */
|
|
#ifndef CYGDEBUG
|
|
#define CYGDEBUG NO
|
|
#endif
|
|
|
|
#define WIN_DEFAULT_BPP 0
|
|
#define WIN_DEFAULT_WHITEPIXEL 255
|
|
#define WIN_DEFAULT_BLACKPIXEL 0
|
|
#define WIN_DEFAULT_LINEBIAS 0
|
|
#define WIN_DEFAULT_E3B_TIME 50 /* milliseconds */
|
|
#define WIN_DEFAULT_DPI 96
|
|
#define WIN_DEFAULT_REFRESH 0
|
|
#define WIN_DEFAULT_WIN_KILL TRUE
|
|
#define WIN_DEFAULT_UNIX_KILL FALSE
|
|
#define WIN_DEFAULT_CLIP_UPDATES_NBOXES 0
|
|
#ifdef XWIN_EMULATEPSEUDO
|
|
#define WIN_DEFAULT_EMULATE_PSEUDO FALSE
|
|
#endif
|
|
#define WIN_DEFAULT_USER_GAVE_HEIGHT_AND_WIDTH FALSE
|
|
|
|
/*
|
|
* Windows only supports 256 color palettes
|
|
*/
|
|
#define WIN_NUM_PALETTE_ENTRIES 256
|
|
|
|
/*
|
|
* Number of times to call Restore in an attempt to restore the primary surface
|
|
*/
|
|
#define WIN_REGAIN_SURFACE_RETRIES 1
|
|
|
|
/*
|
|
* Build a supported display depths mask by shifting one to the left
|
|
* by the number of bits in the supported depth.
|
|
*/
|
|
#define WIN_SUPPORTED_BPPS ( (1 << (32 - 1)) | (1 << (24 - 1)) \
|
|
| (1 << (16 - 1)) | (1 << (15 - 1)) \
|
|
| (1 << ( 8 - 1)))
|
|
#define WIN_CHECK_DEPTH YES
|
|
|
|
/*
|
|
* Timer IDs for WM_TIMER
|
|
*/
|
|
#define WIN_E3B_TIMER_ID 1
|
|
#define WIN_POLLING_MOUSE_TIMER_ID 2
|
|
|
|
#define MOUSE_POLLING_INTERVAL 50
|
|
|
|
#define WIN_E3B_OFF -1
|
|
#define WIN_E3B_DEFAULT 0
|
|
|
|
#define WIN_FD_INVALID -1
|
|
|
|
#define WIN_SERVER_NONE 0x0L /* 0 */
|
|
#define WIN_SERVER_SHADOW_GDI 0x1L /* 1 */
|
|
#define WIN_SERVER_SHADOW_DD 0x2L /* 2 */
|
|
#define WIN_SERVER_SHADOW_DDNL 0x4L /* 4 */
|
|
|
|
#define AltMapIndex Mod1MapIndex
|
|
#define NumLockMapIndex Mod2MapIndex
|
|
#define AltLangMapIndex Mod3MapIndex
|
|
#define KanaMapIndex Mod4MapIndex
|
|
#define ScrollLockMapIndex Mod5MapIndex
|
|
|
|
#define WIN_MOD_LALT 0x00000001
|
|
#define WIN_MOD_RALT 0x00000002
|
|
#define WIN_MOD_LCONTROL 0x00000004
|
|
#define WIN_MOD_RCONTROL 0x00000008
|
|
|
|
#define WIN_24BPP_MASK_RED 0x00FF0000
|
|
#define WIN_24BPP_MASK_GREEN 0x0000FF00
|
|
#define WIN_24BPP_MASK_BLUE 0x000000FF
|
|
|
|
#define WIN_MAX_KEYS_PER_KEY 4
|
|
|
|
#define NONAMELESSUNION
|
|
|
|
#include <sys/types.h>
|
|
#include <sys/stat.h>
|
|
#include <stdio.h>
|
|
|
|
#include <errno.h>
|
|
#if defined(XWIN_MULTIWINDOWEXTWM) || defined(XWIN_CLIPBOARD) || defined(XWIN_MULTIWINDOW)
|
|
#define HANDLE void *
|
|
#include <pthread.h>
|
|
#undef HANDLE
|
|
#endif
|
|
|
|
#ifdef HAVE_MMAP
|
|
#include <sys/mman.h>
|
|
#ifndef MAP_FILE
|
|
#define MAP_FILE 0
|
|
#endif /* MAP_FILE */
|
|
#endif /* HAVE_MMAP */
|
|
|
|
#include <X11/X.h>
|
|
#include <X11/Xproto.h>
|
|
#include <X11/Xos.h>
|
|
#include <X11/Xprotostr.h>
|
|
#include "scrnintstr.h"
|
|
#include "pixmapstr.h"
|
|
#include "pixmap.h"
|
|
#include "region.h"
|
|
#include "gcstruct.h"
|
|
#include "colormap.h"
|
|
#include "colormapst.h"
|
|
#include "miscstruct.h"
|
|
#include "servermd.h"
|
|
#include "windowstr.h"
|
|
#include "mi.h"
|
|
#include "micmap.h"
|
|
#include "mifillarc.h"
|
|
#include "mifpoly.h"
|
|
#include "input.h"
|
|
#include "mipointer.h"
|
|
#include "X11/keysym.h"
|
|
#include "micoord.h"
|
|
#include "dix.h"
|
|
#include "miline.h"
|
|
#include "shadow.h"
|
|
#include "fb.h"
|
|
#include "rootless.h"
|
|
|
|
#include "mipict.h"
|
|
#include "picturestr.h"
|
|
|
|
#ifdef RANDR
|
|
#include "randrstr.h"
|
|
#endif
|
|
|
|
/*
|
|
* Windows headers
|
|
*/
|
|
#include "winms.h"
|
|
#include "winresource.h"
|
|
|
|
/*
|
|
* Define Windows constants
|
|
*/
|
|
|
|
#define WM_TRAYICON (WM_USER + 1000)
|
|
#define WM_INIT_SYS_MENU (WM_USER + 1001)
|
|
#define WM_GIVEUP (WM_USER + 1002)
|
|
|
|
/* Local includes */
|
|
#include "winwindow.h"
|
|
#include "winmsg.h"
|
|
|
|
/*
|
|
* Debugging macros
|
|
*/
|
|
|
|
#if CYGDEBUG
|
|
#define DEBUG_MSG(str,...) \
|
|
if (fDebugProcMsg) \
|
|
{ \
|
|
char *pszTemp; \
|
|
int iLength; \
|
|
if (asprintf (&pszTemp, str, ##__VA_ARGS__) != -1) { \
|
|
MessageBox (NULL, pszTemp, szFunctionName, MB_OK); \
|
|
free (pszTemp); \
|
|
} \
|
|
}
|
|
#else
|
|
#define DEBUG_MSG(str,...)
|
|
#endif
|
|
|
|
#if CYGDEBUG
|
|
#define DEBUG_FN_NAME(str) PTSTR szFunctionName = str
|
|
#else
|
|
#define DEBUG_FN_NAME(str)
|
|
#endif
|
|
|
|
#if CYGDEBUG || YES
|
|
#define DEBUGVARS BOOL fDebugProcMsg = FALSE
|
|
#else
|
|
#define DEBUGVARS
|
|
#endif
|
|
|
|
#if CYGDEBUG || YES
|
|
#define DEBUGPROC_MSG fDebugProcMsg = TRUE
|
|
#else
|
|
#define DEBUGPROC_MSG
|
|
#endif
|
|
|
|
#define PROFILEPOINT(point,thresh)\
|
|
{\
|
|
static unsigned int PROFPT##point = 0;\
|
|
if (++PROFPT##point % thresh == 0)\
|
|
ErrorF (#point ": PROFILEPOINT hit %u times\n", PROFPT##point);\
|
|
}
|
|
|
|
#define DEFINE_ATOM_HELPER(func,atom_name) \
|
|
static Atom func (void) { \
|
|
static int generation; \
|
|
static Atom atom; \
|
|
if (generation != serverGeneration) { \
|
|
generation = serverGeneration; \
|
|
atom = MakeAtom (atom_name, strlen (atom_name), TRUE); \
|
|
} \
|
|
return atom; \
|
|
}
|
|
|
|
/*
|
|
* Typedefs for engine dependent function pointers
|
|
*/
|
|
|
|
typedef Bool (*winAllocateFBProcPtr) (ScreenPtr);
|
|
|
|
typedef void (*winFreeFBProcPtr) (ScreenPtr);
|
|
|
|
typedef void (*winShadowUpdateProcPtr) (ScreenPtr, shadowBufPtr);
|
|
|
|
typedef Bool (*winInitScreenProcPtr) (ScreenPtr);
|
|
|
|
typedef Bool (*winCloseScreenProcPtr) (ScreenPtr);
|
|
|
|
typedef Bool (*winInitVisualsProcPtr) (ScreenPtr);
|
|
|
|
typedef Bool (*winAdjustVideoModeProcPtr) (ScreenPtr);
|
|
|
|
typedef Bool (*winCreateBoundingWindowProcPtr) (ScreenPtr);
|
|
|
|
typedef Bool (*winFinishScreenInitProcPtr) (int, ScreenPtr, int, char **);
|
|
|
|
typedef Bool (*winBltExposedRegionsProcPtr) (ScreenPtr);
|
|
|
|
typedef Bool (*winActivateAppProcPtr) (ScreenPtr);
|
|
|
|
typedef Bool (*winRedrawScreenProcPtr) (ScreenPtr pScreen);
|
|
|
|
typedef Bool (*winRealizeInstalledPaletteProcPtr) (ScreenPtr pScreen);
|
|
|
|
typedef Bool (*winInstallColormapProcPtr) (ColormapPtr pColormap);
|
|
|
|
typedef Bool (*winStoreColorsProcPtr) (ColormapPtr pmap,
|
|
int ndef, xColorItem * pdefs);
|
|
|
|
typedef Bool (*winCreateColormapProcPtr) (ColormapPtr pColormap);
|
|
|
|
typedef Bool (*winDestroyColormapProcPtr) (ColormapPtr pColormap);
|
|
|
|
typedef Bool (*winHotKeyAltTabProcPtr) (ScreenPtr);
|
|
|
|
typedef Bool (*winCreatePrimarySurfaceProcPtr) (ScreenPtr);
|
|
|
|
typedef Bool (*winReleasePrimarySurfaceProcPtr) (ScreenPtr);
|
|
|
|
typedef Bool (*winFinishCreateWindowsWindowProcPtr) (WindowPtr pWin);
|
|
|
|
typedef Bool (*winCreateScreenResourcesProc) (ScreenPtr);
|
|
|
|
/*
|
|
* GC (graphics context) privates
|
|
*/
|
|
|
|
typedef struct {
|
|
HDC hdc;
|
|
HDC hdcMem;
|
|
} winPrivGCRec, *winPrivGCPtr;
|
|
|
|
/*
|
|
* Pixmap privates
|
|
*/
|
|
|
|
typedef struct {
|
|
HDC hdcSelected;
|
|
HBITMAP hBitmap;
|
|
BYTE *pbBits;
|
|
DWORD dwScanlineBytes;
|
|
BITMAPINFOHEADER *pbmih;
|
|
} winPrivPixmapRec, *winPrivPixmapPtr;
|
|
|
|
/*
|
|
* Colormap privates
|
|
*/
|
|
|
|
typedef struct {
|
|
HPALETTE hPalette;
|
|
LPDIRECTDRAWPALETTE lpDDPalette;
|
|
RGBQUAD rgbColors[WIN_NUM_PALETTE_ENTRIES];
|
|
PALETTEENTRY peColors[WIN_NUM_PALETTE_ENTRIES];
|
|
} winPrivCmapRec, *winPrivCmapPtr;
|
|
|
|
/*
|
|
* Windows Cursor handling.
|
|
*/
|
|
|
|
typedef struct {
|
|
/* from GetSystemMetrics */
|
|
int sm_cx;
|
|
int sm_cy;
|
|
|
|
BOOL visible;
|
|
HCURSOR handle;
|
|
QueryBestSizeProcPtr QueryBestSize;
|
|
miPointerSpriteFuncPtr spriteFuncs;
|
|
} winCursorRec;
|
|
|
|
/*
|
|
* Resize modes
|
|
*/
|
|
typedef enum {
|
|
notAllowed,
|
|
resizeWithScrollbars,
|
|
resizeWithRandr
|
|
} winResizeMode;
|
|
|
|
/*
|
|
* Screen information structure that we need before privates are available
|
|
* in the server startup sequence.
|
|
*/
|
|
|
|
typedef struct {
|
|
ScreenPtr pScreen;
|
|
|
|
/* Did the user specify a height and width? */
|
|
Bool fUserGaveHeightAndWidth;
|
|
|
|
DWORD dwScreen;
|
|
|
|
int iMonitor;
|
|
HMONITOR hMonitor;
|
|
DWORD dwUserWidth;
|
|
DWORD dwUserHeight;
|
|
DWORD dwWidth;
|
|
DWORD dwHeight;
|
|
DWORD dwPaddedWidth;
|
|
|
|
/* Did the user specify a screen position? */
|
|
Bool fUserGavePosition;
|
|
DWORD dwInitialX;
|
|
DWORD dwInitialY;
|
|
|
|
/*
|
|
* dwStride is the number of whole pixels that occupy a scanline,
|
|
* including those pixels that are not displayed. This is basically
|
|
* a rounding up of the width.
|
|
*/
|
|
DWORD dwStride;
|
|
|
|
/* Offset of the screen in the window when using scrollbars */
|
|
DWORD dwXOffset;
|
|
DWORD dwYOffset;
|
|
|
|
DWORD dwBPP;
|
|
DWORD dwDepth;
|
|
DWORD dwRefreshRate;
|
|
char *pfb;
|
|
DWORD dwEngine;
|
|
DWORD dwEnginePreferred;
|
|
DWORD dwClipUpdatesNBoxes;
|
|
#ifdef XWIN_EMULATEPSEUDO
|
|
Bool fEmulatePseudo;
|
|
#endif
|
|
Bool fFullScreen;
|
|
Bool fDecoration;
|
|
#ifdef XWIN_MULTIWINDOWEXTWM
|
|
Bool fMWExtWM;
|
|
Bool fInternalWM;
|
|
Bool fAnotherWMRunning;
|
|
#endif
|
|
Bool fRootless;
|
|
#ifdef XWIN_MULTIWINDOW
|
|
Bool fMultiWindow;
|
|
#endif
|
|
#if defined(XWIN_MULTIWINDOW) || defined(XWIN_MULTIWINDOWEXTWM)
|
|
Bool fMultiMonitorOverride;
|
|
#endif
|
|
Bool fMultipleMonitors;
|
|
Bool fLessPointer;
|
|
winResizeMode iResizeMode;
|
|
Bool fNoTrayIcon;
|
|
int iE3BTimeout;
|
|
/* Windows (Alt+F4) and Unix (Ctrl+Alt+Backspace) Killkey */
|
|
Bool fUseWinKillKey;
|
|
Bool fUseUnixKillKey;
|
|
Bool fIgnoreInput;
|
|
|
|
/* Did the user explicitly set this screen? */
|
|
Bool fExplicitScreen;
|
|
} winScreenInfo, *winScreenInfoPtr;
|
|
|
|
/*
|
|
* Screen privates
|
|
*/
|
|
|
|
typedef struct _winPrivScreenRec {
|
|
winScreenInfoPtr pScreenInfo;
|
|
|
|
Bool fEnabled;
|
|
Bool fClosed;
|
|
Bool fActive;
|
|
Bool fBadDepth;
|
|
|
|
int iDeltaZ;
|
|
int iDeltaV;
|
|
|
|
int iConnectedClients;
|
|
|
|
CloseScreenProcPtr CloseScreen;
|
|
|
|
DWORD dwRedMask;
|
|
DWORD dwGreenMask;
|
|
DWORD dwBlueMask;
|
|
DWORD dwBitsPerRGB;
|
|
|
|
DWORD dwModeKeyStates;
|
|
|
|
/* Handle to icons that must be freed */
|
|
HICON hiconNotifyIcon;
|
|
|
|
/* Palette management */
|
|
ColormapPtr pcmapInstalled;
|
|
|
|
/* Pointer to the root visual so we only have to look it up once */
|
|
VisualPtr pRootVisual;
|
|
|
|
/* 3 button emulation variables */
|
|
int iE3BCachedPress;
|
|
Bool fE3BFakeButton2Sent;
|
|
|
|
/* Privates used by shadow fb GDI server */
|
|
HBITMAP hbmpShadow;
|
|
HDC hdcScreen;
|
|
HDC hdcShadow;
|
|
HWND hwndScreen;
|
|
BITMAPINFOHEADER *pbmih;
|
|
|
|
/* Privates used by shadow fb and primary fb DirectDraw servers */
|
|
LPDIRECTDRAW pdd;
|
|
LPDIRECTDRAWSURFACE2 pddsPrimary;
|
|
LPDIRECTDRAW2 pdd2;
|
|
|
|
/* Privates used by shadow fb DirectDraw server */
|
|
LPDIRECTDRAWSURFACE2 pddsShadow;
|
|
LPDDSURFACEDESC pddsdShadow;
|
|
|
|
/* Privates used by primary fb DirectDraw server */
|
|
LPDIRECTDRAWSURFACE2 pddsOffscreen;
|
|
LPDDSURFACEDESC pddsdOffscreen;
|
|
LPDDSURFACEDESC pddsdPrimary;
|
|
|
|
/* Privates used by shadow fb DirectDraw Nonlocking server */
|
|
LPDIRECTDRAW4 pdd4;
|
|
LPDIRECTDRAWSURFACE4 pddsShadow4;
|
|
LPDIRECTDRAWSURFACE4 pddsPrimary4;
|
|
BOOL fRetryCreateSurface;
|
|
|
|
/* Privates used by both shadow fb DirectDraw servers */
|
|
LPDIRECTDRAWCLIPPER pddcPrimary;
|
|
|
|
#ifdef XWIN_MULTIWINDOWEXTWM
|
|
/* Privates used by multi-window external window manager */
|
|
RootlessFrameID widTop;
|
|
Bool fRestacking;
|
|
#endif
|
|
|
|
#ifdef XWIN_MULTIWINDOW
|
|
/* Privates used by multi-window */
|
|
pthread_t ptWMProc;
|
|
pthread_t ptXMsgProc;
|
|
void *pWMInfo;
|
|
#endif
|
|
|
|
#if defined(XWIN_MULTIWINDOW) || defined(XWIN_MULTIWINDOWEXTWM)
|
|
/* Privates used by both multi-window and rootless */
|
|
Bool fRootWindowShown;
|
|
#endif
|
|
|
|
#if defined(XWIN_CLIPBOARD) || defined(XWIN_MULTIWINDOW)
|
|
/* Privates used for any module running in a seperate thread */
|
|
pthread_mutex_t pmServerStarted;
|
|
Bool fServerStarted;
|
|
#endif
|
|
|
|
/* Engine specific functions */
|
|
winAllocateFBProcPtr pwinAllocateFB;
|
|
winFreeFBProcPtr pwinFreeFB;
|
|
winShadowUpdateProcPtr pwinShadowUpdate;
|
|
winInitScreenProcPtr pwinInitScreen;
|
|
winCloseScreenProcPtr pwinCloseScreen;
|
|
winInitVisualsProcPtr pwinInitVisuals;
|
|
winAdjustVideoModeProcPtr pwinAdjustVideoMode;
|
|
winCreateBoundingWindowProcPtr pwinCreateBoundingWindow;
|
|
winFinishScreenInitProcPtr pwinFinishScreenInit;
|
|
winBltExposedRegionsProcPtr pwinBltExposedRegions;
|
|
winActivateAppProcPtr pwinActivateApp;
|
|
winRedrawScreenProcPtr pwinRedrawScreen;
|
|
winRealizeInstalledPaletteProcPtr pwinRealizeInstalledPalette;
|
|
winInstallColormapProcPtr pwinInstallColormap;
|
|
winStoreColorsProcPtr pwinStoreColors;
|
|
winCreateColormapProcPtr pwinCreateColormap;
|
|
winDestroyColormapProcPtr pwinDestroyColormap;
|
|
winHotKeyAltTabProcPtr pwinHotKeyAltTab;
|
|
winCreatePrimarySurfaceProcPtr pwinCreatePrimarySurface;
|
|
winReleasePrimarySurfaceProcPtr pwinReleasePrimarySurface;
|
|
|
|
winCreateScreenResourcesProc pwinCreateScreenResources;
|
|
|
|
#ifdef XWIN_MULTIWINDOW
|
|
/* Window Procedures for MultiWindow mode */
|
|
winFinishCreateWindowsWindowProcPtr pwinFinishCreateWindowsWindow;
|
|
#endif
|
|
|
|
/* Window Procedures for Rootless mode */
|
|
CreateWindowProcPtr CreateWindow;
|
|
DestroyWindowProcPtr DestroyWindow;
|
|
PositionWindowProcPtr PositionWindow;
|
|
ChangeWindowAttributesProcPtr ChangeWindowAttributes;
|
|
RealizeWindowProcPtr RealizeWindow;
|
|
UnrealizeWindowProcPtr UnrealizeWindow;
|
|
ValidateTreeProcPtr ValidateTree;
|
|
PostValidateTreeProcPtr PostValidateTree;
|
|
CopyWindowProcPtr CopyWindow;
|
|
ClearToBackgroundProcPtr ClearToBackground;
|
|
ClipNotifyProcPtr ClipNotify;
|
|
RestackWindowProcPtr RestackWindow;
|
|
ReparentWindowProcPtr ReparentWindow;
|
|
ResizeWindowProcPtr ResizeWindow;
|
|
MoveWindowProcPtr MoveWindow;
|
|
SetShapeProcPtr SetShape;
|
|
|
|
winCursorRec cursor;
|
|
} winPrivScreenRec;
|
|
|
|
#ifdef XWIN_MULTIWINDOWEXTWM
|
|
typedef struct {
|
|
RootlessWindowPtr pFrame;
|
|
HWND hWnd;
|
|
int dwWidthBytes;
|
|
BITMAPINFOHEADER *pbmihShadow;
|
|
HBITMAP hbmpShadow;
|
|
HDC hdcShadow;
|
|
HDC hdcScreen;
|
|
BOOL fResized;
|
|
BOOL fRestackingNow;
|
|
BOOL fClose;
|
|
BOOL fMovingOrSizing;
|
|
BOOL fDestroyed; //for debug
|
|
char *pfb;
|
|
} win32RootlessWindowRec, *win32RootlessWindowPtr;
|
|
#endif
|
|
|
|
typedef struct {
|
|
void *value;
|
|
XID id;
|
|
} WindowIDPairRec, *WindowIDPairPtr;
|
|
|
|
/*
|
|
* Extern declares for general global variables
|
|
*/
|
|
|
|
#include "winglobals.h"
|
|
|
|
extern winScreenInfo *g_ScreenInfo;
|
|
extern miPointerScreenFuncRec g_winPointerCursorFuncs;
|
|
extern DWORD g_dwEvents;
|
|
|
|
#ifdef HAS_DEVWINDOWS
|
|
extern int g_fdMessageQueue;
|
|
#endif
|
|
extern DevPrivateKeyRec g_iScreenPrivateKeyRec;
|
|
|
|
#define g_iScreenPrivateKey (&g_iScreenPrivateKeyRec)
|
|
extern DevPrivateKeyRec g_iCmapPrivateKeyRec;
|
|
|
|
#define g_iCmapPrivateKey (&g_iCmapPrivateKeyRec)
|
|
extern DevPrivateKeyRec g_iGCPrivateKeyRec;
|
|
|
|
#define g_iGCPrivateKey (&g_iGCPrivateKeyRec)
|
|
extern DevPrivateKeyRec g_iPixmapPrivateKeyRec;
|
|
|
|
#define g_iPixmapPrivateKey (&g_iPixmapPrivateKeyRec)
|
|
extern DevPrivateKeyRec g_iWindowPrivateKeyRec;
|
|
|
|
#define g_iWindowPrivateKey (&g_iWindowPrivateKeyRec)
|
|
|
|
extern unsigned long g_ulServerGeneration;
|
|
extern DWORD g_dwEnginesSupported;
|
|
extern HINSTANCE g_hInstance;
|
|
extern int g_copyROP[];
|
|
extern int g_patternROP[];
|
|
extern const char *g_pszQueryHost;
|
|
extern DeviceIntPtr g_pwinPointer;
|
|
extern DeviceIntPtr g_pwinKeyboard;
|
|
|
|
/*
|
|
* Extern declares for dynamically loaded library function pointers
|
|
*/
|
|
|
|
extern FARPROC g_fpDirectDrawCreate;
|
|
extern FARPROC g_fpDirectDrawCreateClipper;
|
|
|
|
/*
|
|
* Screen privates macros
|
|
*/
|
|
|
|
#define winGetScreenPriv(pScreen) ((winPrivScreenPtr) \
|
|
dixLookupPrivate(&(pScreen)->devPrivates, g_iScreenPrivateKey))
|
|
|
|
#define winSetScreenPriv(pScreen,v) \
|
|
dixSetPrivate(&(pScreen)->devPrivates, g_iScreenPrivateKey, v)
|
|
|
|
#define winScreenPriv(pScreen) \
|
|
winPrivScreenPtr pScreenPriv = winGetScreenPriv(pScreen)
|
|
|
|
/*
|
|
* Colormap privates macros
|
|
*/
|
|
|
|
#define winGetCmapPriv(pCmap) ((winPrivCmapPtr) \
|
|
dixLookupPrivate(&(pCmap)->devPrivates, g_iCmapPrivateKey))
|
|
|
|
#define winSetCmapPriv(pCmap,v) \
|
|
dixSetPrivate(&(pCmap)->devPrivates, g_iCmapPrivateKey, v)
|
|
|
|
#define winCmapPriv(pCmap) \
|
|
winPrivCmapPtr pCmapPriv = winGetCmapPriv(pCmap)
|
|
|
|
/*
|
|
* GC privates macros
|
|
*/
|
|
|
|
#define winGetGCPriv(pGC) ((winPrivGCPtr) \
|
|
dixLookupPrivate(&(pGC)->devPrivates, g_iGCPrivateKey))
|
|
|
|
#define winSetGCPriv(pGC,v) \
|
|
dixSetPrivate(&(pGC)->devPrivates, g_iGCPrivateKey, v)
|
|
|
|
#define winGCPriv(pGC) \
|
|
winPrivGCPtr pGCPriv = winGetGCPriv(pGC)
|
|
|
|
/*
|
|
* Pixmap privates macros
|
|
*/
|
|
|
|
#define winGetPixmapPriv(pPixmap) ((winPrivPixmapPtr) \
|
|
dixLookupPrivate(&(pPixmap)->devPrivates, g_iPixmapPrivateKey))
|
|
|
|
#define winSetPixmapPriv(pPixmap,v) \
|
|
dixLookupPrivate(&(pPixmap)->devPrivates, g_iPixmapPrivateKey, v)
|
|
|
|
#define winPixmapPriv(pPixmap) \
|
|
winPrivPixmapPtr pPixmapPriv = winGetPixmapPriv(pPixmap)
|
|
|
|
/*
|
|
* Window privates macros
|
|
*/
|
|
|
|
#define winGetWindowPriv(pWin) ((winPrivWinPtr) \
|
|
dixLookupPrivate(&(pWin)->devPrivates, g_iWindowPrivateKey))
|
|
|
|
#define winSetWindowPriv(pWin,v) \
|
|
dixLookupPrivate(&(pWin)->devPrivates, g_iWindowPrivateKey, v)
|
|
|
|
#define winWindowPriv(pWin) \
|
|
winPrivWinPtr pWinPriv = winGetWindowPriv(pWin)
|
|
|
|
/*
|
|
* wrapper macros
|
|
*/
|
|
#define _WIN_WRAP(priv, real, mem, func) {\
|
|
priv->mem = real->mem; \
|
|
real->mem = func; \
|
|
}
|
|
|
|
#define _WIN_UNWRAP(priv, real, mem) {\
|
|
real->mem = priv->mem; \
|
|
}
|
|
|
|
#define WIN_WRAP(mem, func) _WIN_WRAP(pScreenPriv, pScreen, mem, func)
|
|
|
|
#define WIN_UNWRAP(mem) _WIN_UNWRAP(pScreenPriv, pScreen, mem)
|
|
|
|
/*
|
|
* BEGIN DDX and DIX Function Prototypes
|
|
*/
|
|
|
|
/*
|
|
* winallpriv.c
|
|
*/
|
|
|
|
Bool
|
|
winAllocatePrivates(ScreenPtr pScreen);
|
|
|
|
Bool
|
|
winInitCmapPrivates(ColormapPtr pCmap, int i);
|
|
|
|
Bool
|
|
winAllocateCmapPrivates(ColormapPtr pCmap);
|
|
|
|
/*
|
|
* winauth.c
|
|
*/
|
|
|
|
#if defined(XWIN_CLIPBOARD) || defined(XWIN_MULTIWINDOW)
|
|
Bool
|
|
winGenerateAuthorization(void);
|
|
void winSetAuthorization(void);
|
|
#endif
|
|
|
|
/*
|
|
* winblock.c
|
|
*/
|
|
|
|
void
|
|
|
|
winBlockHandler(ScreenPtr pScreen,
|
|
void *pTimeout, void *pReadMask);
|
|
|
|
#ifdef XWIN_CLIPBOARD
|
|
/*
|
|
* winclipboardinit.c
|
|
*/
|
|
|
|
Bool
|
|
winInitClipboard(void);
|
|
|
|
void
|
|
winClipboardShutdown(void);
|
|
#endif
|
|
|
|
/*
|
|
* wincmap.c
|
|
*/
|
|
|
|
void
|
|
winSetColormapFunctions(ScreenPtr pScreen);
|
|
|
|
Bool
|
|
winCreateDefColormap(ScreenPtr pScreen);
|
|
|
|
/*
|
|
* wincreatewnd.c
|
|
*/
|
|
|
|
Bool
|
|
winCreateBoundingWindowFullScreen(ScreenPtr pScreen);
|
|
|
|
Bool
|
|
winCreateBoundingWindowWindowed(ScreenPtr pScreen);
|
|
|
|
/*
|
|
* windialogs.c
|
|
*/
|
|
|
|
void
|
|
winDisplayExitDialog(winPrivScreenPtr pScreenPriv);
|
|
|
|
void
|
|
winDisplayDepthChangeDialog(winPrivScreenPtr pScreenPriv);
|
|
|
|
void
|
|
winDisplayAboutDialog(winPrivScreenPtr pScreenPriv);
|
|
|
|
/*
|
|
* winengine.c
|
|
*/
|
|
|
|
void
|
|
winDetectSupportedEngines(void);
|
|
|
|
Bool
|
|
winSetEngine(ScreenPtr pScreen);
|
|
|
|
Bool
|
|
winGetDDProcAddresses(void);
|
|
|
|
void
|
|
winReleaseDDProcAddresses(void);
|
|
|
|
/*
|
|
* winerror.c
|
|
*/
|
|
|
|
#ifdef DDXOSVERRORF
|
|
void
|
|
OsVendorVErrorF(const char *pszFormat, va_list va_args)
|
|
_X_ATTRIBUTE_PRINTF(1, 0);
|
|
#endif
|
|
|
|
void
|
|
winMessageBoxF(const char *pszError, UINT uType, ...)
|
|
_X_ATTRIBUTE_PRINTF(1, 3);
|
|
|
|
/*
|
|
* winglobals.c
|
|
*/
|
|
|
|
void
|
|
winInitializeGlobals(void);
|
|
|
|
/*
|
|
* winkeybd.c
|
|
*/
|
|
|
|
int
|
|
winTranslateKey(WPARAM wParam, LPARAM lParam);
|
|
|
|
int
|
|
winKeybdProc(DeviceIntPtr pDeviceInt, int iState);
|
|
|
|
void
|
|
winInitializeModeKeyStates(void);
|
|
|
|
void
|
|
winRestoreModeKeyStates(void);
|
|
|
|
Bool
|
|
winIsFakeCtrl_L(UINT message, WPARAM wParam, LPARAM lParam);
|
|
|
|
void
|
|
winKeybdReleaseKeys(void);
|
|
|
|
void
|
|
winSendKeyEvent(DWORD dwKey, Bool fDown);
|
|
|
|
BOOL winCheckKeyPressed(WPARAM wParam, LPARAM lParam);
|
|
|
|
void
|
|
winFixShiftKeys(int iScanCode);
|
|
|
|
/*
|
|
* winkeyhook.c
|
|
*/
|
|
|
|
Bool
|
|
winInstallKeyboardHookLL(void);
|
|
|
|
void
|
|
winRemoveKeyboardHookLL(void);
|
|
|
|
/*
|
|
* winmisc.c
|
|
*/
|
|
|
|
CARD8
|
|
winCountBits(DWORD dw);
|
|
|
|
Bool
|
|
winUpdateFBPointer(ScreenPtr pScreen, void *pbits);
|
|
|
|
/*
|
|
* winmouse.c
|
|
*/
|
|
|
|
int
|
|
winMouseProc(DeviceIntPtr pDeviceInt, int iState);
|
|
|
|
int
|
|
winMouseWheel(int *iTotalDeltaZ, int iDeltaZ, int iButtonUp, int iButtonDown);
|
|
|
|
void
|
|
winMouseButtonsSendEvent(int iEventType, int iButton);
|
|
|
|
int
|
|
|
|
winMouseButtonsHandle(ScreenPtr pScreen,
|
|
int iEventType, int iButton, WPARAM wParam);
|
|
|
|
void
|
|
winEnqueueMotion(int x, int y);
|
|
|
|
/*
|
|
* winscrinit.c
|
|
*/
|
|
|
|
Bool
|
|
winScreenInit(ScreenPtr pScreen, int argc, char **argv);
|
|
|
|
Bool
|
|
winFinishScreenInitFB(int i, ScreenPtr pScreen, int argc, char **argv);
|
|
|
|
/*
|
|
* winshaddd.c
|
|
*/
|
|
|
|
Bool
|
|
winSetEngineFunctionsShadowDD(ScreenPtr pScreen);
|
|
|
|
/*
|
|
* winshadddnl.c
|
|
*/
|
|
|
|
Bool
|
|
winSetEngineFunctionsShadowDDNL(ScreenPtr pScreen);
|
|
|
|
/*
|
|
* winshadgdi.c
|
|
*/
|
|
|
|
Bool
|
|
winSetEngineFunctionsShadowGDI(ScreenPtr pScreen);
|
|
|
|
/*
|
|
* winwakeup.c
|
|
*/
|
|
|
|
void
|
|
|
|
winWakeupHandler(ScreenPtr pScreen,
|
|
unsigned long ulResult, void *pReadmask);
|
|
|
|
/*
|
|
* winwindow.c
|
|
*/
|
|
|
|
Bool
|
|
winCreateWindowRootless(WindowPtr pWindow);
|
|
|
|
Bool
|
|
winDestroyWindowRootless(WindowPtr pWindow);
|
|
|
|
Bool
|
|
winPositionWindowRootless(WindowPtr pWindow, int x, int y);
|
|
|
|
Bool
|
|
winChangeWindowAttributesRootless(WindowPtr pWindow, unsigned long mask);
|
|
|
|
Bool
|
|
winUnmapWindowRootless(WindowPtr pWindow);
|
|
|
|
Bool
|
|
winMapWindowRootless(WindowPtr pWindow);
|
|
|
|
void
|
|
winSetShapeRootless(WindowPtr pWindow, int kind);
|
|
|
|
#ifdef XWIN_MULTIWINDOW
|
|
/*
|
|
* winmultiwindowshape.c
|
|
*/
|
|
|
|
void
|
|
winReshapeMultiWindow(WindowPtr pWin);
|
|
|
|
void
|
|
winSetShapeMultiWindow(WindowPtr pWindow, int kind);
|
|
|
|
void
|
|
winUpdateRgnMultiWindow(WindowPtr pWindow);
|
|
#endif
|
|
|
|
#ifdef XWIN_MULTIWINDOW
|
|
/*
|
|
* winmultiwindowwindow.c
|
|
*/
|
|
|
|
Bool
|
|
winCreateWindowMultiWindow(WindowPtr pWindow);
|
|
|
|
Bool
|
|
winDestroyWindowMultiWindow(WindowPtr pWindow);
|
|
|
|
Bool
|
|
winPositionWindowMultiWindow(WindowPtr pWindow, int x, int y);
|
|
|
|
Bool
|
|
winChangeWindowAttributesMultiWindow(WindowPtr pWindow, unsigned long mask);
|
|
|
|
Bool
|
|
winUnmapWindowMultiWindow(WindowPtr pWindow);
|
|
|
|
Bool
|
|
winMapWindowMultiWindow(WindowPtr pWindow);
|
|
|
|
void
|
|
winReparentWindowMultiWindow(WindowPtr pWin, WindowPtr pPriorParent);
|
|
|
|
void
|
|
winRestackWindowMultiWindow(WindowPtr pWin, WindowPtr pOldNextSib);
|
|
|
|
void
|
|
winReorderWindowsMultiWindow(void);
|
|
|
|
void
|
|
|
|
winResizeWindowMultiWindow(WindowPtr pWin, int x, int y, unsigned int w,
|
|
unsigned int h, WindowPtr pSib);
|
|
void
|
|
|
|
winMoveWindowMultiWindow(WindowPtr pWin, int x, int y,
|
|
WindowPtr pSib, VTKind kind);
|
|
|
|
void
|
|
|
|
winCopyWindowMultiWindow(WindowPtr pWin, DDXPointRec oldpt,
|
|
RegionPtr oldRegion);
|
|
|
|
XID
|
|
winGetWindowID(WindowPtr pWin);
|
|
|
|
int
|
|
winAdjustXWindow(WindowPtr pWin, HWND hwnd);
|
|
#endif
|
|
|
|
#ifdef XWIN_MULTIWINDOW
|
|
/*
|
|
* winmultiwindowwndproc.c
|
|
*/
|
|
|
|
LRESULT CALLBACK
|
|
winTopLevelWindowProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam);
|
|
#endif
|
|
|
|
/*
|
|
* wintrayicon.c
|
|
*/
|
|
|
|
void
|
|
winInitNotifyIcon(winPrivScreenPtr pScreenPriv);
|
|
|
|
void
|
|
winDeleteNotifyIcon(winPrivScreenPtr pScreenPriv);
|
|
|
|
LRESULT
|
|
winHandleIconMessage(HWND hwnd, UINT message,
|
|
WPARAM wParam, LPARAM lParam,
|
|
winPrivScreenPtr pScreenPriv);
|
|
|
|
/*
|
|
* winwndproc.c
|
|
*/
|
|
|
|
LRESULT CALLBACK
|
|
winWindowProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam);
|
|
|
|
#ifdef XWIN_MULTIWINDOWEXTWM
|
|
/*
|
|
* winwin32rootless.c
|
|
*/
|
|
|
|
Bool
|
|
|
|
winMWExtWMCreateFrame(RootlessWindowPtr pFrame, ScreenPtr pScreen,
|
|
int newX, int newY, RegionPtr pShape);
|
|
|
|
void
|
|
winMWExtWMDestroyFrame(RootlessFrameID wid);
|
|
|
|
void
|
|
|
|
winMWExtWMMoveFrame(RootlessFrameID wid, ScreenPtr pScreen, int newX, int newY);
|
|
|
|
void
|
|
|
|
winMWExtWMResizeFrame(RootlessFrameID wid, ScreenPtr pScreen,
|
|
int newX, int newY, unsigned int newW, unsigned int newH,
|
|
unsigned int gravity);
|
|
|
|
void
|
|
winMWExtWMRestackFrame(RootlessFrameID wid, RootlessFrameID nextWid);
|
|
|
|
void
|
|
winMWExtWMReshapeFrame(RootlessFrameID wid, RegionPtr pShape);
|
|
|
|
void
|
|
winMWExtWMUnmapFrame(RootlessFrameID wid);
|
|
|
|
void
|
|
|
|
winMWExtWMStartDrawing(RootlessFrameID wid, char **pixelData, int *bytesPerRow);
|
|
|
|
void
|
|
winMWExtWMStopDrawing(RootlessFrameID wid, Bool flush);
|
|
|
|
void
|
|
winMWExtWMUpdateRegion(RootlessFrameID wid, RegionPtr pDamage);
|
|
|
|
void
|
|
|
|
winMWExtWMDamageRects(RootlessFrameID wid, int count, const BoxRec * rects,
|
|
int shift_x, int shift_y);
|
|
|
|
void
|
|
winMWExtWMRootlessSwitchWindow(RootlessWindowPtr pFrame, WindowPtr oldWin);
|
|
|
|
void
|
|
|
|
winMWExtWMCopyBytes(unsigned int width, unsigned int height,
|
|
const void *src, unsigned int srcRowBytes,
|
|
void *dst, unsigned int dstRowBytes);
|
|
|
|
void
|
|
|
|
winMWExtWMCopyWindow(RootlessFrameID wid, int dstNrects,
|
|
const BoxRec * dstRects, int dx, int dy);
|
|
#endif
|
|
|
|
#ifdef XWIN_MULTIWINDOWEXTWM
|
|
/*
|
|
* winwin32rootlesswindow.c
|
|
*/
|
|
|
|
void
|
|
winMWExtWMReorderWindows(ScreenPtr pScreen);
|
|
|
|
void
|
|
winMWExtWMMoveXWindow(WindowPtr pWin, int x, int y);
|
|
|
|
void
|
|
winMWExtWMResizeXWindow(WindowPtr pWin, int w, int h);
|
|
|
|
void
|
|
winMWExtWMMoveResizeXWindow(WindowPtr pWin, int x, int y, int w, int h);
|
|
|
|
void
|
|
|
|
winMWExtWMUpdateWindowDecoration(win32RootlessWindowPtr pRLWinPriv,
|
|
winScreenInfoPtr pScreenInfo);
|
|
|
|
wBOOL CALLBACK winMWExtWMDecorateWindow(HWND hwnd, LPARAM lParam);
|
|
|
|
Bool
|
|
winIsInternalWMRunning(winScreenInfoPtr pScreenInfo);
|
|
|
|
void
|
|
winMWExtWMRestackWindows(ScreenPtr pScreen);
|
|
#endif
|
|
|
|
#ifdef XWIN_MULTIWINDOWEXTWM
|
|
/*
|
|
* winwin32rootlesswndproc.c
|
|
*/
|
|
|
|
LRESULT CALLBACK
|
|
winMWExtWMWindowProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam);
|
|
#endif
|
|
|
|
/*
|
|
* winwindowswm.c
|
|
*/
|
|
|
|
void
|
|
|
|
winWindowsWMSendEvent(int type, unsigned int mask, int which, int arg,
|
|
Window window, int x, int y, int w, int h);
|
|
|
|
void
|
|
winWindowsWMExtensionInit(void);
|
|
|
|
/*
|
|
* wincursor.c
|
|
*/
|
|
|
|
Bool
|
|
winInitCursor(ScreenPtr pScreen);
|
|
|
|
/*
|
|
* winprocarg.c
|
|
*/
|
|
void
|
|
winInitializeScreens(int maxscreens);
|
|
|
|
/*
|
|
* winrandr.c
|
|
*/
|
|
Bool
|
|
winRandRInit(ScreenPtr pScreen);
|
|
void
|
|
|
|
winDoRandRScreenSetSize(ScreenPtr pScreen,
|
|
CARD16 width,
|
|
CARD16 height, CARD32 mmWidth, CARD32 mmHeight);
|
|
|
|
/*
|
|
* winmsgwindow.c
|
|
*/
|
|
Bool
|
|
winCreateMsgWindowThread(void);
|
|
|
|
/*
|
|
* END DDX and DIX Function Prototypes
|
|
*/
|
|
|
|
#endif /* _WIN_H_ */
|