xserver

xserver with xephyr scale patch
git clone https://git.neptards.moe/u3shit/xserver.git
Log | Files | Refs | README | LICENSE

win.h (22746B)


      1 /*
      2  *Copyright (C) 1994-2000 The XFree86 Project, Inc. All Rights Reserved.
      3  *
      4  *Permission is hereby granted, free of charge, to any person obtaining
      5  * a copy of this software and associated documentation files (the
      6  *"Software"), to deal in the Software without restriction, including
      7  *without limitation the rights to use, copy, modify, merge, publish,
      8  *distribute, sublicense, and/or sell copies of the Software, and to
      9  *permit persons to whom the Software is furnished to do so, subject to
     10  *the following conditions:
     11  *
     12  *The above copyright notice and this permission notice shall be
     13  *included in all copies or substantial portions of the Software.
     14  *
     15  *THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
     16  *EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
     17  *MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
     18  *NONINFRINGEMENT. IN NO EVENT SHALL THE XFREE86 PROJECT BE LIABLE FOR
     19  *ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF
     20  *CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
     21  *WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
     22  *
     23  *Except as contained in this notice, the name of the XFree86 Project
     24  *shall not be used in advertising or otherwise to promote the sale, use
     25  *or other dealings in this Software without prior written authorization
     26  *from the XFree86 Project.
     27  *
     28  * Authors:	Dakshinamurthy Karra
     29  *		Suhaib M Siddiqi
     30  *		Peter Busch
     31  *		Harold L Hunt II
     32  *		Kensuke Matsuzaki
     33  */
     34 
     35 #ifndef _WIN_H_
     36 #define _WIN_H_
     37 
     38 #ifndef NO
     39 #define NO					0
     40 #endif
     41 #ifndef YES
     42 #define YES					1
     43 #endif
     44 
     45 /* We can handle WM_MOUSEHWHEEL even though _WIN32_WINNT < 0x0600 */
     46 #ifndef WM_MOUSEHWHEEL
     47 #define WM_MOUSEHWHEEL 0x020E
     48 #endif
     49 
     50 /* Turn debug messages on or off */
     51 #ifndef CYGDEBUG
     52 #define CYGDEBUG				NO
     53 #endif
     54 
     55 #define WIN_DEFAULT_BPP				0
     56 #define WIN_DEFAULT_WHITEPIXEL			255
     57 #define WIN_DEFAULT_BLACKPIXEL			0
     58 #define WIN_DEFAULT_LINEBIAS			0
     59 #define WIN_DEFAULT_E3B_TIME			50      /* milliseconds */
     60 #define WIN_DEFAULT_DPI				96
     61 #define WIN_DEFAULT_REFRESH			0
     62 #define WIN_DEFAULT_WIN_KILL			TRUE
     63 #define WIN_DEFAULT_UNIX_KILL			FALSE
     64 #define WIN_DEFAULT_CLIP_UPDATES_NBOXES		0
     65 #ifdef XWIN_EMULATEPSEUDO
     66 #define WIN_DEFAULT_EMULATE_PSEUDO		FALSE
     67 #endif
     68 #define WIN_DEFAULT_USER_GAVE_HEIGHT_AND_WIDTH	FALSE
     69 
     70 /*
     71  * Windows only supports 256 color palettes
     72  */
     73 #define WIN_NUM_PALETTE_ENTRIES			256
     74 
     75 /*
     76  * Number of times to call Restore in an attempt to restore the primary surface
     77  */
     78 #define WIN_REGAIN_SURFACE_RETRIES		1
     79 
     80 /*
     81  * Build a supported display depths mask by shifting one to the left
     82  * by the number of bits in the supported depth.
     83  */
     84 #define WIN_SUPPORTED_BPPS	( (1 << (32 - 1)) | (1 << (24 - 1)) \
     85 				| (1 << (16 - 1)) | (1 << (15 - 1)) \
     86 				| (1 << ( 8 - 1)))
     87 #define WIN_CHECK_DEPTH		YES
     88 
     89 /*
     90  * Timer IDs for WM_TIMER
     91  */
     92 #define WIN_E3B_TIMER_ID		1
     93 #define WIN_POLLING_MOUSE_TIMER_ID	2
     94 
     95 #define MOUSE_POLLING_INTERVAL		50
     96 
     97 #define WIN_E3B_OFF		-1
     98 #define WIN_E3B_DEFAULT         0
     99 
    100 #define WIN_FD_INVALID		-1
    101 
    102 #define WIN_SERVER_NONE		0x0L    /* 0 */
    103 #define WIN_SERVER_SHADOW_GDI	0x1L    /* 1 */
    104 #define WIN_SERVER_SHADOW_DDNL	0x4L    /* 4 */
    105 
    106 #define AltMapIndex		Mod1MapIndex
    107 #define NumLockMapIndex		Mod2MapIndex
    108 #define AltLangMapIndex		Mod3MapIndex
    109 #define KanaMapIndex		Mod4MapIndex
    110 #define ScrollLockMapIndex	Mod5MapIndex
    111 
    112 #define WIN_MOD_LALT		0x00000001
    113 #define WIN_MOD_RALT		0x00000002
    114 #define WIN_MOD_LCONTROL	0x00000004
    115 #define WIN_MOD_RCONTROL	0x00000008
    116 
    117 #define WIN_24BPP_MASK_RED	0x00FF0000
    118 #define WIN_24BPP_MASK_GREEN	0x0000FF00
    119 #define WIN_24BPP_MASK_BLUE	0x000000FF
    120 
    121 #define WIN_MAX_KEYS_PER_KEY	4
    122 
    123 #define NONAMELESSUNION
    124 
    125 #include <sys/types.h>
    126 #include <sys/stat.h>
    127 #include <stdio.h>
    128 
    129 #include <errno.h>
    130 #define HANDLE void *
    131 #include <pthread.h>
    132 #undef HANDLE
    133 
    134 #ifdef HAVE_MMAP
    135 #include <sys/mman.h>
    136 #ifndef MAP_FILE
    137 #define MAP_FILE 0
    138 #endif                          /* MAP_FILE */
    139 #endif                          /* HAVE_MMAP */
    140 
    141 #include <X11/X.h>
    142 #include <X11/Xproto.h>
    143 #include <X11/Xos.h>
    144 #include <X11/Xprotostr.h>
    145 #include "scrnintstr.h"
    146 #include "pixmapstr.h"
    147 #include "pixmap.h"
    148 #include "region.h"
    149 #include "gcstruct.h"
    150 #include "colormap.h"
    151 #include "colormapst.h"
    152 #include "miscstruct.h"
    153 #include "servermd.h"
    154 #include "windowstr.h"
    155 #include "mi.h"
    156 #include "micmap.h"
    157 #include "mifillarc.h"
    158 #include "mifpoly.h"
    159 #include "input.h"
    160 #include "mipointer.h"
    161 #include "X11/keysym.h"
    162 #include "micoord.h"
    163 #include "miline.h"
    164 #include "shadow.h"
    165 #include "fb.h"
    166 
    167 #include "mipict.h"
    168 #include "picturestr.h"
    169 
    170 #ifdef RANDR
    171 #include "randrstr.h"
    172 #endif
    173 
    174 /*
    175  * Windows headers
    176  */
    177 #include "winms.h"
    178 #include "winresource.h"
    179 
    180 /*
    181  * Define Windows constants
    182  */
    183 
    184 #define WM_TRAYICON		(WM_USER + 1000)
    185 #define WM_INIT_SYS_MENU	(WM_USER + 1001)
    186 #define WM_GIVEUP		(WM_USER + 1002)
    187 
    188 /* Local includes */
    189 #include "winwindow.h"
    190 #include "winmsg.h"
    191 
    192 /*
    193  * Debugging macros
    194  */
    195 
    196 #if CYGDEBUG
    197 #define DEBUG_MSG(str,...) \
    198 if (fDebugProcMsg) \
    199 { \
    200   char *pszTemp; \
    201   int iLength; \
    202   if (asprintf (&pszTemp, str, ##__VA_ARGS__) != -1) { \
    203     MessageBox (NULL, pszTemp, szFunctionName, MB_OK); \
    204     free (pszTemp); \
    205   } \
    206 }
    207 #else
    208 #define DEBUG_MSG(str,...)
    209 #endif
    210 
    211 #if CYGDEBUG
    212 #define DEBUG_FN_NAME(str) PTSTR szFunctionName = str
    213 #else
    214 #define DEBUG_FN_NAME(str)
    215 #endif
    216 
    217 #if CYGDEBUG || YES
    218 #define DEBUGVARS BOOL fDebugProcMsg = FALSE
    219 #else
    220 #define DEBUGVARS
    221 #endif
    222 
    223 #if CYGDEBUG || YES
    224 #define DEBUGPROC_MSG fDebugProcMsg = TRUE
    225 #else
    226 #define DEBUGPROC_MSG
    227 #endif
    228 
    229 #define PROFILEPOINT(point,thresh)\
    230 {\
    231 static unsigned int PROFPT##point = 0;\
    232 if (++PROFPT##point % thresh == 0)\
    233 ErrorF (#point ": PROFILEPOINT hit %u times\n", PROFPT##point);\
    234 }
    235 
    236 #define DEFINE_ATOM_HELPER(func,atom_name)			\
    237 static Atom func (void) {					\
    238     static int generation;					\
    239     static Atom atom;						\
    240     if (generation != serverGeneration) {			\
    241 	generation = serverGeneration;				\
    242 	atom = MakeAtom (atom_name, strlen (atom_name), TRUE);	\
    243     }								\
    244     return atom;						\
    245 }
    246 
    247 /*
    248  * Typedefs for engine dependent function pointers
    249  */
    250 
    251 typedef Bool (*winAllocateFBProcPtr) (ScreenPtr);
    252 
    253 typedef void (*winFreeFBProcPtr) (ScreenPtr);
    254 
    255 typedef void (*winShadowUpdateProcPtr) (ScreenPtr, shadowBufPtr);
    256 
    257 typedef Bool (*winInitScreenProcPtr) (ScreenPtr);
    258 
    259 typedef Bool (*winCloseScreenProcPtr) (ScreenPtr);
    260 
    261 typedef Bool (*winInitVisualsProcPtr) (ScreenPtr);
    262 
    263 typedef Bool (*winAdjustVideoModeProcPtr) (ScreenPtr);
    264 
    265 typedef Bool (*winCreateBoundingWindowProcPtr) (ScreenPtr);
    266 
    267 typedef Bool (*winFinishScreenInitProcPtr) (int, ScreenPtr, int, char **);
    268 
    269 typedef Bool (*winBltExposedRegionsProcPtr) (ScreenPtr);
    270 
    271 typedef Bool (*winBltExposedWindowRegionProcPtr) (ScreenPtr, WindowPtr);
    272 
    273 typedef Bool (*winActivateAppProcPtr) (ScreenPtr);
    274 
    275 typedef Bool (*winRedrawScreenProcPtr) (ScreenPtr pScreen);
    276 
    277 typedef Bool (*winRealizeInstalledPaletteProcPtr) (ScreenPtr pScreen);
    278 
    279 typedef Bool (*winInstallColormapProcPtr) (ColormapPtr pColormap);
    280 
    281 typedef Bool (*winStoreColorsProcPtr) (ColormapPtr pmap,
    282                                        int ndef, xColorItem * pdefs);
    283 
    284 typedef Bool (*winCreateColormapProcPtr) (ColormapPtr pColormap);
    285 
    286 typedef Bool (*winDestroyColormapProcPtr) (ColormapPtr pColormap);
    287 
    288 typedef Bool (*winCreatePrimarySurfaceProcPtr) (ScreenPtr);
    289 
    290 typedef Bool (*winReleasePrimarySurfaceProcPtr) (ScreenPtr);
    291 
    292 typedef Bool (*winCreateScreenResourcesProc) (ScreenPtr);
    293 
    294 /*
    295  * Pixmap privates
    296  */
    297 
    298 typedef struct {
    299     HBITMAP hBitmap;
    300     void *pbBits;
    301     BITMAPINFOHEADER *pbmih;
    302     BOOL owned;
    303 } winPrivPixmapRec, *winPrivPixmapPtr;
    304 
    305 /*
    306  * Colormap privates
    307  */
    308 
    309 typedef struct {
    310     HPALETTE hPalette;
    311     LPDIRECTDRAWPALETTE lpDDPalette;
    312     RGBQUAD rgbColors[WIN_NUM_PALETTE_ENTRIES];
    313     PALETTEENTRY peColors[WIN_NUM_PALETTE_ENTRIES];
    314 } winPrivCmapRec, *winPrivCmapPtr;
    315 
    316 
    317 /*
    318  * Windows Cursor handling.
    319  */
    320 
    321 typedef struct {
    322     /* from GetSystemMetrics */
    323     int sm_cx;
    324     int sm_cy;
    325 
    326     BOOL visible;
    327     HCURSOR handle;
    328     QueryBestSizeProcPtr QueryBestSize;
    329     miPointerSpriteFuncPtr spriteFuncs;
    330 } winCursorRec;
    331 
    332 /*
    333  * Resize modes
    334  */
    335 typedef enum {
    336     resizeDefault = -1,
    337     resizeNotAllowed,
    338     resizeWithScrollbars,
    339     resizeWithRandr
    340 } winResizeMode;
    341 
    342 /*
    343  * Screen information structure that we need before privates are available
    344  * in the server startup sequence.
    345  */
    346 
    347 typedef struct {
    348     ScreenPtr pScreen;
    349 
    350     /* Did the user specify a height and width? */
    351     Bool fUserGaveHeightAndWidth;
    352 
    353     DWORD dwScreen;
    354 
    355     int iMonitor;
    356     HMONITOR hMonitor;
    357     DWORD dwUserWidth;
    358     DWORD dwUserHeight;
    359     DWORD dwWidth;
    360     DWORD dwHeight;
    361     DWORD dwPaddedWidth;
    362 
    363     /* Did the user specify a screen position? */
    364     Bool fUserGavePosition;
    365     DWORD dwInitialX;
    366     DWORD dwInitialY;
    367 
    368     /*
    369      * dwStride is the number of whole pixels that occupy a scanline,
    370      * including those pixels that are not displayed.  This is basically
    371      * a rounding up of the width.
    372      */
    373     DWORD dwStride;
    374 
    375     /* Offset of the screen in the window when using scrollbars */
    376     DWORD dwXOffset;
    377     DWORD dwYOffset;
    378 
    379     DWORD dwBPP;
    380     DWORD dwDepth;
    381     DWORD dwRefreshRate;
    382     char *pfb;
    383     DWORD dwEngine;
    384     DWORD dwEnginePreferred;
    385     DWORD dwClipUpdatesNBoxes;
    386 #ifdef XWIN_EMULATEPSEUDO
    387     Bool fEmulatePseudo;
    388 #endif
    389     Bool fFullScreen;
    390     Bool fDecoration;
    391     Bool fRootless;
    392     Bool fMultiWindow;
    393     Bool fCompositeWM;
    394     Bool fMultiMonitorOverride;
    395     Bool fMultipleMonitors;
    396     Bool fLessPointer;
    397     winResizeMode iResizeMode;
    398     Bool fNoTrayIcon;
    399     int iE3BTimeout;
    400     /* Windows (Alt+F4) and Unix (Ctrl+Alt+Backspace) Killkey */
    401     Bool fUseWinKillKey;
    402     Bool fUseUnixKillKey;
    403     Bool fIgnoreInput;
    404 
    405     /* Did the user explicitly set this screen? */
    406     Bool fExplicitScreen;
    407 
    408     /* Icons for screen window */
    409     HICON hIcon;
    410     HICON hIconSm;
    411 } winScreenInfo, *winScreenInfoPtr;
    412 
    413 /*
    414  * Screen privates
    415  */
    416 
    417 typedef struct _winPrivScreenRec {
    418     winScreenInfoPtr pScreenInfo;
    419 
    420     Bool fEnabled;
    421     Bool fClosed;
    422     Bool fActive;
    423     Bool fBadDepth;
    424 
    425     int iDeltaZ;
    426     int iDeltaV;
    427 
    428     int iConnectedClients;
    429 
    430     CloseScreenProcPtr CloseScreen;
    431 
    432     DWORD dwRedMask;
    433     DWORD dwGreenMask;
    434     DWORD dwBlueMask;
    435     DWORD dwBitsPerRGB;
    436 
    437     DWORD dwModeKeyStates;
    438 
    439     /* Handle to icons that must be freed */
    440     HICON hiconNotifyIcon;
    441 
    442     /* Palette management */
    443     ColormapPtr pcmapInstalled;
    444 
    445     /* Pointer to the root visual so we only have to look it up once */
    446     VisualPtr pRootVisual;
    447 
    448     /* 3 button emulation variables */
    449     int iE3BCachedPress;
    450     Bool fE3BFakeButton2Sent;
    451 
    452     /* Privates used by shadow fb GDI engine */
    453     HBITMAP hbmpShadow;
    454     HDC hdcScreen;
    455     HDC hdcShadow;
    456     HWND hwndScreen;
    457     BITMAPINFOHEADER *pbmih;
    458 
    459     /* Privates used by shadow fb DirectDraw Nonlocking engine */
    460     LPDIRECTDRAW pdd;
    461     LPDIRECTDRAW4 pdd4;
    462     LPDIRECTDRAWSURFACE4 pddsShadow4;
    463     LPDIRECTDRAWSURFACE4 pddsPrimary4;
    464     LPDIRECTDRAWCLIPPER pddcPrimary;
    465     BOOL fRetryCreateSurface;
    466 
    467     /* Privates used by multi-window */
    468     pthread_t ptWMProc;
    469     pthread_t ptXMsgProc;
    470     void *pWMInfo;
    471     Bool fRootWindowShown;
    472 
    473     /* Privates used for any module running in a separate thread */
    474     pthread_mutex_t pmServerStarted;
    475     Bool fServerStarted;
    476 
    477     /* Engine specific functions */
    478     winAllocateFBProcPtr pwinAllocateFB;
    479     winFreeFBProcPtr pwinFreeFB;
    480     winShadowUpdateProcPtr pwinShadowUpdate;
    481     winInitScreenProcPtr pwinInitScreen;
    482     winCloseScreenProcPtr pwinCloseScreen;
    483     winInitVisualsProcPtr pwinInitVisuals;
    484     winAdjustVideoModeProcPtr pwinAdjustVideoMode;
    485     winCreateBoundingWindowProcPtr pwinCreateBoundingWindow;
    486     winFinishScreenInitProcPtr pwinFinishScreenInit;
    487     winBltExposedRegionsProcPtr pwinBltExposedRegions;
    488     winBltExposedWindowRegionProcPtr pwinBltExposedWindowRegion;
    489     winActivateAppProcPtr pwinActivateApp;
    490     winRedrawScreenProcPtr pwinRedrawScreen;
    491     winRealizeInstalledPaletteProcPtr pwinRealizeInstalledPalette;
    492     winInstallColormapProcPtr pwinInstallColormap;
    493     winStoreColorsProcPtr pwinStoreColors;
    494     winCreateColormapProcPtr pwinCreateColormap;
    495     winDestroyColormapProcPtr pwinDestroyColormap;
    496     winCreatePrimarySurfaceProcPtr pwinCreatePrimarySurface;
    497     winReleasePrimarySurfaceProcPtr pwinReleasePrimarySurface;
    498     winCreateScreenResourcesProc pwinCreateScreenResources;
    499 
    500     /* Window Procedures for Rootless mode */
    501     CreateWindowProcPtr CreateWindow;
    502     DestroyWindowProcPtr DestroyWindow;
    503     PositionWindowProcPtr PositionWindow;
    504     ChangeWindowAttributesProcPtr ChangeWindowAttributes;
    505     RealizeWindowProcPtr RealizeWindow;
    506     UnrealizeWindowProcPtr UnrealizeWindow;
    507     ValidateTreeProcPtr ValidateTree;
    508     PostValidateTreeProcPtr PostValidateTree;
    509     CopyWindowProcPtr CopyWindow;
    510     ClearToBackgroundProcPtr ClearToBackground;
    511     ClipNotifyProcPtr ClipNotify;
    512     RestackWindowProcPtr RestackWindow;
    513     ReparentWindowProcPtr ReparentWindow;
    514     ResizeWindowProcPtr ResizeWindow;
    515     MoveWindowProcPtr MoveWindow;
    516     SetShapeProcPtr SetShape;
    517     ModifyPixmapHeaderProcPtr ModifyPixmapHeader;
    518 
    519     winCursorRec cursor;
    520 
    521     Bool fNativeGlActive;
    522 } winPrivScreenRec;
    523 
    524 typedef struct {
    525     void *value;
    526     XID id;
    527 } WindowIDPairRec, *WindowIDPairPtr;
    528 
    529 /*
    530  * Extern declares for general global variables
    531  */
    532 
    533 #include "winglobals.h"
    534 
    535 extern winScreenInfo *g_ScreenInfo;
    536 extern miPointerScreenFuncRec g_winPointerCursorFuncs;
    537 extern DWORD g_dwEvents;
    538 
    539 #ifdef HAS_DEVWINDOWS
    540 extern int g_fdMessageQueue;
    541 #endif
    542 extern DevPrivateKeyRec g_iScreenPrivateKeyRec;
    543 
    544 #define g_iScreenPrivateKey  	(&g_iScreenPrivateKeyRec)
    545 extern DevPrivateKeyRec g_iCmapPrivateKeyRec;
    546 
    547 #define g_iCmapPrivateKey 	(&g_iCmapPrivateKeyRec)
    548 extern DevPrivateKeyRec g_iGCPrivateKeyRec;
    549 
    550 #define g_iGCPrivateKey 	(&g_iGCPrivateKeyRec)
    551 extern DevPrivateKeyRec g_iPixmapPrivateKeyRec;
    552 
    553 #define g_iPixmapPrivateKey 	(&g_iPixmapPrivateKeyRec)
    554 extern DevPrivateKeyRec g_iWindowPrivateKeyRec;
    555 
    556 #define g_iWindowPrivateKey 	(&g_iWindowPrivateKeyRec)
    557 
    558 extern unsigned long g_ulServerGeneration;
    559 extern DWORD g_dwEnginesSupported;
    560 extern HINSTANCE g_hInstance;
    561 extern int g_copyROP[];
    562 extern int g_patternROP[];
    563 extern const char *g_pszQueryHost;
    564 extern DeviceIntPtr g_pwinPointer;
    565 extern DeviceIntPtr g_pwinKeyboard;
    566 
    567 /*
    568  * Extern declares for dynamically loaded library function pointers
    569  */
    570 
    571 extern FARPROC g_fpDirectDrawCreate;
    572 extern FARPROC g_fpDirectDrawCreateClipper;
    573 
    574 /*
    575  * Screen privates macros
    576  */
    577 
    578 #define winGetScreenPriv(pScreen) ((winPrivScreenPtr) \
    579     dixLookupPrivate(&(pScreen)->devPrivates, g_iScreenPrivateKey))
    580 
    581 #define winSetScreenPriv(pScreen,v) \
    582     dixSetPrivate(&(pScreen)->devPrivates, g_iScreenPrivateKey, v)
    583 
    584 #define winScreenPriv(pScreen) \
    585 	winPrivScreenPtr pScreenPriv = winGetScreenPriv(pScreen)
    586 
    587 /*
    588  * Colormap privates macros
    589  */
    590 
    591 #define winGetCmapPriv(pCmap) ((winPrivCmapPtr) \
    592     dixLookupPrivate(&(pCmap)->devPrivates, g_iCmapPrivateKey))
    593 
    594 #define winSetCmapPriv(pCmap,v) \
    595     dixSetPrivate(&(pCmap)->devPrivates, g_iCmapPrivateKey, v)
    596 
    597 #define winCmapPriv(pCmap) \
    598 	winPrivCmapPtr pCmapPriv = winGetCmapPriv(pCmap)
    599 
    600 /*
    601  * GC privates macros
    602  */
    603 
    604 #define winGetGCPriv(pGC) ((winPrivGCPtr) \
    605     dixLookupPrivate(&(pGC)->devPrivates, g_iGCPrivateKey))
    606 
    607 #define winSetGCPriv(pGC,v) \
    608     dixSetPrivate(&(pGC)->devPrivates, g_iGCPrivateKey, v)
    609 
    610 #define winGCPriv(pGC) \
    611 	winPrivGCPtr pGCPriv = winGetGCPriv(pGC)
    612 
    613 /*
    614  * Pixmap privates macros
    615  */
    616 
    617 #define winGetPixmapPriv(pPixmap) ((winPrivPixmapPtr) \
    618     dixLookupPrivate(&(pPixmap)->devPrivates, g_iPixmapPrivateKey))
    619 
    620 #define winSetPixmapPriv(pPixmap,v) \
    621     dixLookupPrivate(&(pPixmap)->devPrivates, g_iPixmapPrivateKey, v)
    622 
    623 #define winPixmapPriv(pPixmap) \
    624 	winPrivPixmapPtr pPixmapPriv = winGetPixmapPriv(pPixmap)
    625 
    626 /*
    627  * Window privates macros
    628  */
    629 
    630 #define winGetWindowPriv(pWin) ((winPrivWinPtr) \
    631     dixLookupPrivate(&(pWin)->devPrivates, g_iWindowPrivateKey))
    632 
    633 #define winSetWindowPriv(pWin,v) \
    634     dixLookupPrivate(&(pWin)->devPrivates, g_iWindowPrivateKey, v)
    635 
    636 #define winWindowPriv(pWin) \
    637 	winPrivWinPtr pWinPriv = winGetWindowPriv(pWin)
    638 
    639 /*
    640  * wrapper macros
    641  */
    642 #define _WIN_WRAP(priv, real, mem, func) {\
    643     priv->mem = real->mem; \
    644     real->mem = func; \
    645 }
    646 
    647 #define _WIN_UNWRAP(priv, real, mem) {\
    648     real->mem = priv->mem; \
    649 }
    650 
    651 #define WIN_WRAP(mem, func) _WIN_WRAP(pScreenPriv, pScreen, mem, func)
    652 
    653 #define WIN_UNWRAP(mem) _WIN_UNWRAP(pScreenPriv, pScreen, mem)
    654 
    655 /*
    656  * BEGIN DDX and DIX Function Prototypes
    657  */
    658 
    659 /*
    660  * winallpriv.c
    661  */
    662 
    663 Bool
    664  winAllocatePrivates(ScreenPtr pScreen);
    665 
    666 Bool
    667  winInitCmapPrivates(ColormapPtr pCmap, int i);
    668 
    669 Bool
    670  winAllocateCmapPrivates(ColormapPtr pCmap);
    671 
    672 /*
    673  * winblock.c
    674  */
    675 
    676 void
    677 
    678 winBlockHandler(ScreenPtr pScreen, void *pTimeout);
    679 
    680 /*
    681  * winclipboardinit.c
    682  */
    683 
    684 Bool
    685  winInitClipboard(void);
    686 
    687 void
    688  winClipboardShutdown(void);
    689 
    690 /*
    691  * wincmap.c
    692  */
    693 
    694 void
    695  winSetColormapFunctions(ScreenPtr pScreen);
    696 
    697 Bool
    698  winCreateDefColormap(ScreenPtr pScreen);
    699 
    700 /*
    701  * wincreatewnd.c
    702  */
    703 
    704 Bool
    705  winCreateBoundingWindowFullScreen(ScreenPtr pScreen);
    706 
    707 Bool
    708  winCreateBoundingWindowWindowed(ScreenPtr pScreen);
    709 
    710 /*
    711  * windialogs.c
    712  */
    713 
    714 void
    715  winDisplayExitDialog(winPrivScreenPtr pScreenPriv);
    716 
    717 void
    718  winDisplayDepthChangeDialog(winPrivScreenPtr pScreenPriv);
    719 
    720 void
    721  winDisplayAboutDialog(winPrivScreenPtr pScreenPriv);
    722 
    723 /*
    724  * winengine.c
    725  */
    726 
    727 void
    728  winDetectSupportedEngines(void);
    729 
    730 Bool
    731  winSetEngine(ScreenPtr pScreen);
    732 
    733 Bool
    734  winGetDDProcAddresses(void);
    735 
    736 void
    737  winReleaseDDProcAddresses(void);
    738 
    739 /*
    740  * winerror.c
    741  */
    742 
    743 #ifdef DDXOSVERRORF
    744 void
    745 OsVendorVErrorF(const char *pszFormat, va_list va_args)
    746 _X_ATTRIBUTE_PRINTF(1, 0);
    747 #endif
    748 
    749 void
    750 winMessageBoxF(const char *pszError, UINT uType, ...)
    751 _X_ATTRIBUTE_PRINTF(1, 3);
    752 
    753 /*
    754  * winglobals.c
    755  */
    756 
    757 void
    758  winInitializeGlobals(void);
    759 
    760 /*
    761  * winkeybd.c
    762  */
    763 
    764 int
    765  winTranslateKey(WPARAM wParam, LPARAM lParam);
    766 
    767 int
    768  winKeybdProc(DeviceIntPtr pDeviceInt, int iState);
    769 
    770 void
    771  winInitializeModeKeyStates(void);
    772 
    773 void
    774  winRestoreModeKeyStates(void);
    775 
    776 Bool
    777  winIsFakeCtrl_L(UINT message, WPARAM wParam, LPARAM lParam);
    778 
    779 void
    780  winKeybdReleaseKeys(void);
    781 
    782 void
    783  winSendKeyEvent(DWORD dwKey, Bool fDown);
    784 
    785 BOOL winCheckKeyPressed(WPARAM wParam, LPARAM lParam);
    786 
    787 void
    788  winFixShiftKeys(int iScanCode);
    789 
    790 /*
    791  * winkeyhook.c
    792  */
    793 
    794 Bool
    795  winInstallKeyboardHookLL(void);
    796 
    797 void
    798  winRemoveKeyboardHookLL(void);
    799 
    800 /*
    801  * winmisc.c
    802  */
    803 
    804 CARD8
    805  winCountBits(DWORD dw);
    806 
    807 Bool
    808  winUpdateFBPointer(ScreenPtr pScreen, void *pbits);
    809 
    810 /*
    811  * winmouse.c
    812  */
    813 
    814 int
    815  winMouseProc(DeviceIntPtr pDeviceInt, int iState);
    816 
    817 int
    818  winMouseWheel(int *iTotalDeltaZ, int iDeltaZ, int iButtonUp, int iButtonDown);
    819 
    820 void
    821  winMouseButtonsSendEvent(int iEventType, int iButton);
    822 
    823 int
    824 
    825 winMouseButtonsHandle(ScreenPtr pScreen,
    826                       int iEventType, int iButton, WPARAM wParam);
    827 
    828 void
    829  winEnqueueMotion(int x, int y);
    830 
    831 /*
    832  * winscrinit.c
    833  */
    834 
    835 Bool
    836  winScreenInit(ScreenPtr pScreen, int argc, char **argv);
    837 
    838 Bool
    839  winFinishScreenInitFB(int i, ScreenPtr pScreen, int argc, char **argv);
    840 
    841 /*
    842  * winshadddnl.c
    843  */
    844 
    845 Bool
    846  winSetEngineFunctionsShadowDDNL(ScreenPtr pScreen);
    847 
    848 /*
    849  * winshadgdi.c
    850  */
    851 
    852 Bool
    853  winSetEngineFunctionsShadowGDI(ScreenPtr pScreen);
    854 
    855 /*
    856  * winwakeup.c
    857  */
    858 
    859 void
    860 winWakeupHandler(ScreenPtr pScreen, int iResult);
    861 
    862 /*
    863  * winwindow.c
    864  */
    865 
    866 Bool
    867  winCreateWindowRootless(WindowPtr pWindow);
    868 
    869 Bool
    870  winDestroyWindowRootless(WindowPtr pWindow);
    871 
    872 Bool
    873  winPositionWindowRootless(WindowPtr pWindow, int x, int y);
    874 
    875 Bool
    876  winChangeWindowAttributesRootless(WindowPtr pWindow, unsigned long mask);
    877 
    878 Bool
    879  winUnmapWindowRootless(WindowPtr pWindow);
    880 
    881 Bool
    882  winMapWindowRootless(WindowPtr pWindow);
    883 
    884 void
    885  winSetShapeRootless(WindowPtr pWindow, int kind);
    886 
    887 /*
    888  * winmultiwindowshape.c
    889  */
    890 
    891 void
    892  winReshapeMultiWindow(WindowPtr pWin);
    893 
    894 void
    895  winSetShapeMultiWindow(WindowPtr pWindow, int kind);
    896 
    897 void
    898  winUpdateRgnMultiWindow(WindowPtr pWindow);
    899 
    900 /*
    901  * winmultiwindowwindow.c
    902  */
    903 
    904 Bool
    905  winCreateWindowMultiWindow(WindowPtr pWindow);
    906 
    907 Bool
    908  winDestroyWindowMultiWindow(WindowPtr pWindow);
    909 
    910 Bool
    911  winPositionWindowMultiWindow(WindowPtr pWindow, int x, int y);
    912 
    913 Bool
    914  winChangeWindowAttributesMultiWindow(WindowPtr pWindow, unsigned long mask);
    915 
    916 Bool
    917  winUnmapWindowMultiWindow(WindowPtr pWindow);
    918 
    919 Bool
    920  winMapWindowMultiWindow(WindowPtr pWindow);
    921 
    922 void
    923  winReparentWindowMultiWindow(WindowPtr pWin, WindowPtr pPriorParent);
    924 
    925 void
    926  winRestackWindowMultiWindow(WindowPtr pWin, WindowPtr pOldNextSib);
    927 
    928 void
    929  winReorderWindowsMultiWindow(void);
    930 
    931 void
    932 
    933 winResizeWindowMultiWindow(WindowPtr pWin, int x, int y, unsigned int w,
    934                            unsigned int h, WindowPtr pSib);
    935 void
    936 
    937 winMoveWindowMultiWindow(WindowPtr pWin, int x, int y,
    938                          WindowPtr pSib, VTKind kind);
    939 
    940 void
    941 
    942 winCopyWindowMultiWindow(WindowPtr pWin, DDXPointRec oldpt,
    943                          RegionPtr oldRegion);
    944 
    945 PixmapPtr
    946 winCreatePixmapMultiwindow(ScreenPtr pScreen, int width, int height, int depth,
    947                            unsigned usage_hint);
    948 Bool
    949 winDestroyPixmapMultiwindow(PixmapPtr pPixmap);
    950 
    951 Bool
    952 winModifyPixmapHeaderMultiwindow(PixmapPtr pPixmap,
    953                                  int width,
    954                                  int height,
    955                                  int depth,
    956                                  int bitsPerPixel, int devKind, void *pPixData);
    957 
    958 XID
    959  winGetWindowID(WindowPtr pWin);
    960 
    961 int
    962  winAdjustXWindow(WindowPtr pWin, HWND hwnd);
    963 
    964 /*
    965  * winmultiwindowwndproc.c
    966  */
    967 
    968 LRESULT CALLBACK
    969 winTopLevelWindowProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam);
    970 
    971 /*
    972  * wintrayicon.c
    973  */
    974 
    975 void
    976  winInitNotifyIcon(winPrivScreenPtr pScreenPriv);
    977 
    978 void
    979  winDeleteNotifyIcon(winPrivScreenPtr pScreenPriv);
    980 
    981 LRESULT
    982 winHandleIconMessage(HWND hwnd, UINT message,
    983                      WPARAM wParam, LPARAM lParam,
    984                      winPrivScreenPtr pScreenPriv);
    985 
    986 /*
    987  * winwndproc.c
    988  */
    989 
    990 LRESULT CALLBACK
    991 winWindowProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam);
    992 
    993 /*
    994  * winwindowswm.c
    995  */
    996 
    997 void
    998 
    999 winWindowsWMSendEvent(int type, unsigned int mask, int which, int arg,
   1000                       Window window, int x, int y, int w, int h);
   1001 
   1002 void
   1003  winWindowsWMExtensionInit(void);
   1004 
   1005 /*
   1006  * wincursor.c
   1007  */
   1008 
   1009 Bool
   1010  winInitCursor(ScreenPtr pScreen);
   1011 
   1012 /*
   1013  * winprocarg.c
   1014  */
   1015 void
   1016  winInitializeScreens(int maxscreens);
   1017 
   1018 /*
   1019  * winrandr.c
   1020  */
   1021 Bool
   1022  winRandRInit(ScreenPtr pScreen);
   1023 void
   1024 
   1025 winDoRandRScreenSetSize(ScreenPtr pScreen,
   1026                         CARD16 width,
   1027                         CARD16 height, CARD32 mmWidth, CARD32 mmHeight);
   1028 
   1029 /*
   1030  * winmsgwindow.c
   1031  */
   1032 Bool
   1033 winCreateMsgWindowThread(void);
   1034 
   1035 /*
   1036  * winos.c
   1037  */
   1038 void
   1039 winOS(void);
   1040 
   1041 /*
   1042  * END DDX and DIX Function Prototypes
   1043  */
   1044 
   1045 #endif                          /* _WIN_H_ */