172 lines
5.3 KiB
C
172 lines
5.3 KiB
C
/* SPDX-License-Identifier: MIT OR X11
|
|
*
|
|
* Copyright © 2024 Enrico Weigelt, metux IT consult <info@metux.net>
|
|
*/
|
|
#ifndef _XSERVER_DIXGRABS_PRIV_H_
|
|
#define _XSERVER_DIXGRABS_PRIV_H_
|
|
|
|
#include <X11/extensions/XIproto.h>
|
|
|
|
#include "misc.h"
|
|
#include "window.h"
|
|
#include "input.h"
|
|
#include "cursor.h"
|
|
|
|
struct _GrabParameters;
|
|
|
|
/**
|
|
* @brief Print current device grab information for specific device
|
|
*
|
|
* Walks through all active grabs and dumps them into the Xserver's error log.
|
|
* This is usually for debugging and troubleshooting. Will also be called by
|
|
* UngrabAllDevices().
|
|
*
|
|
* @param dev the device to act on
|
|
*/
|
|
void PrintDeviceGrabInfo(DeviceIntPtr dev);
|
|
|
|
/**
|
|
* @brief Forcefully remove _all_ device grabs
|
|
*
|
|
* Forcefully remove all device grabs on all devices. Optionally kill the
|
|
* clients holding a grab
|
|
*
|
|
* @param kill_client TRUE if clients holding a grab should be killed
|
|
*/
|
|
void UngrabAllDevices(Bool kill_client);
|
|
|
|
/**
|
|
* @brief Allocate new grab, optionally copy from existing
|
|
*
|
|
* Allocate a new grab structure. If src is non-null, copy parameters from
|
|
* the existing grab.
|
|
*
|
|
* Returns NULL in case of OOM or when src grab is given, but copy failed.
|
|
*
|
|
* @param src optional grab to copy from (NULL = don't copy)
|
|
* @return pointer to new grab. Must be freed via ::FreeGrab().
|
|
*/
|
|
GrabPtr AllocGrab(const GrabPtr src);
|
|
|
|
/**
|
|
* @brief Free a grab
|
|
*
|
|
* Free a grab (that had been allocated by ::AllocGrab()). If the grab has
|
|
* a cursor, this will also be unref'ed / free'd.
|
|
*
|
|
* @param grab pointer to the grab to be freed. Tolerates NULL.
|
|
*/
|
|
void FreeGrab(GrabPtr grab);
|
|
|
|
/**
|
|
* @brief create a new grab for given client
|
|
*
|
|
* Create a new grab for given client, with given parameters.
|
|
* Returns NULL on OOM.
|
|
*
|
|
* @param pClient ClientPtr to the client who will hold the grab
|
|
* @param device Device that's being grabbed
|
|
* @param modDevice Device whose modifiers are used (NULL = use core keyboard)
|
|
* @param window the window getting the events
|
|
* @param grabtype type of grab (see ::"enum InputLevel")
|
|
* @param mask mask for fields used from param
|
|
* @param param pointer to struct holding additional parameters
|
|
* @param eventType type of event to grab on (eg. DeviceButtonPress)
|
|
* @param keyCode KeyCode of key or button to grab
|
|
* @param confineTo window to restrict device into (may be NULL)
|
|
* @param cursor cursor to be used while grabbed (may be NULL)
|
|
* @return newly created grab. Must be freed by ::FreeGrab()
|
|
*/
|
|
GrabPtr CreateGrab(ClientPtr pClient,
|
|
DeviceIntPtr device,
|
|
DeviceIntPtr modDevice,
|
|
WindowPtr window,
|
|
enum InputLevel grabtype,
|
|
GrabMask *mask,
|
|
struct _GrabParameters *param,
|
|
int eventType,
|
|
KeyCode keycode,
|
|
WindowPtr confineTo,
|
|
CursorPtr cursor);
|
|
|
|
/**
|
|
* @brief check whether it is a pointer grab
|
|
*
|
|
* @param grab pointer to the grab structure to check
|
|
* @return TRUE if grabbed a pointer
|
|
*/
|
|
Bool GrabIsPointerGrab(GrabPtr grab);
|
|
|
|
/**
|
|
* @brief check whether it is a keyboard grab
|
|
*
|
|
* @param grab pointer to the grab structure to check
|
|
* @return TRUE if grabbed a keyboard
|
|
*/
|
|
Bool GrabIsKeyboardGrab(GrabPtr grab);
|
|
|
|
/**
|
|
* @brief check whether it is a gesture grab
|
|
*
|
|
* @param grab pointer to the grab structure to check
|
|
* @return TRUE if grabbed a gesture
|
|
*/
|
|
Bool GrabIsGestureGrab(GrabPtr grab);
|
|
|
|
/**
|
|
* @brief destructor for X11_RESTYPE_PASSIVEGRAB resource type
|
|
*
|
|
* Destructor for the X11_RESTYPE_PASSIVEGRAB resource type.
|
|
* Should not be used anywhere else
|
|
*
|
|
* @param value pointer to the resource data object
|
|
* @param XID the X11 ID of the resource object
|
|
* @return result code (always Success)
|
|
*/
|
|
int DeletePassiveGrab(void *value, XID id);
|
|
|
|
/*
|
|
* @brief compare to grabs
|
|
*
|
|
* Check whether two grabs match each other: grabbing the same events
|
|
* and (optional) grabbing on the same device.
|
|
*
|
|
* @param pFirstGrab first grab to compare
|
|
* @param pSecondGrab second grab to compare
|
|
* @param ignoreDevice TRUE if devices don't need to match
|
|
* @return TRUE if both grabs are having the same claims
|
|
*/
|
|
Bool GrabMatchesSecond(GrabPtr pFirstGrab,
|
|
GrabPtr pSecondGrab,
|
|
Bool ignoreDevice);
|
|
|
|
/**
|
|
* @brief add passive grab to a client
|
|
*
|
|
* Prepend a grab to the clients's list of passive grabs.
|
|
* Previously existing matching ones are deleted.
|
|
* On conflict with another client's grabs, return BadAccess.
|
|
*
|
|
* @param client pointer to the client the new grab is added to
|
|
* @param pGrab pointer to the grab to be added.
|
|
* @return X11 error code: BadAccess on conflict, otherwise Success
|
|
*/
|
|
int AddPassiveGrabToList(ClientPtr client, GrabPtr pGrab);
|
|
|
|
/**
|
|
* @brief delete grab claims from a window's passive grabs list
|
|
*
|
|
* Delete the items affected by given grab from the currently existing
|
|
* passive grabs on a window. This walk through list of passive grabs
|
|
* of the associated window and delete the claims matching this one's.
|
|
*
|
|
* The grab structure passed in here is just used as a vehicle for
|
|
* specifying which claims should be deleted (on which window).
|
|
*
|
|
* @param pMinuedGrab GrabRec structure specifying which claims to delete
|
|
* @return TRUE if succeeded (FALSE usually indicated allocation failure)
|
|
*/
|
|
Bool DeletePassiveGrabFromList(GrabPtr pMinuendGrab);
|
|
|
|
#endif /* _XSERVER_DIXGRABS_PRIV_H_ */
|