259 lines
		
	
	
		
			7.7 KiB
		
	
	
	
		
			C
		
	
	
	
			
		
		
	
	
			259 lines
		
	
	
		
			7.7 KiB
		
	
	
	
		
			C
		
	
	
	
/* SPDX-License-Identifier: MIT OR X11
 | 
						|
 *
 | 
						|
 * Copyright © 2024 Enrico Weigelt, metux IT consult <info@metux.net>
 | 
						|
 */
 | 
						|
#ifndef _XSERVER_DIX_PRIV_H
 | 
						|
#define _XSERVER_DIX_PRIV_H
 | 
						|
 | 
						|
#include <X11/Xdefs.h>
 | 
						|
 | 
						|
/* This file holds global DIX settings to be used inside the Xserver,
 | 
						|
 *  but NOT supposed to be accessed directly by external server modules like
 | 
						|
 *  drivers or extension modules. Thus the definitions here are not part of the
 | 
						|
 *  Xserver's module API/ABI.
 | 
						|
 */
 | 
						|
 | 
						|
#include <X11/Xdefs.h>
 | 
						|
#include <X11/Xfuncproto.h>
 | 
						|
#include <X11/extensions/XI.h>
 | 
						|
 | 
						|
#include "include/callback.h"
 | 
						|
#include "include/cursor.h"
 | 
						|
#include "include/dix.h"
 | 
						|
#include "include/events.h"
 | 
						|
#include "include/gc.h"
 | 
						|
#include "include/input.h"
 | 
						|
#include "include/window.h"
 | 
						|
 | 
						|
/* server setting: maximum size for big requests */
 | 
						|
#define MAX_BIG_REQUEST_SIZE 4194303
 | 
						|
extern long maxBigRequestSize;
 | 
						|
 | 
						|
extern char dispatchExceptionAtReset;
 | 
						|
extern int terminateDelay;
 | 
						|
extern Bool touchEmulatePointer;
 | 
						|
 | 
						|
extern HWEventQueuePtr checkForInput[2];
 | 
						|
 | 
						|
 /* -retro mode */
 | 
						|
extern Bool party_like_its_1989;
 | 
						|
 | 
						|
static inline _X_NOTSAN Bool
 | 
						|
InputCheckPending(void)
 | 
						|
{
 | 
						|
    return (*checkForInput[0] != *checkForInput[1]);
 | 
						|
}
 | 
						|
 | 
						|
void ClearWorkQueue(void);
 | 
						|
void ProcessWorkQueue(void);
 | 
						|
void ProcessWorkQueueZombies(void);
 | 
						|
 | 
						|
void CloseDownClient(ClientPtr client);
 | 
						|
ClientPtr GetCurrentClient(void);
 | 
						|
void InitClient(ClientPtr client, int i, void *ospriv);
 | 
						|
 | 
						|
/* lookup builtin color by name */
 | 
						|
Bool dixLookupBuiltinColor(int screen,
 | 
						|
                           char *name,
 | 
						|
                           unsigned len,
 | 
						|
                           unsigned short *pred,
 | 
						|
                           unsigned short *pgreen,
 | 
						|
                           unsigned short *pblue);
 | 
						|
 | 
						|
void DeleteWindowFromAnySaveSet(WindowPtr pWin);
 | 
						|
 | 
						|
#define VALIDATE_DRAWABLE_AND_GC(drawID, pDraw, mode)                   \
 | 
						|
    do {                                                                \
 | 
						|
        int tmprc = dixLookupDrawable(&(pDraw), drawID, client, M_ANY, mode); \
 | 
						|
        if (tmprc != Success)                                           \
 | 
						|
            return tmprc;                                               \
 | 
						|
        tmprc = dixLookupGC(&(pGC), stuff->gc, client, DixUseAccess);   \
 | 
						|
        if (tmprc != Success)                                           \
 | 
						|
            return tmprc;                                               \
 | 
						|
        if ((pGC->depth != pDraw->depth) || (pGC->pScreen != pDraw->pScreen)) \
 | 
						|
            return BadMatch;                                            \
 | 
						|
        if (pGC->serialNumber != pDraw->serialNumber)                   \
 | 
						|
            ValidateGC(pDraw, pGC);                                     \
 | 
						|
    } while (0)
 | 
						|
 | 
						|
int dixLookupGC(GCPtr *result,
 | 
						|
                XID id,
 | 
						|
                ClientPtr client,
 | 
						|
                Mask access_mode);
 | 
						|
 | 
						|
int dixLookupClient(ClientPtr *result,
 | 
						|
                    XID id,
 | 
						|
                    ClientPtr client,
 | 
						|
                    Mask access_mode);
 | 
						|
 | 
						|
Bool CreateConnectionBlock(void);
 | 
						|
 | 
						|
void EnableLimitedSchedulingLatency(void);
 | 
						|
 | 
						|
void DisableLimitedSchedulingLatency(void);
 | 
						|
 | 
						|
int dix_main(int argc, char *argv[], char *envp[]);
 | 
						|
 | 
						|
void SetMaskForEvent(int deviceid, Mask mask, int event);
 | 
						|
 | 
						|
void EnqueueEvent(InternalEvent *ev, DeviceIntPtr device);
 | 
						|
 | 
						|
void PlayReleasedEvents(void);
 | 
						|
 | 
						|
void ActivatePointerGrab(DeviceIntPtr mouse,
 | 
						|
                         GrabPtr grab,
 | 
						|
                         TimeStamp time,
 | 
						|
                         Bool autoGrab);
 | 
						|
 | 
						|
void DeactivatePointerGrab(DeviceIntPtr mouse);
 | 
						|
 | 
						|
void ActivateKeyboardGrab(DeviceIntPtr keybd,
 | 
						|
                          GrabPtr grab,
 | 
						|
                          TimeStamp time,
 | 
						|
                          Bool passive);
 | 
						|
 | 
						|
void DeactivateKeyboardGrab(DeviceIntPtr keybd);
 | 
						|
 | 
						|
BOOL ActivateFocusInGrab(DeviceIntPtr dev, WindowPtr old, WindowPtr win);
 | 
						|
 | 
						|
void AllowSome(ClientPtr client,
 | 
						|
               TimeStamp time,
 | 
						|
               DeviceIntPtr thisDev,
 | 
						|
               int newState);
 | 
						|
 | 
						|
void ReleaseActiveGrabs(ClientPtr client);
 | 
						|
 | 
						|
GrabPtr CheckPassiveGrabsOnWindow(WindowPtr pWin,
 | 
						|
                                  DeviceIntPtr device,
 | 
						|
                                  InternalEvent *event,
 | 
						|
                                  BOOL checkCore,
 | 
						|
                                  BOOL activate);
 | 
						|
 | 
						|
int DeliverDeviceEvents(WindowPtr pWin,
 | 
						|
                        InternalEvent *event,
 | 
						|
                        GrabPtr grab,
 | 
						|
                        WindowPtr stopAt,
 | 
						|
                        DeviceIntPtr dev);
 | 
						|
 | 
						|
int DeliverOneGrabbedEvent(InternalEvent *event,
 | 
						|
                           DeviceIntPtr dev,
 | 
						|
                           enum InputLevel level);
 | 
						|
 | 
						|
void DeliverTouchEvents(DeviceIntPtr dev,
 | 
						|
                        TouchPointInfoPtr ti,
 | 
						|
                        InternalEvent *ev,
 | 
						|
                        XID resource);
 | 
						|
 | 
						|
Bool DeliverGestureEventToOwner(DeviceIntPtr dev,
 | 
						|
                                GestureInfoPtr gi,
 | 
						|
                                InternalEvent *ev);
 | 
						|
 | 
						|
void InitializeSprite(DeviceIntPtr pDev, WindowPtr pWin);
 | 
						|
void FreeSprite(DeviceIntPtr pDev);
 | 
						|
void UpdateSpriteForScreen(DeviceIntPtr pDev, ScreenPtr pScreen);
 | 
						|
 | 
						|
Bool CheckDeviceGrabs(DeviceIntPtr device,
 | 
						|
                      InternalEvent *event,
 | 
						|
                      WindowPtr ancestor);
 | 
						|
 | 
						|
void DeliverFocusedEvent(DeviceIntPtr keybd,
 | 
						|
                         InternalEvent *event,
 | 
						|
                         WindowPtr window);
 | 
						|
 | 
						|
int DeliverGrabbedEvent(InternalEvent *event,
 | 
						|
                        DeviceIntPtr thisDev,
 | 
						|
                        Bool deactivateGrab);
 | 
						|
 | 
						|
void FreezeThisEventIfNeededForSyncGrab(DeviceIntPtr thisDev,
 | 
						|
                                        InternalEvent *event);
 | 
						|
 | 
						|
void FixKeyState(DeviceEvent *event, DeviceIntPtr keybd);
 | 
						|
 | 
						|
void RecalculateDeliverableEvents(WindowPtr pWin);
 | 
						|
 | 
						|
void DoFocusEvents(DeviceIntPtr dev,
 | 
						|
                   WindowPtr fromWin,
 | 
						|
                   WindowPtr toWin,
 | 
						|
                   int mode);
 | 
						|
 | 
						|
int SetInputFocus(ClientPtr client,
 | 
						|
                  DeviceIntPtr dev,
 | 
						|
                  Window focusID,
 | 
						|
                  CARD8 revertTo,
 | 
						|
                  Time ctime,
 | 
						|
                  Bool followOK);
 | 
						|
 | 
						|
int GrabDevice(ClientPtr client,
 | 
						|
               DeviceIntPtr dev,
 | 
						|
               unsigned this_mode,
 | 
						|
               unsigned other_mode,
 | 
						|
               Window grabWindow,
 | 
						|
               unsigned ownerEvents,
 | 
						|
               Time ctime,
 | 
						|
               GrabMask *mask,
 | 
						|
               int grabtype,
 | 
						|
               Cursor curs,
 | 
						|
               Window confineToWin,
 | 
						|
               CARD8 *status);
 | 
						|
 | 
						|
void InitEvents(void);
 | 
						|
 | 
						|
void CloseDownEvents(void);
 | 
						|
 | 
						|
void DeleteWindowFromAnyEvents(WindowPtr pWin, Bool freeResources);
 | 
						|
 | 
						|
Mask EventMaskForClient(WindowPtr pWin, ClientPtr client);
 | 
						|
 | 
						|
Bool CheckMotion(DeviceEvent *ev, DeviceIntPtr pDev);
 | 
						|
 | 
						|
int SetClientPointer(ClientPtr client, DeviceIntPtr device);
 | 
						|
 | 
						|
Bool IsInterferingGrab(ClientPtr client, DeviceIntPtr dev, xEvent *events);
 | 
						|
 | 
						|
int XItoCoreType(int xi_type);
 | 
						|
 | 
						|
Bool DevHasCursor(DeviceIntPtr pDev);
 | 
						|
 | 
						|
Bool IsPointerEvent(InternalEvent *event);
 | 
						|
 | 
						|
Bool IsTouchEvent(InternalEvent *event);
 | 
						|
 | 
						|
Bool IsGestureEvent(InternalEvent *event);
 | 
						|
 | 
						|
Bool IsGestureBeginEvent(InternalEvent *event);
 | 
						|
 | 
						|
Bool IsGestureEndEvent(InternalEvent *event);
 | 
						|
 | 
						|
void CopyKeyClass(DeviceIntPtr device, DeviceIntPtr master);
 | 
						|
 | 
						|
int CorePointerProc(DeviceIntPtr dev, int what);
 | 
						|
 | 
						|
int CoreKeyboardProc(DeviceIntPtr dev, int what);
 | 
						|
 | 
						|
extern Bool whiteRoot;
 | 
						|
 | 
						|
extern volatile char isItTimeToYield;
 | 
						|
 | 
						|
/* bit values for dispatchException */
 | 
						|
#define DE_RESET     1
 | 
						|
#define DE_TERMINATE 2
 | 
						|
#define DE_PRIORITYCHANGE 4     /* set when a client's priority changes */
 | 
						|
 | 
						|
extern volatile char dispatchException;
 | 
						|
 | 
						|
extern int ScreenSaverBlanking;
 | 
						|
extern int ScreenSaverAllowExposures;
 | 
						|
extern int defaultScreenSaverBlanking;
 | 
						|
extern int defaultScreenSaverAllowExposures;
 | 
						|
extern const char *display;
 | 
						|
extern int displayfd;
 | 
						|
extern Bool explicit_display;
 | 
						|
 | 
						|
extern Bool disableBackingStore;
 | 
						|
extern Bool enableBackingStore;
 | 
						|
 | 
						|
/* in generated BuiltInAtoms.c */
 | 
						|
void MakePredeclaredAtoms(void);
 | 
						|
 | 
						|
#endif /* _XSERVER_DIX_PRIV_H */
 |