diff --git a/include/synaptics-properties.h b/include/synaptics-properties.h index 0f79b64..d74dc2e 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 4f87b01..1b00e42 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 @@ -905,6 +914,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, diff --git a/src/properties.c b/src/properties.c index c776e6c..05c3c2b 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, @@ -382,6 +383,10 @@ InitDeviceProperties(InputInfoPtr pInfo) SYNAPTICS_PROP_NOISE_CANCELLATION, 32, 2, values); + prop_gestures_only = + InitAtom(pInfo->dev, SYNAPTICS_PROP_GESTURES_ONLY, 8, 1, + ¶->gestures_only); + /* only init product_id property if we actually know them */ if (priv->id_vendor || priv->id_product) { values[0] = priv->id_vendor; @@ -815,6 +820,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 1df1ca7..603c752 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", 180); 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, @@ -3120,7 +3121,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 33524e5..b23ec3c 100644 --- a/src/synapticsstr.h +++ b/src/synapticsstr.h @@ -229,6 +229,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 */ int maxDeltaMM; /* maximum delta movement (vector length) in mm */ } SynapticsParameters;