xserver/dix/dix_priv.h

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 */