From e9340013c36f53f1cede7c284ca7d954aa1f13a0 Mon Sep 17 00:00:00 2001 From: "Enrico Weigelt, metux IT consult" Date: Fri, 9 Feb 2024 14:42:00 +0100 Subject: [PATCH] (!1359) dix: unexport non-public functions from dixgrabs.h and document prototypes * unexport functions from dixgrab.h, that aren't used by any driver/module. * add paremeter names to prototypes * add doxygen-style documentation for all the prototypes Signed-off-by: Enrico Weigelt, metux IT consult --- Xi/exevents.c | 2 +- Xi/ungrdevb.c | 2 +- Xi/ungrdevk.c | 2 +- Xi/xipassivegrab.c | 2 +- dix/devices.c | 2 +- dix/dixgrabs_priv.h | 171 ++++++++++++++++++++++++++++++++++++ dix/events.c | 8 +- dix/gestures.c | 2 +- dix/grabs.c | 2 +- dix/resource.c | 3 +- dix/touch.c | 2 +- hw/xfree86/sdksyms.sh | 1 - hw/xfree86/xkb/xkbPrivate.c | 1 - include/dixgrabs.h | 64 -------------- include/meson.build | 1 - test/input.c | 2 +- xkb/xkbActions.c | 2 +- 17 files changed, 189 insertions(+), 80 deletions(-) create mode 100644 dix/dixgrabs_priv.h delete mode 100644 include/dixgrabs.h diff --git a/Xi/exevents.c b/Xi/exevents.c index 2f02d7ed4..74edc0235 100644 --- a/Xi/exevents.c +++ b/Xi/exevents.c @@ -93,6 +93,7 @@ SOFTWARE. #include #include "dix/dix_priv.h" +#include "dix/dixgrabs_priv.h" #include "dix/eventconvert.h" #include "dix/exevents_priv.h" #include "dix/input_priv.h" @@ -105,7 +106,6 @@ SOFTWARE. #include "exglobals.h" #include "eventstr.h" #include "dixevents.h" /* DeliverFocusedEvent */ -#include "dixgrabs.h" /* CreateGrab() */ #include "scrnintstr.h" #include "listdev.h" /* for CopySwapXXXClass */ #include "xace.h" diff --git a/Xi/ungrdevb.c b/Xi/ungrdevb.c index 0f5c7913c..d9e9015d9 100644 --- a/Xi/ungrdevb.c +++ b/Xi/ungrdevb.c @@ -58,11 +58,11 @@ SOFTWARE. #include #include "dix/dix_priv.h" +#include "dix/dixgrabs_priv.h" #include "inputstr.h" /* DeviceIntPtr */ #include "windowstr.h" /* window structure */ #include "exglobals.h" -#include "dixgrabs.h" #include "ungrdevb.h" #define AllModifiersMask ( \ diff --git a/Xi/ungrdevk.c b/Xi/ungrdevk.c index 8aa797b4d..5550eb231 100644 --- a/Xi/ungrdevk.c +++ b/Xi/ungrdevk.c @@ -58,11 +58,11 @@ SOFTWARE. #include #include "dix/dix_priv.h" +#include "dix/dixgrabs_priv.h" #include "inputstr.h" /* DeviceIntPtr */ #include "windowstr.h" /* window structure */ #include "exglobals.h" -#include "dixgrabs.h" #include "xkbsrv.h" #include "xkbstr.h" #include "ungrdevk.h" diff --git a/Xi/xipassivegrab.c b/Xi/xipassivegrab.c index 78147d8dd..1fbe1c9fc 100644 --- a/Xi/xipassivegrab.c +++ b/Xi/xipassivegrab.c @@ -37,6 +37,7 @@ #include #include "dix/dix_priv.h" +#include "dix/dixgrabs_priv.h" #include "dix/exevents_priv.h" #include "inputstr.h" /* DeviceIntPtr */ @@ -44,7 +45,6 @@ #include "swaprep.h" #include "exglobals.h" /* BadDevice */ #include "xipassivegrab.h" -#include "dixgrabs.h" #include "misc.h" #include "inpututils.h" diff --git a/dix/devices.c b/dix/devices.c index f63c924b1..7dfef2802 100644 --- a/dix/devices.c +++ b/dix/devices.c @@ -58,6 +58,7 @@ SOFTWARE. #include #include "dix/dix_priv.h" +#include "dix/dixgrabs_priv.h" #include "dix/exevents_priv.h" #include "dix/input_priv.h" #include "dix/ptrveloc_priv.h" @@ -79,7 +80,6 @@ SOFTWARE. #include "dixevents.h" #include "mipointer.h" #include "eventstr.h" -#include "dixgrabs.h" #include "exglobals.h" #include "xiquerydevice.h" /* for SizeDeviceClasses */ #include "xiproperty.h" diff --git a/dix/dixgrabs_priv.h b/dix/dixgrabs_priv.h new file mode 100644 index 000000000..12e8824d2 --- /dev/null +++ b/dix/dixgrabs_priv.h @@ -0,0 +1,171 @@ +/* SPDX-License-Identifier: MIT OR X11 + * + * Copyright © 2024 Enrico Weigelt, metux IT consult + */ +#ifndef _XSERVER_DIXGRABS_PRIV_H_ +#define _XSERVER_DIXGRABS_PRIV_H_ + +#include + +#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 client _Index_ of 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(int client, + 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_ */ diff --git a/dix/events.c b/dix/events.c index 79d051604..69fa6064b 100644 --- a/dix/events.c +++ b/dix/events.c @@ -106,6 +106,12 @@ Equipment Corporation. #endif #include +#include +#include +#include +#include +#include +#include #include #include #include @@ -116,6 +122,7 @@ Equipment Corporation. #include "dix/cursor_priv.h" #include "dix/dix_priv.h" +#include "dix/dixgrabs_priv.h" #include "dix/input_priv.h" #include "dix/eventconvert.h" #include "dix/exevents_priv.h" @@ -139,7 +146,6 @@ Equipment Corporation. #include "exglobals.h" #include "extnsionst.h" #include "dixevents.h" -#include "dixgrabs.h" #include "dispatch.h" #include "geext.h" #include "geint.h" diff --git a/dix/gestures.c b/dix/gestures.c index cb3a2d609..ad40bbee1 100644 --- a/dix/gestures.c +++ b/dix/gestures.c @@ -28,12 +28,12 @@ #endif #include "dix/dix_priv.h" +#include "dix/dixgrabs_priv.h" #include "dix/eventconvert.h" #include "dix/input_priv.h" #include "inputstr.h" #include "scrnintstr.h" -#include "dixgrabs.h" #include "eventstr.h" #include "exevents.h" #include "exglobals.h" diff --git a/dix/grabs.c b/dix/grabs.c index 11e25364e..917d9aac7 100644 --- a/dix/grabs.c +++ b/dix/grabs.c @@ -55,6 +55,7 @@ SOFTWARE. #include "dix/cursor_priv.h" #include "dix/dix_priv.h" +#include "dix/dixgrabs_priv.h" #include "dix/exevents_priv.h" #include "os/auth.h" @@ -62,7 +63,6 @@ SOFTWARE. #include "windowstr.h" #include "inputstr.h" #include "cursorstr.h" -#include "dixgrabs.h" #include "xace.h" #include "exglobals.h" #include "inpututils.h" diff --git a/dix/resource.c b/dix/resource.c index ffaf1d29d..79eba1077 100644 --- a/dix/resource.c +++ b/dix/resource.c @@ -124,6 +124,7 @@ Equipment Corporation. #include #include "dix/colormap_priv.h" +#include "dix/dixgrabs_priv.h" #include "dix/gc_priv.h" #include "dix/registry_priv.h" #include "os/osdep.h" @@ -137,8 +138,6 @@ Equipment Corporation. #include "dixfont.h" #include "colormap.h" #include "inputstr.h" -#include "dixevents.h" -#include "dixgrabs.h" #include "cursor.h" #ifdef PANORAMIX #include "panoramiX.h" diff --git a/dix/touch.c b/dix/touch.c index be7677485..d5f17658a 100644 --- a/dix/touch.c +++ b/dix/touch.c @@ -29,13 +29,13 @@ #endif #include "dix/dix_priv.h" +#include "dix/dixgrabs_priv.h" #include "dix/eventconvert.h" #include "dix/exevents_priv.h" #include "dix/input_priv.h" #include "inputstr.h" #include "scrnintstr.h" -#include "dixgrabs.h" #include "eventstr.h" #include "exglobals.h" #include "inpututils.h" diff --git a/hw/xfree86/sdksyms.sh b/hw/xfree86/sdksyms.sh index dd27be400..4df88f63f 100755 --- a/hw/xfree86/sdksyms.sh +++ b/hw/xfree86/sdksyms.sh @@ -236,7 +236,6 @@ cat > sdksyms.c << EOF #define _FONTPROTO_H #include "dixfont.h" #include "dixfontstr.h" -#include "dixgrabs.h" #include "dixstruct.h" #include "exevents.h" #include "extension.h" diff --git a/hw/xfree86/xkb/xkbPrivate.c b/hw/xfree86/xkb/xkbPrivate.c index 506b60bb0..71bcab67a 100644 --- a/hw/xfree86/xkb/xkbPrivate.c +++ b/hw/xfree86/xkb/xkbPrivate.c @@ -12,7 +12,6 @@ #include "windowstr.h" #include -#include "dixgrabs.h" #include "os.h" #include "xf86.h" diff --git a/include/dixgrabs.h b/include/dixgrabs.h deleted file mode 100644 index 3a00b6419..000000000 --- a/include/dixgrabs.h +++ /dev/null @@ -1,64 +0,0 @@ -/************************************************************ - -Copyright 1996 by Thomas E. Dickey - - All Rights Reserved - -Permission to use, copy, modify, and distribute this software and its -documentation for any purpose and without fee is hereby granted, -provided that the above copyright notice appear in all copies and that -both that copyright notice and this permission notice appear in -supporting documentation, and that the name of the above listed -copyright holder(s) not be used in advertising or publicity pertaining -to distribution of the software without specific, written prior -permission. - -THE ABOVE LISTED COPYRIGHT HOLDER(S) DISCLAIM ALL WARRANTIES WITH REGARD -TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY -AND FITNESS, IN NO EVENT SHALL THE ABOVE LISTED COPYRIGHT HOLDER(S) BE -LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES -WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN -ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF -OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - -********************************************************/ - -#ifndef DIXGRABS_H -#define DIXGRABS_H 1 - -struct _GrabParameters; - -extern void PrintDeviceGrabInfo(DeviceIntPtr dev); -extern void UngrabAllDevices(Bool kill_client); - -extern GrabPtr AllocGrab(const GrabPtr src); -extern void FreeGrab(GrabPtr grab); - -extern GrabPtr CreateGrab(int /* client */ , - DeviceIntPtr /* device */ , - DeviceIntPtr /* modDevice */ , - WindowPtr /* window */ , - enum InputLevel /* grabtype */ , - GrabMask * /* mask */ , - struct _GrabParameters * /* param */ , - int /* eventType */ , - KeyCode /* keybut */ , - WindowPtr /* confineTo */ , - CursorPtr /* cursor */ ); - -extern _X_EXPORT int DeletePassiveGrab(void *value, - XID id); - -extern _X_EXPORT Bool GrabMatchesSecond(GrabPtr /* pFirstGrab */ , - GrabPtr /* pSecondGrab */ , - Bool /*ignoreDevice */ ); - -extern _X_EXPORT int AddPassiveGrabToList(ClientPtr /* client */ , - GrabPtr /* pGrab */ ); - -extern _X_EXPORT Bool DeletePassiveGrabFromList(GrabPtr /* pMinuendGrab */ ); - -extern Bool GrabIsPointerGrab(GrabPtr grab); -extern Bool GrabIsKeyboardGrab(GrabPtr grab); -extern Bool GrabIsGestureGrab(GrabPtr grab); -#endif /* DIXGRABS_H */ diff --git a/include/meson.build b/include/meson.build index 773857ad5..b6b1c82d6 100644 --- a/include/meson.build +++ b/include/meson.build @@ -453,7 +453,6 @@ if build_xorg 'dixevents.h', 'dixfont.h', 'dixfontstr.h', - 'dixgrabs.h', 'dixstruct.h', 'events.h', 'exevents.h', diff --git a/test/input.c b/test/input.c index dffde3555..08e4d1004 100644 --- a/test/input.c +++ b/test/input.c @@ -35,6 +35,7 @@ #include #include "dix/dix_priv.h" +#include "dix/dixgrabs_priv.h" #include "dix/eventconvert.h" #include "dix/exevents_priv.h" #include "dix/input_priv.h" @@ -44,7 +45,6 @@ #include "windowstr.h" #include "inputstr.h" #include "exglobals.h" -#include "dixgrabs.h" #include "eventstr.h" #include "inpututils.h" #include "mi.h" diff --git a/xkb/xkbActions.c b/xkb/xkbActions.c index bdfca425f..874a719cc 100644 --- a/xkb/xkbActions.c +++ b/xkb/xkbActions.c @@ -37,6 +37,7 @@ THE USE OR PERFORMANCE OF THIS SOFTWARE. #include "dix/cursor_priv.h" #include "dix/dix_priv.h" +#include "dix/dixgrabs_priv.h" #include "dix/input_priv.h" #include "xkb/xkbsrv_priv.h" @@ -47,7 +48,6 @@ THE USE OR PERFORMANCE OF THIS SOFTWARE. #include "mi.h" #include "mipointer.h" #include "inpututils.h" -#include "dixgrabs.h" #define EXTENSION_EVENT_BASE 64