summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPeter Hutterer <peter.hutterer@who-t.net>2012-03-13 16:08:12 +1000
committerPeter Hutterer <peter.hutterer@who-t.net>2012-03-14 08:47:06 +1000
commitfee18d8567efd2e5abf6b29eb1ae9ee0e3858013 (patch)
tree90c1b8cfca6e272914439c4fdc22687e38965ed9
parentc546779b32d8be23475b3b062e3ebc9235365c0d (diff)
Soft buttons are only available on clickpad devices, disable them otherwise.
If the clickpad support is runtime enabled/disabled, the property appears/disappears accordingly. Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net> Reviewed-by: Chase Douglas <chase.douglas@canonical.com>
-rw-r--r--man/synaptics.man2
-rw-r--r--src/properties.c40
-rw-r--r--src/synaptics.c3
3 files changed, 36 insertions, 9 deletions
diff --git a/man/synaptics.man b/man/synaptics.man
index aaec35f..23862e3 100644
--- a/man/synaptics.man
+++ b/man/synaptics.man
@@ -520,6 +520,7 @@ the total height of the touchpad. Property: "Synaptics Area"
.
.TP
.BI "Option \*qSoftButtonAreas\*q \*q" "RBL RBR RBT RBB MBL MBR MBT MBB" \*q
+This option is only available on ClickPad devices.
Enable soft button click area support on ClickPad devices. The first four
parameters define the area of the right button, and the second four parameters
define the area of the middle button. The areas are defined by the left, right,
@@ -942,6 +943,7 @@ default.
.TP 7
.BI "Synaptics Soft Button Areas"
+This property is only available on ClickPad devices.
The Right and middle soft button areas are used to support right and middle
click actions on a ClickPad device. Providing 0 for all values of a given button
disables the button area.
diff --git a/src/properties.c b/src/properties.c
index 5cd3088..783b516 100644
--- a/src/properties.c
+++ b/src/properties.c
@@ -151,6 +151,24 @@ InitFloatAtom(DeviceIntPtr dev, char *name, int nvalues, float *values)
return atom;
}
+static void
+InitSoftButtonProperty(InputInfoPtr pInfo)
+{
+ SynapticsPrivate *priv = (SynapticsPrivate *) pInfo->private;
+ SynapticsParameters *para = &priv->synpara;
+ int values[8];
+
+ values[0] = para->softbutton_areas[0][0];
+ values[1] = para->softbutton_areas[0][1];
+ values[2] = para->softbutton_areas[0][2];
+ values[3] = para->softbutton_areas[0][3];
+ values[4] = para->softbutton_areas[1][0];
+ values[5] = para->softbutton_areas[1][1];
+ values[6] = para->softbutton_areas[1][2];
+ values[7] = para->softbutton_areas[1][3];
+ prop_softbutton_areas = InitAtom(pInfo->dev, SYNAPTICS_PROP_SOFTBUTTON_AREAS, 32, 8, values);
+}
+
void
InitDeviceProperties(InputInfoPtr pInfo)
{
@@ -301,15 +319,8 @@ InitDeviceProperties(InputInfoPtr pInfo)
values[3] = para->area_bottom_edge;
prop_area = InitAtom(pInfo->dev, SYNAPTICS_PROP_AREA, 32, 4, values);
- values[0] = para->softbutton_areas[0][0];
- values[1] = para->softbutton_areas[0][1];
- values[2] = para->softbutton_areas[0][2];
- values[3] = para->softbutton_areas[0][3];
- values[4] = para->softbutton_areas[1][0];
- values[5] = para->softbutton_areas[1][1];
- values[6] = para->softbutton_areas[1][2];
- values[7] = para->softbutton_areas[1][3];
- prop_softbutton_areas = InitAtom(pInfo->dev, SYNAPTICS_PROP_SOFTBUTTON_AREAS, 32, 8, values);
+ if (para->clickpad)
+ InitSoftButtonProperty(pInfo);
values[0] = para->hyst_x;
values[1] = para->hyst_y;
@@ -407,9 +418,20 @@ SetProperty(DeviceIntPtr dev, Atom property, XIPropertyValuePtr prop,
para->tap_time_2 = timeouts[1];
para->click_time = timeouts[2];
} else if (property == prop_clickpad) {
+ BOOL value;
+
if (prop->size != 1 || prop->format != 8 || prop->type != XA_INTEGER)
return BadMatch;
+ value = *(BOOL*)prop->data;
+ if (!para->clickpad && value && !prop_softbutton_areas)
+ InitSoftButtonProperty(pInfo);
+ else if (para->clickpad && !value && prop_softbutton_areas)
+ {
+ XIDeleteDeviceProperty(dev, prop_softbutton_areas, FALSE);
+ prop_softbutton_areas = 0;
+ }
+
para->clickpad = *(BOOL*)prop->data;
} else if (property == prop_tap_fast)
{
diff --git a/src/synaptics.c b/src/synaptics.c
index 4275d2a..898130e 100644
--- a/src/synaptics.c
+++ b/src/synaptics.c
@@ -516,6 +516,9 @@ static void set_softbutton_areas_option(InputInfoPtr pInfo)
char *end_str;
int i;
+ if (!pars->clickpad)
+ return;
+
option_string = xf86CheckStrOption(pInfo->options, "SoftButtonAreas", NULL);
if (!option_string)
return;