From 7656a9c8dddbc57adfd4fd05f8e26b1845ac8738 Mon Sep 17 00:00:00 2001 From: Povilas Kanapickas Date: Sun, 30 May 2021 13:26:39 +0300 Subject: dix: Implement internal gesture state handling --- dix/Makefile.am | 1 + dix/devices.c | 26 ++++++++++++++++++++++++++ dix/gestures.c | 57 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ dix/meson.build | 1 + 4 files changed, 85 insertions(+) create mode 100644 dix/gestures.c (limited to 'dix') diff --git a/dix/Makefile.am b/dix/Makefile.am index 652a08519..e1498cd56 100644 --- a/dix/Makefile.am +++ b/dix/Makefile.am @@ -23,6 +23,7 @@ libdix_la_SOURCES = \ extension.c \ gc.c \ getevents.c \ + gestures.c \ globals.c \ glyphcurs.c \ grabs.c \ diff --git a/dix/devices.c b/dix/devices.c index 85d899c20..29f3051aa 100644 --- a/dix/devices.c +++ b/dix/devices.c @@ -1670,6 +1670,32 @@ InitTouchClassDeviceStruct(DeviceIntPtr device, unsigned int max_touches, return FALSE; } +/** + * Sets up gesture capabilities on @device. + * + * @max_touches The maximum number of simultaneous touches, or 0 for unlimited. + */ +Bool +InitGestureClassDeviceStruct(DeviceIntPtr device, unsigned int max_touches) +{ + GestureClassPtr g; + + BUG_RETURN_VAL(device == NULL, FALSE); + BUG_RETURN_VAL(device->gesture != NULL, FALSE); + + g = calloc(1, sizeof(*g)); + if (!g) + return FALSE; + + g->sourceid = device->id; + g->max_touches = max_touches; + GestureInitGestureInfo(&g->gesture); + + device->gesture = g; + + return TRUE; +} + /* * Check if the given buffer contains elements between low (inclusive) and * high (inclusive) only. diff --git a/dix/gestures.c b/dix/gestures.c new file mode 100644 index 000000000..7e4057deb --- /dev/null +++ b/dix/gestures.c @@ -0,0 +1,57 @@ +/* + * Copyright © 2011 Collabra Ltd. + * Copyright © 2011 Red Hat, Inc. + * Copyright © 2020 Povilas Kanapickas + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice (including the next + * paragraph) shall be included in all copies or substantial portions of the + * Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + */ + +#ifdef HAVE_DIX_CONFIG_H +#include +#endif + +#include "inputstr.h" +#include "scrnintstr.h" +#include "dixgrabs.h" + +#include "eventstr.h" +#include "exevents.h" +#include "exglobals.h" +#include "inpututils.h" +#include "eventconvert.h" +#include "windowstr.h" +#include "mi.h" + +Bool +GestureInitGestureInfo(GestureInfoPtr gi) +{ + memset(gi, 0, sizeof(*gi)); + + gi->sprite.spriteTrace = calloc(32, sizeof(*gi->sprite.spriteTrace)); + if (!gi->sprite.spriteTrace) { + return FALSE; + } + gi->sprite.spriteTraceSize = 32; + gi->sprite.spriteTrace[0] = screenInfo.screens[0]->root; + gi->sprite.hot.pScreen = screenInfo.screens[0]; + gi->sprite.hotPhys.pScreen = screenInfo.screens[0]; + + return TRUE; +} diff --git a/dix/meson.build b/dix/meson.build index ddc5cc392..fbbcf8646 100644 --- a/dix/meson.build +++ b/dix/meson.build @@ -12,6 +12,7 @@ srcs_dix = [ 'eventconvert.c', 'extension.c', 'gc.c', + 'gestures.c', 'getevents.c', 'globals.c', 'glyphcurs.c', -- cgit v1.2.3