summarylogtreecommitdiffstats
path: root/14393-gestures-only.patch
blob: 8a9bcf85c2cb8b2546286d6384f3d604c95b8a78 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
diff --git a/conf/50-synaptics.conf b/conf/50-synaptics.conf
index aa50456..6c9c7d7 100644
--- a/conf/50-synaptics.conf
+++ b/conf/50-synaptics.conf
@@ -15,6 +15,34 @@ Section "InputClass"
 # enabled by default. See the following link for details:
 # http://who-t.blogspot.com/2010/11/how-to-ignore-configuration-errors.html
 #       MatchDevicePath "/dev/input/event*"
+
+# Uncomment as desired:
+#        Option "TapButton1" "1"
+#        Option "TapButton2" "3"
+#        Option "TapButton3" "2"
+#        Option "VertEdgeScroll" "on"
+#        Option "VertTwoFingerScroll" "on"
+#        Option "HorizEdgeScroll" "on"
+#        Option "HorizTwoFingerScroll" "on"
+#        Option "CircularScrolling" "on"
+#        Option "CircScrollTrigger" "2"
+#        Option "EmulateTwoFingerMinZ" "40"
+#        Option "EmulateTwoFingerMinW" "8"
+#        Option "CoastingSpeed" "0"
+
+# Uncomment as desired:
+#        Option "TapButton1" "1"
+#        Option "TapButton2" "3"
+#        Option "TapButton3" "2"
+#        Option "VertEdgeScroll" "on"
+#        Option "VertTwoFingerScroll" "on"
+#        Option "HorizEdgeScroll" "on"
+#        Option "HorizTwoFingerScroll" "on"
+#        Option "CircularScrolling" "on"
+#        Option "CircScrollTrigger" "2"
+#        Option "EmulateTwoFingerMinZ" "40"
+#        Option "EmulateTwoFingerMinW" "8"
+#        Option "CoastingSpeed" "0"
 EndSection
 
 Section "InputClass"
diff --git a/include/synaptics-properties.h b/include/synaptics-properties.h
index 32ab2e1..91d8160 100644
--- a/include/synaptics-properties.h
+++ b/include/synaptics-properties.h
@@ -158,4 +158,7 @@
 /* 32 Bit Integer, 2 values, horizontal hysteresis, vertical hysteresis */
 #define SYNAPTICS_PROP_NOISE_CANCELLATION "Synaptics Noise Cancellation"
 
+/* 8 bit (BOOL) */
+#define SYNAPTICS_PROP_GESTURES_ONLY "Synaptics Gestures Only"
+
 #endif                          /* _SYNAPTICS_PROPERTIES_H_ */
diff --git a/man/synaptics.man b/man/synaptics.man
index 76756be..71ef3ea 100644
--- a/man/synaptics.man
+++ b/man/synaptics.man
@@ -518,6 +518,15 @@ initialized if
 .B Option \*qHasSecondarySoftButtons\*q 
 is enabled and this option is set in the __xconfigfile__(__filemansuffix__).
 .
+.TP
+.BI "Option \*qGesturesOnly\*q \*q" boolean \*q
+Disable pointer motion events.
+
+The option is disabled by default. If set, the driver will report gesture and
+button events but no pointer events.
+Property: "Synaptics Gestures Only"
+.
+
 
 .SH CONFIGURATION DETAILS
 .SS Area handling
@@ -907,6 +916,10 @@ disables the button area.
 32 bit, 8 values, RBL, RBR, RBT, RBB, MBL, MBR, MBT, MBB.
 
 .TP 7
+.BI "Synaptics Gestures Only"
+8 bit (BOOL).
+
+.TP 7
 .BI "Synaptics Capabilities"
 This read-only property expresses the physical capability of the touchpad,
 most notably whether the touchpad hardware supports multi-finger tapping and
diff --git a/src/properties.c b/src/properties.c
index 718d054..6e376f9 100644
--- a/src/properties.c
+++ b/src/properties.c
@@ -95,6 +95,7 @@ Atom prop_secondary_softbutton_areas = 0;
 Atom prop_noise_cancellation = 0;
 Atom prop_product_id = 0;
 Atom prop_device_node = 0;
+Atom prop_gestures_only = 0;
 
 static Atom
 InitTypedAtom(DeviceIntPtr dev, char *name, Atom type, int format, int nvalues,
@@ -381,6 +382,10 @@ InitDeviceProperties(InputInfoPtr pInfo)
                                        SYNAPTICS_PROP_NOISE_CANCELLATION, 32, 2,
                                        values);
 
+    prop_gestures_only =
+        InitAtom(pInfo->dev, SYNAPTICS_PROP_GESTURES_ONLY, 8, 1,
+                &para->gestures_only);
+
     /* only init product_id property if we actually know them */
     if (priv->id_vendor || priv->id_product) {
         values[0] = priv->id_vendor;
@@ -814,6 +819,12 @@ SetProperty(DeviceIntPtr dev, Atom property, XIPropertyValuePtr prop,
         para->hyst_x = hyst[0];
         para->hyst_y = hyst[1];
     }
+    else if (property == prop_gestures_only) {
+        if (prop->size != 1 || prop->format != 8 || prop->type != XA_INTEGER)
+            return BadMatch;
+
+        para->gestures_only = *(BOOL *) prop->data;
+    }
     else if (property == prop_product_id || property == prop_device_node)
         return BadValue;        /* read-only */
     else { /* unknown property */
diff --git a/src/synaptics.c b/src/synaptics.c
index 2d49a12..168bdba 100644
--- a/src/synaptics.c
+++ b/src/synaptics.c
@@ -673,6 +673,7 @@ set_default_parameters(InputInfoPtr pInfo)
     pars->tap_move = xf86SetIntOption(opts, "MaxTapMove", tapMove);
     pars->tap_time_2 = xf86SetIntOption(opts, "MaxDoubleTapTime", 100);
     pars->click_time = xf86SetIntOption(opts, "ClickTime", 100);
+    pars->gestures_only = xf86SetBoolOption(opts, "GesturesOnly", pars->gestures_only);
     pars->clickpad = xf86SetBoolOption(opts, "ClickPad", pars->clickpad);       /* Probed */
     if (pars->clickpad)
         pars->has_secondary_buttons = xf86SetBoolOption(opts,
@@ -3207,7 +3208,7 @@ HandleState(InputInfoPtr pInfo, struct SynapticsHwState *hw, CARD32 now,
         buttons |= 1 << (priv->tap_button - 1);
 
     /* Post events */
-    if (finger >= FS_TOUCHED && (dx || dy) && !ignore_motion)
+    if (finger >= FS_TOUCHED && (dx || dy) && !ignore_motion && !para->gestures_only)
         xf86PostMotionEvent(pInfo->dev, 0, 0, 2, dx, dy);
 
     if (priv->mid_emu_state == MBE_LEFT_CLICK) {
diff --git a/src/synapticsstr.h b/src/synapticsstr.h
index 8917991..4181407 100644
--- a/src/synapticsstr.h
+++ b/src/synapticsstr.h
@@ -225,6 +225,7 @@ typedef struct _SynapticsParameters {
     int area_left_edge, area_right_edge, area_top_edge, area_bottom_edge;       /* area coordinates absolute */
     int softbutton_areas[4][4]; /* soft button area coordinates, 0 => right, 1 => middle , 2 => secondary right, 3 => secondary middle button */
     int hyst_x, hyst_y;         /* x and y width of hysteresis box */
+    Bool gestures_only;                /* do not post mouse input events */
 } SynapticsParameters;
 
 struct _SynapticsPrivateRec {