summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Makefile2
-rw-r--r--src/gestures.h1
-rw-r--r--src/multitouch.c68
3 files changed, 70 insertions, 1 deletions
diff --git a/Makefile b/Makefile
index 1ce9467..cc2ba9b 100644
--- a/Makefile
+++ b/Makefile
@@ -29,7 +29,7 @@ DLIB = usr/lib/xorg/modules/input
29DFDI = usr/share/hal/fdi/policy/20thirdparty 29DFDI = usr/share/hal/fdi/policy/20thirdparty
30 30
31INCLUDE = -I. -I/usr/include/xorg -I/usr/include/pixman-1 31INCLUDE = -I. -I/usr/include/xorg -I/usr/include/pixman-1
32OPTS = -O3 32OPTS = -O3 -fPIC
33 33
34.PHONY: all clean 34.PHONY: all clean
35.PRECIOUS: obj/%.o 35.PRECIOUS: obj/%.o
diff --git a/src/gestures.h b/src/gestures.h
index de029b7..5f3923e 100644
--- a/src/gestures.h
+++ b/src/gestures.h
@@ -9,6 +9,7 @@
9#define GS_MOVE 1 9#define GS_MOVE 1
10#define GS_VSCROLL 2 10#define GS_VSCROLL 2
11#define GS_HSCROLL 3 11#define GS_HSCROLL 3
12#define SYN_MAX_BUTTONS 12 /* Max number of mouse buttons */
12 13
13//////////////////////////////////////////////////////// 14////////////////////////////////////////////////////////
14 15
diff --git a/src/multitouch.c b/src/multitouch.c
index 4fb1e4b..e2309bd 100644
--- a/src/multitouch.c
+++ b/src/multitouch.c
@@ -21,6 +21,12 @@
21 21
22#include "gestures.h" 22#include "gestures.h"
23 23
24#if GET_ABI_MAJOR(ABI_XINPUT_VERSION) >= 7
25#include <X11/Xatom.h>
26#include <xserver-properties.h>
27#endif
28
29
24//////////////////////////////////////////////////////////////////////////// 30////////////////////////////////////////////////////////////////////////////
25 31
26static void pointer_control(DeviceIntPtr dev, PtrCtrl *ctrl) 32static void pointer_control(DeviceIntPtr dev, PtrCtrl *ctrl)
@@ -41,10 +47,60 @@ static int pointer_property(DeviceIntPtr dev,
41 47
42//////////////////////////////////////////////////////////////////////////// 48////////////////////////////////////////////////////////////////////////////
43 49
50
51
52#if GET_ABI_MAJOR(ABI_XINPUT_VERSION) >= 7
53static void InitAxesLabels(Atom *labels, int nlabels)
54{
55 memset(labels, 0, nlabels * sizeof(Atom));
56 switch(nlabels)
57 {
58 default:
59 case 2:
60 labels[1] = XIGetKnownProperty(AXIS_LABEL_PROP_REL_Y);
61 case 1:
62 labels[0] = XIGetKnownProperty(AXIS_LABEL_PROP_REL_X);
63 break;
64 }
65}
66
67static void InitButtonLabels(Atom *labels, int nlabels)
68{
69 memset(labels, 0, nlabels * sizeof(Atom));
70 switch(nlabels)
71 {
72 default:
73 case 7:
74 labels[6] = XIGetKnownProperty(BTN_LABEL_PROP_BTN_HWHEEL_RIGHT);
75 case 6:
76 labels[5] = XIGetKnownProperty(BTN_LABEL_PROP_BTN_HWHEEL_LEFT);
77 case 5:
78 labels[4] = XIGetKnownProperty(BTN_LABEL_PROP_BTN_WHEEL_DOWN);
79 case 4:
80 labels[3] = XIGetKnownProperty(BTN_LABEL_PROP_BTN_WHEEL_UP);
81 case 3:
82 labels[2] = XIGetKnownProperty(BTN_LABEL_PROP_BTN_RIGHT);
83 case 2:
84 labels[1] = XIGetKnownProperty(BTN_LABEL_PROP_BTN_MIDDLE);
85 case 1:
86 labels[0] = XIGetKnownProperty(BTN_LABEL_PROP_BTN_LEFT);
87 break;
88 }
89}
90#endif
91
44static int device_init(DeviceIntPtr dev, LocalDevicePtr local) 92static int device_init(DeviceIntPtr dev, LocalDevicePtr local)
45{ 93{
46 struct MTouch *mt = local->private; 94 struct MTouch *mt = local->private;
47 unsigned char btmap[DIM_BUTTON + 1]={0,1,2,3}; 95 unsigned char btmap[DIM_BUTTON + 1]={0,1,2,3};
96#if GET_ABI_MAJOR(ABI_XINPUT_VERSION) >= 7
97 Atom btn_labels[SYN_MAX_BUTTONS] = { 0 };
98 Atom axes_labels[2] = { 0 };
99
100 InitAxesLabels(axes_labels, 2);
101 InitButtonLabels(btn_labels, SYN_MAX_BUTTONS);
102#endif
103
48 104
49 local->fd = xf86OpenSerial(local->options); 105 local->fd = xf86OpenSerial(local->options);
50 if (local->fd < 0) { 106 if (local->fd < 0) {
@@ -70,16 +126,28 @@ static int device_init(DeviceIntPtr dev, LocalDevicePtr local)
70 pointer_control, 126 pointer_control,
71 GetMotionHistorySize(), 127 GetMotionHistorySize(),
72 2); 128 2);
129#elif GET_ABI_MAJOR(ABI_XINPUT_VERSION) == 7
130 InitPointerDeviceStruct((DevicePtr)dev,
131 btmap, DIM_BUTTON, btn_labels,
132 pointer_control,
133 GetMotionHistorySize(),
134 2, axes_labels);
73#else 135#else
74#error "Unsupported ABI_XINPUT_VERSION" 136#error "Unsupported ABI_XINPUT_VERSION"
75#endif 137#endif
76 138
77 xf86InitValuatorAxisStruct(dev, 0, 139 xf86InitValuatorAxisStruct(dev, 0,
140#if GET_ABI_MAJOR(ABI_XINPUT_VERSION) >= 7
141 axes_labels[0],
142#endif
78 mt->caps.abs_position_x.minimum, 143 mt->caps.abs_position_x.minimum,
79 mt->caps.abs_position_x.maximum, 144 mt->caps.abs_position_x.maximum,
80 1, 0, 1); 145 1, 0, 1);
81 xf86InitValuatorDefaults(dev, 0); 146 xf86InitValuatorDefaults(dev, 0);
82 xf86InitValuatorAxisStruct(dev, 1, 147 xf86InitValuatorAxisStruct(dev, 1,
148#if GET_ABI_MAJOR(ABI_XINPUT_VERSION) >= 7
149 axes_labels[1],
150#endif
83 mt->caps.abs_position_y.minimum, 151 mt->caps.abs_position_y.minimum,
84 mt->caps.abs_position_y.maximum, 152 mt->caps.abs_position_y.maximum,
85 1, 0, 1); 153 1, 0, 1);