summaryrefslogtreecommitdiff
path: root/dix
diff options
context:
space:
mode:
authorPovilas Kanapickas <povilas@radix.lt>2021-05-30 13:26:39 +0300
committerPovilas Kanapickas <povilas@radix.lt>2021-05-30 13:26:39 +0300
commit7656a9c8dddbc57adfd4fd05f8e26b1845ac8738 (patch)
tree830397f7586ff0f2a15c79fd7cbe158d5fca95ff /dix
parent0bf4123fd3bc945d150884e6ea38bd2b81c0994b (diff)
dix: Implement internal gesture state handling
Diffstat (limited to 'dix')
-rw-r--r--dix/Makefile.am1
-rw-r--r--dix/devices.c26
-rw-r--r--dix/gestures.c57
-rw-r--r--dix/meson.build1
4 files changed, 85 insertions, 0 deletions
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 <povilas@radix.lt>
+ *
+ * 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 <dix-config.h>
+#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',