[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

xserver-xorg-input-synaptics: Changes to 'upstream-experimental'



 conf/50-synaptics.conf         |   18 
 configure.ac                   |   18 
 include/synaptics-properties.h |    8 
 include/synaptics.h            |   39 
 man/synaptics.man              |   58 
 src/Makefile.am                |    3 
 src/alpscomm.c                 |  101 -
 src/eventcomm.c                |  888 ++++++++---
 src/eventcomm.h                |    9 
 src/properties.c               |  618 ++++----
 src/ps2comm.c                  |  538 +++----
 src/ps2comm.h                  |   21 
 src/psmcomm.c                  |   71 
 src/synaptics.c                | 3114 +++++++++++++++++++++++++----------------
 src/synapticsstr.h             |  356 ++--
 src/synproto.c                 |  183 ++
 src/synproto.h                 |   78 -
 test/Makefile.am               |    3 
 test/eventcomm-test.c          |  184 +-
 test/fake-symbols.c            |  199 +-
 test/fake-symbols.h            |  170 +-
 tools/synclient.c              |  593 ++++---
 tools/syndaemon.c              |  604 ++++---
 23 files changed, 4794 insertions(+), 3080 deletions(-)

New commits:
commit d5ff9d8b0b186cf39695df84a10984eac559b746
Author: Peter Hutterer <peter.hutterer@who-t.net>
Date:   Tue Jun 12 13:46:34 2012 +1000

    synaptics 1.6.2
    
    Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>

diff --git a/configure.ac b/configure.ac
index 3e7ec2a..894d4f5 100644
--- a/configure.ac
+++ b/configure.ac
@@ -23,7 +23,7 @@
 # Initialize Autoconf
 AC_PREREQ([2.60])
 AC_INIT([xf86-input-synaptics],
-        [1.6.1.901],
+        [1.6.2],
         [https://bugs.freedesktop.org/enter_bug.cgi?product=xorg],
         [xf86-input-synaptics])
 AC_CONFIG_SRCDIR([Makefile.am])

commit c1aae820601a911432c64938f03eab62bafaab2f
Author: Peter Hutterer <peter.hutterer@who-t.net>
Date:   Fri May 18 09:38:50 2012 +1000

    synaptics 1.6.1.901
    
    Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>

diff --git a/configure.ac b/configure.ac
index 565daf2..3e7ec2a 100644
--- a/configure.ac
+++ b/configure.ac
@@ -23,7 +23,7 @@
 # Initialize Autoconf
 AC_PREREQ([2.60])
 AC_INIT([xf86-input-synaptics],
-        [1.6.1],
+        [1.6.1.901],
         [https://bugs.freedesktop.org/enter_bug.cgi?product=xorg],
         [xf86-input-synaptics])
 AC_CONFIG_SRCDIR([Makefile.am])

commit 7ccca8e7d8fbf2ccb5a2dbbfbf06ff4dbd6b7149
Author: Peter Hutterer <peter.hutterer@who-t.net>
Date:   Thu May 17 12:10:04 2012 +1000

    Don't allow for scroll distances of 0 (#49965)
    
    It'll either hang the server or blow up with divisions by 0, whichever one
    comes first.
    
    X.Org Bug 49965 <http://bugs.freedesktop.org/show_bug.cgi?id=49965>
    
    Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
    Reviewed-by: Chase Douglas <chase.douglas@canonical.com>
    (cherry picked from commit 6d47d334d8a876e7e094306c313246b87016b78a)

diff --git a/src/properties.c b/src/properties.c
index 44ac306..3b3f1c5 100644
--- a/src/properties.c
+++ b/src/properties.c
@@ -519,6 +519,9 @@ SetProperty(DeviceIntPtr dev, Atom property, XIPropertyValuePtr prop,
             return BadMatch;
 
         dist = (INT32 *) prop->data;
+        if (dist[0] == 0 || dist[1] == 0)
+            return BadValue;
+
         if (para->scroll_dist_vert != dist[0]) {
             para->scroll_dist_vert = dist[0];
 #ifdef HAVE_SMOOTH_SCROLL
@@ -715,6 +718,9 @@ SetProperty(DeviceIntPtr dev, Atom property, XIPropertyValuePtr prop,
             return BadMatch;
 
         circdist = *(float *) prop->data;
+        if (circdist == 0)
+            return BadValue;
+
         para->scroll_dist_circ = circdist;
     }
     else if (property == prop_circscroll_trigger) {

commit f8d970e191e6df05a8f2c26afdeea3e27b941a62
Author: Peter Hutterer <peter.hutterer@who-t.net>
Date:   Thu May 17 11:02:02 2012 +1000

    Reset hw->x/y to INT_MIN and skip HandleState until we have x/y events
    
    The driver assumes x/y is always valid but after coming from a resume we may
    get a few events with either ABS_X or ABS_Y (not both). Thus we process with
    hw->x == 0 and hw->y == somevalue, causing cursor jumps when calculating
    deltas whenver the real hw->x comes in.
    
    Fix this by resetting hw->x/y to INT_MIN and skip state processing until
    both axes are available.
    
    For clickpads, this means handling of data will be delayed until we get
    at least one motion on each axis. Button presses won't be recognised either
    until that happens. It requires some skill to not trigger motion on both
    axes, even more to press a button without doing so.
    
    For non-clickpads, handling of motion events will be delayed likewise. If a
    physical button is pressed immediately after resume we have to assume deltas
    of x/y.
    - If the next event is a new touch, it will have ABS_X/ABS_Y set anyway
    - If the finger was already down, a button event is generated, and the
      finger has generated ABS_X or ABS_Y only before the event, the next event
      containing the missing data will cause a jump. The fix for this is more
      invasive and this is quite a corner-case.
    
    Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
    Reviewed-by: Chase Douglas <chase.douglas@canonical.com>
    (cherry picked from commit cd569377cda9b5a4ee00c0137db14f625c76c40f)

diff --git a/src/synaptics.c b/src/synaptics.c
index 78660f4..cd9f936 100644
--- a/src/synaptics.c
+++ b/src/synaptics.c
@@ -3278,6 +3278,19 @@ HandleState(InputInfoPtr pInfo, struct SynapticsHwState *hw, CARD32 now,
         return delay;
     }
 
+    /* We need both and x/y, the driver can't handle just one of the two
+     * yet. But since it's possible to hit a phys button on non-clickpads
+     * without ever getting motion data first, we must continue with 0/0 for
+     * that case. */
+    if (hw->x == INT_MIN || hw->y == INT_MAX) {
+        if (para->clickpad)
+            return delay;
+        else if (hw->left || hw->right || hw->middle) {
+            hw->x = (hw->x == INT_MIN) ? 0 : hw->x;
+            hw->y = (hw->y == INT_MIN) ? 0 : hw->y;
+        }
+    }
+
     /* If a physical button is pressed on a clickpad, use cumulative relative
      * touch movements for motion */
     if (para->clickpad && (hw->left || hw->right || hw->middle)) {
diff --git a/src/synproto.c b/src/synproto.c
index d6e8c65..0c8a066 100644
--- a/src/synproto.c
+++ b/src/synproto.c
@@ -134,8 +134,8 @@ void
 SynapticsResetHwState(struct SynapticsHwState *hw)
 {
     hw->millis = 0;
-    hw->x = 0;
-    hw->y = 0;
+    hw->x = INT_MIN;
+    hw->y = INT_MIN;
     hw->z = 0;
     hw->cumulative_dx = 0;
     hw->cumulative_dy = 0;

commit 739175d198372a3226ce061b118d8fe5bbc8f6bf
Author: Chase Douglas <chase.douglas@canonical.com>
Date:   Wed May 16 07:49:25 2012 -0700

    Reset open slots array on device disable
    
    The open slots array is used for clickpad cumulative delta computation.
    If the array is not reset and becomes corrupted during the device
    disable/enable cycle, the cumulative deltas may be wrong. This manifests
    as jumpy cursor behavior on some clickpads after suspend/resume.
    
    Signed-off-by: Chase Douglas <chase.douglas@canonical.com>
    Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
    (cherry picked from commit 0054b144f3daf00e46a35b2f165befb209df94fc)

diff --git a/src/synaptics.c b/src/synaptics.c
index 074bcb8..78660f4 100644
--- a/src/synaptics.c
+++ b/src/synaptics.c
@@ -1153,6 +1153,9 @@ SynapticsReset(SynapticsPrivate * priv)
     priv->lastButtons = 0;
     priv->prev_z = 0;
     priv->prevFingers = 0;
+#ifdef HAVE_MULTITOUCH
+    memset(priv->open_slots, 0, priv->num_slots * sizeof(int));
+#endif
 }
 
 static Bool

commit 67a02d676c96d5b3d4729290cd96af0201eb76bb
Author: Chun Yang <Chuck.Yang@gmail.com>
Date:   Tue May 15 14:51:42 2012 -0500

    Fix coasting for negative ScrollDelta
    
    Fix the coasting direction for when VertScrollDelta or HorizScrollDelta is
    negative.
    
    Fixes: https://bugs.freedesktop.org/show_bug.cgi?id=49966
    
    Regression introduced in 0de4445ff8e75aab208faf6383e76045934c6720
    
    Signed-off-by: Chun Yang <Chuck.Yang@gmail.com>
    Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
    (cherry picked from commit 53557a5cab1e253dc8f4393207954ae0fe76068f)

diff --git a/src/synaptics.c b/src/synaptics.c
index 1d32093..074bcb8 100644
--- a/src/synaptics.c
+++ b/src/synaptics.c
@@ -2740,7 +2740,7 @@ HandleScrolling(SynapticsPrivate * priv, struct SynapticsHwState *hw,
         double dtime = (hw->millis - priv->scroll.last_millis) / 1000.0;
         double ddy = para->coasting_friction * dtime;
 
-        priv->scroll.delta_y += priv->scroll.coast_speed_y * dtime * para->scroll_dist_vert;
+        priv->scroll.delta_y += priv->scroll.coast_speed_y * dtime * abs(para->scroll_dist_vert);
         delay = MIN(delay, POLL_MS);
         if (abs(priv->scroll.coast_speed_y) < ddy) {
             priv->scroll.coast_speed_y = 0;
@@ -2755,7 +2755,7 @@ HandleScrolling(SynapticsPrivate * priv, struct SynapticsHwState *hw,
     if (priv->scroll.coast_speed_x) {
         double dtime = (hw->millis - priv->scroll.last_millis) / 1000.0;
         double ddx = para->coasting_friction * dtime;
-        priv->scroll.delta_x += priv->scroll.coast_speed_x * dtime * para->scroll_dist_vert;
+        priv->scroll.delta_x += priv->scroll.coast_speed_x * dtime * abs(para->scroll_dist_horiz);
         delay = MIN(delay, POLL_MS);
         if (abs(priv->scroll.coast_speed_x) < ddx) {
             priv->scroll.coast_speed_x = 0;

commit 23e87b57bb874326c88a7ad7292bec51959fb876
Author: Chase Douglas <chase.douglas@canonical.com>
Date:   Mon May 14 10:20:01 2012 -0700

    Ignore pre-existing touches
    
    If a touch is physically active when the device is enabled, then all
    events for that touch must be ignored. In particular, we cannot close
    the touch or we will decrement touch count counters below zero. If these
    counters go below zero memory corruption can occur.
    
    Note that a device is disabled and enabled every time the user types on
    the keyboard if synclient is used to disable the trackpad while typing.
    This is a very common option.
    
    Signed-off-by: Chase Douglas <chase.douglas@canonical.com>
    Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
    (cherry picked from commit 55fc42e7c9b4948cadd4f98ef7b6a3b12e268e3e)

diff --git a/src/eventcomm.c b/src/eventcomm.c
index 89a8a3a..280ef9b 100644
--- a/src/eventcomm.c
+++ b/src/eventcomm.c
@@ -564,8 +564,7 @@ EventProcessTouchEvent(InputInfoPtr pInfo, struct SynapticsHwState *hw,
         if (slot_index < 0)
             return;
 
-        if (hw->slot_state[slot_index] == SLOTSTATE_EMPTY ||
-            hw->slot_state[slot_index] == SLOTSTATE_OPEN_EMPTY)
+        if (hw->slot_state[slot_index] == SLOTSTATE_OPEN_EMPTY)
             hw->slot_state[slot_index] = SLOTSTATE_UPDATE;
         if (ev->code == ABS_MT_TRACKING_ID) {
             if (ev->value >= 0) {
@@ -580,7 +579,7 @@ EventProcessTouchEvent(InputInfoPtr pInfo, struct SynapticsHwState *hw,
                                 "Attempted to copy values from out-of-range "
                                 "slot, touch events may be incorrect.\n");
             }
-            else {
+            else if (hw->slot_state[slot_index] != SLOTSTATE_EMPTY) {
                 hw->slot_state[slot_index] = SLOTSTATE_CLOSE;
                 proto_data->num_touches--;
             }

commit 23065a974e5dcdf0d6a436a0547bb7887d306a6f
Author: Peter Hutterer <peter.hutterer@who-t.net>
Date:   Fri May 11 12:27:39 2012 +1000

    Avoid out-of-bounds access by running num_active_touches < 0 (#49439)
    
    If a touch is active during driver init, the slot will be set to
    SLOTSTATE_CLOSE when it finishes. That could decrease num_active_touches to
    less than 0, causing out-of-bounds access.
    
    X.Org Bug 49439 <http://bugs.freedesktop.org/show_bug.cgi?id=49439>
    
    Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
    Reviewed-by: Chase Douglas <chase.douglas@canonical.com>
    (cherry picked from commit 77d766b1d535dff9a27c7db343ede85d9f44850b)

diff --git a/src/synaptics.c b/src/synaptics.c
index 30d79c5..1d32093 100644
--- a/src/synaptics.c
+++ b/src/synaptics.c
@@ -3128,7 +3128,9 @@ UpdateTouchState(InputInfoPtr pInfo, struct SynapticsHwState *hw)
                     priv->open_slots[j] = priv->open_slots[j + 1];
             }
 
-            priv->num_active_touches--;
+            BUG_WARN(priv->num_active_touches == 0);
+            if (priv->num_active_touches > 0)
+                priv->num_active_touches--;
         }
     }
 

commit e0f5688994baa85a8c658120681575cdd0ba2a58
Author: Peter Hutterer <peter.hutterer@who-t.net>
Date:   Fri May 11 10:30:21 2012 +1000

    synaptics 1.6.1
    
    Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>

diff --git a/configure.ac b/configure.ac
index e5b92f9..565daf2 100644
--- a/configure.ac
+++ b/configure.ac
@@ -23,7 +23,7 @@
 # Initialize Autoconf
 AC_PREREQ([2.60])
 AC_INIT([xf86-input-synaptics],
-        [1.6.0],
+        [1.6.1],
         [https://bugs.freedesktop.org/enter_bug.cgi?product=xorg],
         [xf86-input-synaptics])
 AC_CONFIG_SRCDIR([Makefile.am])

commit 7f2d9d88204c62de3cb63b48001b9e2408d3a20d
Author: Peter Hutterer <peter.hutterer@who-t.net>
Date:   Fri May 11 10:54:47 2012 +1000

    tools: coasting speed is not capped at 20, cap it at 255
    
    Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
    (cherry picked from commit 0352c67fa2a7224b5a3bf03a934b3c7af42b4f51)

diff --git a/tools/synclient.c b/tools/synclient.c
index 7ec6923..f08a275 100644
--- a/tools/synclient.c
+++ b/tools/synclient.c
@@ -130,7 +130,7 @@ static struct Parameter params[] = {
     {"PalmDetect",            PT_BOOL,   0, 1,     SYNAPTICS_PROP_PALM_DETECT,	8,	0},
     {"PalmMinWidth",          PT_INT,    0, 15,    SYNAPTICS_PROP_PALM_DIMENSIONS,	32,	0},
     {"PalmMinZ",              PT_INT,    0, 255,   SYNAPTICS_PROP_PALM_DIMENSIONS,	32,	1},
-    {"CoastingSpeed",         PT_DOUBLE, 0, 20,    SYNAPTICS_PROP_COASTING_SPEED,	0 /* float*/,	0},
+    {"CoastingSpeed",         PT_DOUBLE, 0, 255,    SYNAPTICS_PROP_COASTING_SPEED,	0 /* float*/,	0},
     {"CoastingFriction",      PT_DOUBLE, 0, 255,   SYNAPTICS_PROP_COASTING_SPEED,	0 /* float*/,	1},
     {"PressureMotionMinZ",    PT_INT,    1, 255,   SYNAPTICS_PROP_PRESSURE_MOTION,	32,	0},
     {"PressureMotionMaxZ",    PT_INT,    1, 255,   SYNAPTICS_PROP_PRESSURE_MOTION,	32,	1},

commit ace20a02c371478f6a9d224dfd31ea219d91fc46
Author: Peter Hutterer <peter.hutterer@who-t.net>
Date:   Wed May 9 14:26:40 2012 +1000

    Fix coasting speed trigger
    
    CoastingSpeed is defined as scrolls/s. The previous code just used
    delta/seconds which depended on the device coordinate range and exceeded the
    default CoastingSpeed at almost any scroll event.
    
    Divide the estimated delta by the scroll distance to get the accurate
    scrolls/s number. Since that now changes the contents of what's in
    coast_speed_y, change the users of that too.
    
    http://bugzilla.redhat.com/813686
    
    Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
    (cherry picked from commit 0de4445ff8e75aab208faf6383e76045934c6720)

diff --git a/src/synaptics.c b/src/synaptics.c
index ee627b3..30d79c5 100644
--- a/src/synaptics.c
+++ b/src/synaptics.c
@@ -2456,7 +2456,7 @@ start_coasting(SynapticsPrivate * priv, struct SynapticsHwState *hw,
             double dy =
                 estimate_delta(HIST(0).y, HIST(1).y, HIST(2).y, HIST(3).y);
             if (pkt_time > 0) {
-                double scrolls_per_sec = dy / pkt_time;
+                double scrolls_per_sec = (dy / abs(para->scroll_dist_vert)) / pkt_time;
 
                 if (fabs(scrolls_per_sec) >= para->coasting_speed) {
                     priv->scroll.coast_speed_y = scrolls_per_sec;
@@ -2468,7 +2468,7 @@ start_coasting(SynapticsPrivate * priv, struct SynapticsHwState *hw,
             double dx =
                 estimate_delta(HIST(0).x, HIST(1).x, HIST(2).x, HIST(3).x);
             if (pkt_time > 0) {
-                double scrolls_per_sec = dx / pkt_time;
+                double scrolls_per_sec = (dx / abs(para->scroll_dist_vert)) / pkt_time;
 
                 if (fabs(scrolls_per_sec) >= para->coasting_speed) {
                     priv->scroll.coast_speed_x = scrolls_per_sec;
@@ -2480,7 +2480,7 @@ start_coasting(SynapticsPrivate * priv, struct SynapticsHwState *hw,
             double da = estimate_delta_circ(priv);
 
             if (pkt_time > 0) {
-                double scrolls_per_sec = da / pkt_time;
+                double scrolls_per_sec = (da / para->scroll_dist_circ) / pkt_time;
 
                 if (fabs(scrolls_per_sec) >= para->coasting_speed) {
                     if (vert) {
@@ -2738,10 +2738,9 @@ HandleScrolling(SynapticsPrivate * priv, struct SynapticsHwState *hw,
 
     if (priv->scroll.coast_speed_y) {
         double dtime = (hw->millis - priv->scroll.last_millis) / 1000.0;
-        double ddy =
-            para->coasting_friction * dtime * abs(para->scroll_dist_vert);
+        double ddy = para->coasting_friction * dtime;
 
-        priv->scroll.delta_y += priv->scroll.coast_speed_y * dtime;
+        priv->scroll.delta_y += priv->scroll.coast_speed_y * dtime * para->scroll_dist_vert;
         delay = MIN(delay, POLL_MS);
         if (abs(priv->scroll.coast_speed_y) < ddy) {
             priv->scroll.coast_speed_y = 0;
@@ -2755,9 +2754,8 @@ HandleScrolling(SynapticsPrivate * priv, struct SynapticsHwState *hw,
 
     if (priv->scroll.coast_speed_x) {
         double dtime = (hw->millis - priv->scroll.last_millis) / 1000.0;
-        double ddx =
-            para->coasting_friction * dtime * abs(para->scroll_dist_horiz);
-        priv->scroll.delta_x += priv->scroll.coast_speed_x * dtime;
+        double ddx = para->coasting_friction * dtime;
+        priv->scroll.delta_x += priv->scroll.coast_speed_x * dtime * para->scroll_dist_vert;
         delay = MIN(delay, POLL_MS);
         if (abs(priv->scroll.coast_speed_x) < ddx) {
             priv->scroll.coast_speed_x = 0;
diff --git a/src/synapticsstr.h b/src/synapticsstr.h
index 57ed4ba..dd6a09b 100644
--- a/src/synapticsstr.h
+++ b/src/synapticsstr.h
@@ -168,7 +168,7 @@ typedef struct _SynapticsParameters {
     Bool palm_detect;           /* Enable Palm Detection */
     int palm_min_width;         /* Palm detection width */
     int palm_min_z;             /* Palm detection depth */
-    double coasting_speed;      /* Coasting threshold scrolling speed */
+    double coasting_speed;      /* Coasting threshold scrolling speed in scrolls/s */
     double coasting_friction;   /* Number of scrolls per second per second to change coasting speed */
     int press_motion_min_z;     /* finger pressure at which minimum pressure motion factor is applied */
     int press_motion_max_z;     /* finger pressure at which maximum pressure motion factor is applied */
@@ -216,8 +216,8 @@ struct _SynapticsPrivateRec {
         double delta_y;         /* accumulated vert scroll delta */
         double last_a;          /* last angle-scroll position */
         CARD32 last_millis;     /* time last scroll event posted */
-        double coast_speed_x;   /* Horizontal coasting speed */
-        double coast_speed_y;   /* Vertical coasting speed */
+        double coast_speed_x;   /* Horizontal coasting speed in scrolls/s */
+        double coast_speed_y;   /* Vertical coasting speed in scrolls/s */
         double coast_delta_x;   /* Accumulated horizontal coast delta */
         double coast_delta_y;   /* Accumulated vertical coast delta */
         int packets_this_scroll;        /* Events received for this scroll */

commit 04d24116db59872d4cd00f38a0d1c87957fe4914
Author: Peter Hutterer <peter.hutterer@who-t.net>
Date:   Wed May 9 12:23:46 2012 +1000

    Don't check for soft buttons if a button is already down
    
    Moving into a different soft button's area during drag-n-drop would trigger
    a click of that button.
    
    We only have the current button state and we mess with it, so the conditions
    for a possible clickpad soft-button event are:
    - hw->left is down now
    - none of left|right|middle were down before. since we change hw->left to
      hw->right/left we need to check all three
    
    If hw->left is down but one of the other buttons was already down, copy that
    button state and continue.
    
    http://bugzilla.redhat.com/819348
    
    Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
    Reviewed-by: Chase Douglas <chase.douglas@canonical.com>
    (cherry picked from commit a1d6784d790f081f8a6ea3a10d3cfa578aa10d5b)

diff --git a/src/synaptics.c b/src/synaptics.c
index 809a275..ee627b3 100644
--- a/src/synaptics.c
+++ b/src/synaptics.c
@@ -2956,14 +2956,23 @@ update_hw_button_state(const InputInfoPtr pInfo, struct SynapticsHwState *hw,
 
     /* If this is a clickpad and the user clicks in a soft button area, press
      * the soft button instead. */
-    if (para->clickpad && hw->left && !hw->right && !hw->middle) {
-        if (is_inside_rightbutton_area(para, hw->x, hw->y)) {
-            hw->left = 0;
-            hw->right = 1;
-        }
-        else if (is_inside_middlebutton_area(para, hw->x, hw->y)) {
-            hw->left = 0;
-            hw->middle = 1;
+    if (para->clickpad) {
+        /* hw->left is down, but no other buttons were already down */
+        if (!old->left && !old->right && !old->middle &&
+            hw->left && !hw->right && !hw->middle) {
+                if (is_inside_rightbutton_area(para, hw->x, hw->y)) {
+                    hw->left = 0;
+                    hw->right = 1;
+                }
+                else if (is_inside_middlebutton_area(para, hw->x, hw->y)) {
+                    hw->left = 0;
+                    hw->middle = 1;
+                }
+        }
+        else if (hw->left) {
+            hw->left = old->left;
+            hw->right = old->right;
+            hw->middle = old->middle;
         }
     }
 

commit 4e8ddb3a6f1ba1f7642f0a23d6f22a8c40d68cf0
Author: Peter Hutterer <peter.hutterer@who-t.net>
Date:   Thu May 3 12:00:50 2012 +1000

    whitespace fix
    
    Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
    Reviewed-by: Chase Douglas <chase.douglas@canonical.com>

diff --git a/src/ps2comm.h b/src/ps2comm.h
index 6f1a96a..2be55e4 100644
--- a/src/ps2comm.h
+++ b/src/ps2comm.h
@@ -27,7 +27,7 @@
 #include "xf86_OSproc.h"
 
 /* acknowledge for commands and parameter */
-#define PS2_ACK 			0xFA
+#define PS2_ACK				0xFA
 #define PS2_ERROR			0xFC
 
 /* standard PS/2 commands */
@@ -56,7 +56,7 @@
 #define SYN_BIT_W_MODE			(1 << 0)
 
 /* synaptics model ID bits */
-#define SYN_MODEL_ROT180(synhw) 	((synhw)->model_id & (1 << 23))
+#define SYN_MODEL_ROT180(synhw)		((synhw)->model_id & (1 << 23))
 #define SYN_MODEL_PORTRAIT(synhw)	((synhw)->model_id & (1 << 22))
 #define SYN_MODEL_SENSOR(synhw)		(((synhw)->model_id >> 16) & 0x3f)
 #define SYN_MODEL_HARDWARE(synhw)	(((synhw)->model_id >> 9) & 0x7f)

commit d1eebac72e4a5cc7a67efead13fbd32f9cd1fbd9
Author: Peter Hutterer <peter.hutterer@who-t.net>
Date:   Thu May 3 14:21:24 2012 +1000

    tools: undo indentation in synclient's parameter list
    
    more more readable this way
    
    Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
    Reviewed-by: Chase Douglas <chase.douglas@canonical.com>

diff --git a/tools/synclient.c b/tools/synclient.c
index 6ff3aa6..7ec6923 100644
--- a/tools/synclient.c
+++ b/tools/synclient.c
@@ -73,129 +73,87 @@ struct Parameter {
 };
 
 static struct Parameter params[] = {
-    {"LeftEdge", PT_INT, 0, 10000, SYNAPTICS_PROP_EDGES, 32, 0},
-    {"RightEdge", PT_INT, 0, 10000, SYNAPTICS_PROP_EDGES, 32, 1},
-    {"TopEdge", PT_INT, 0, 10000, SYNAPTICS_PROP_EDGES, 32, 2},
-    {"BottomEdge", PT_INT, 0, 10000, SYNAPTICS_PROP_EDGES, 32, 3},
-    {"FingerLow", PT_INT, 0, 255, SYNAPTICS_PROP_FINGER, 32, 0},
-    {"FingerHigh", PT_INT, 0, 255, SYNAPTICS_PROP_FINGER, 32, 1},
-    {"FingerPress", PT_INT, 0, 256, SYNAPTICS_PROP_FINGER, 32, 2},
-    {"MaxTapTime", PT_INT, 0, 1000, SYNAPTICS_PROP_TAP_TIME, 32, 0},
-    {"MaxTapMove", PT_INT, 0, 2000, SYNAPTICS_PROP_TAP_MOVE, 32, 0},
-    {"MaxDoubleTapTime", PT_INT, 0, 1000, SYNAPTICS_PROP_TAP_DURATIONS, 32, 1},
-    {"SingleTapTimeout", PT_INT, 0, 1000, SYNAPTICS_PROP_TAP_DURATIONS, 32, 0},
-    {"ClickTime", PT_INT, 0, 1000, SYNAPTICS_PROP_TAP_DURATIONS, 32, 2},
-    {"FastTaps", PT_BOOL, 0, 1, SYNAPTICS_PROP_TAP_FAST, 8, 0},
-    {"EmulateMidButtonTime", PT_INT, 0, 1000, SYNAPTICS_PROP_MIDDLE_TIMEOUT, 32,
-     0},
-    {"EmulateTwoFingerMinZ", PT_INT, 0, 1000, SYNAPTICS_PROP_TWOFINGER_PRESSURE,
-     32, 0},
-    {"EmulateTwoFingerMinW", PT_INT, 0, 15, SYNAPTICS_PROP_TWOFINGER_WIDTH, 32,
-     0},
-    {"VertScrollDelta", PT_INT, -1000, 1000, SYNAPTICS_PROP_SCROLL_DISTANCE, 32,
-     0},
-    {"HorizScrollDelta", PT_INT, -1000, 1000, SYNAPTICS_PROP_SCROLL_DISTANCE,
-     32, 1},
-    {"VertEdgeScroll", PT_BOOL, 0, 1, SYNAPTICS_PROP_SCROLL_EDGE, 8, 0},
-    {"HorizEdgeScroll", PT_BOOL, 0, 1, SYNAPTICS_PROP_SCROLL_EDGE, 8, 1},
-    {"CornerCoasting", PT_BOOL, 0, 1, SYNAPTICS_PROP_SCROLL_EDGE, 8, 2},
-    {"VertTwoFingerScroll", PT_BOOL, 0, 1, SYNAPTICS_PROP_SCROLL_TWOFINGER, 8,
-     0},
-    {"HorizTwoFingerScroll", PT_BOOL, 0, 1, SYNAPTICS_PROP_SCROLL_TWOFINGER, 8,
-     1},
-    {"MinSpeed", PT_DOUBLE, 0, 255.0, SYNAPTICS_PROP_SPEED, 0, /*float */ 0},
-    {"MaxSpeed", PT_DOUBLE, 0, 255.0, SYNAPTICS_PROP_SPEED, 0, /*float */ 1},
-    {"AccelFactor", PT_DOUBLE, 0, 1.0, SYNAPTICS_PROP_SPEED, 0, /*float */ 2},
-    {"TrackstickSpeed", PT_DOUBLE, 0, 200.0, SYNAPTICS_PROP_SPEED, 0, /*float */
-     3},
-    {"EdgeMotionMinZ", PT_INT, 1, 255, SYNAPTICS_PROP_EDGEMOTION_PRESSURE, 32,
-     0},
-    {"EdgeMotionMaxZ", PT_INT, 1, 255, SYNAPTICS_PROP_EDGEMOTION_PRESSURE, 32,
-     1},
-    {"EdgeMotionMinSpeed", PT_INT, 0, 1000, SYNAPTICS_PROP_EDGEMOTION_SPEED, 32,
-     0},
-    {"EdgeMotionMaxSpeed", PT_INT, 0, 1000, SYNAPTICS_PROP_EDGEMOTION_SPEED, 32,
-     1},
-    {"EdgeMotionUseAlways", PT_BOOL, 0, 1, SYNAPTICS_PROP_EDGEMOTION, 8, 0},
-    {"UpDownScrolling", PT_BOOL, 0, 1, SYNAPTICS_PROP_BUTTONSCROLLING, 8, 0},
-    {"LeftRightScrolling", PT_BOOL, 0, 1, SYNAPTICS_PROP_BUTTONSCROLLING, 8, 1},
-    {"UpDownScrollRepeat", PT_BOOL, 0, 1, SYNAPTICS_PROP_BUTTONSCROLLING_REPEAT,
-     8, 0},
-    {"LeftRightScrollRepeat", PT_BOOL, 0, 1,
-     SYNAPTICS_PROP_BUTTONSCROLLING_REPEAT, 8, 1},
-    {"ScrollButtonRepeat", PT_INT, SBR_MIN, SBR_MAX,
-     SYNAPTICS_PROP_BUTTONSCROLLING_TIME, 32, 0},
-    {"TouchpadOff", PT_INT, 0, 2, SYNAPTICS_PROP_OFF, 8, 0},
-    {"LockedDrags", PT_BOOL, 0, 1, SYNAPTICS_PROP_LOCKED_DRAGS, 8, 0},
-    {"LockedDragTimeout", PT_INT, 0, 30000, SYNAPTICS_PROP_LOCKED_DRAGS_TIMEOUT,
-     32, 0},
-    {"RTCornerButton", PT_INT, 0, SYN_MAX_BUTTONS, SYNAPTICS_PROP_TAP_ACTION, 8,
-     0},
-    {"RBCornerButton", PT_INT, 0, SYN_MAX_BUTTONS, SYNAPTICS_PROP_TAP_ACTION, 8,
-     1},
-    {"LTCornerButton", PT_INT, 0, SYN_MAX_BUTTONS, SYNAPTICS_PROP_TAP_ACTION, 8,
-     2},
-    {"LBCornerButton", PT_INT, 0, SYN_MAX_BUTTONS, SYNAPTICS_PROP_TAP_ACTION, 8,
-     3},
-    {"TapButton1", PT_INT, 0, SYN_MAX_BUTTONS, SYNAPTICS_PROP_TAP_ACTION, 8, 4},
-    {"TapButton2", PT_INT, 0, SYN_MAX_BUTTONS, SYNAPTICS_PROP_TAP_ACTION, 8, 5},
-    {"TapButton3", PT_INT, 0, SYN_MAX_BUTTONS, SYNAPTICS_PROP_TAP_ACTION, 8, 6},
-    {"ClickFinger1", PT_INT, 0, SYN_MAX_BUTTONS, SYNAPTICS_PROP_CLICK_ACTION, 8,
-     0},
-    {"ClickFinger2", PT_INT, 0, SYN_MAX_BUTTONS, SYNAPTICS_PROP_CLICK_ACTION, 8,
-     1},
-    {"ClickFinger3", PT_INT, 0, SYN_MAX_BUTTONS, SYNAPTICS_PROP_CLICK_ACTION, 8,
-     2},
-    {"CircularScrolling", PT_BOOL, 0, 1, SYNAPTICS_PROP_CIRCULAR_SCROLLING, 8,
-     0},
-    {"CircScrollDelta", PT_DOUBLE, .01, 3,
-     SYNAPTICS_PROP_CIRCULAR_SCROLLING_DIST, 0 /* float */ , 0},
-    {"CircScrollTrigger", PT_INT, 0, 8,
-     SYNAPTICS_PROP_CIRCULAR_SCROLLING_TRIGGER, 8, 0},
-    {"CircularPad", PT_BOOL, 0, 1, SYNAPTICS_PROP_CIRCULAR_PAD, 8, 0},
-    {"PalmDetect", PT_BOOL, 0, 1, SYNAPTICS_PROP_PALM_DETECT, 8, 0},
-    {"PalmMinWidth", PT_INT, 0, 15, SYNAPTICS_PROP_PALM_DIMENSIONS, 32, 0},
-    {"PalmMinZ", PT_INT, 0, 255, SYNAPTICS_PROP_PALM_DIMENSIONS, 32, 1},
-    {"CoastingSpeed", PT_DOUBLE, 0, 20, SYNAPTICS_PROP_COASTING_SPEED,
-     0 /* float */ , 0},
-    {"CoastingFriction", PT_DOUBLE, 0, 255, SYNAPTICS_PROP_COASTING_SPEED,
-     0 /* float */ , 1},
-    {"PressureMotionMinZ", PT_INT, 1, 255, SYNAPTICS_PROP_PRESSURE_MOTION, 32,
-     0},
-    {"PressureMotionMaxZ", PT_INT, 1, 255, SYNAPTICS_PROP_PRESSURE_MOTION, 32,
-     1},
-    {"PressureMotionMinFactor", PT_DOUBLE, 0, 10.0,
-     SYNAPTICS_PROP_PRESSURE_MOTION_FACTOR, 0 /*float */ , 0},
-    {"PressureMotionMaxFactor", PT_DOUBLE, 0, 10.0,
-     SYNAPTICS_PROP_PRESSURE_MOTION_FACTOR, 0 /*float */ , 1},
-    {"GrabEventDevice", PT_BOOL, 0, 1, SYNAPTICS_PROP_GRAB, 8, 0},
-    {"TapAndDragGesture", PT_BOOL, 0, 1, SYNAPTICS_PROP_GESTURES, 8, 0},
-    {"AreaLeftEdge", PT_INT, 0, 10000, SYNAPTICS_PROP_AREA, 32, 0},
-    {"AreaRightEdge", PT_INT, 0, 10000, SYNAPTICS_PROP_AREA, 32, 1},
-    {"AreaTopEdge", PT_INT, 0, 10000, SYNAPTICS_PROP_AREA, 32, 2},
-    {"AreaBottomEdge", PT_INT, 0, 10000, SYNAPTICS_PROP_AREA, 32, 3},
-    {"HorizHysteresis", PT_INT, 0, 10000, SYNAPTICS_PROP_NOISE_CANCELLATION, 32,
-     0},
-    {"VertHysteresis", PT_INT, 0, 10000, SYNAPTICS_PROP_NOISE_CANCELLATION, 32,
-     1},
-    {"ClickPad", PT_BOOL, 0, 1, SYNAPTICS_PROP_CLICKPAD, 8, 0},
-    {"RightButtonAreaLeft", PT_INT, INT_MIN, INT_MAX,
-     SYNAPTICS_PROP_SOFTBUTTON_AREAS, 32, 0},
-    {"RightButtonAreaRight", PT_INT, INT_MIN, INT_MAX,
-     SYNAPTICS_PROP_SOFTBUTTON_AREAS, 32, 1},
-    {"RightButtonAreaTop", PT_INT, INT_MIN, INT_MAX,
-     SYNAPTICS_PROP_SOFTBUTTON_AREAS, 32, 2},
-    {"RightButtonAreaBottom", PT_INT, INT_MIN, INT_MAX,
-     SYNAPTICS_PROP_SOFTBUTTON_AREAS, 32, 3},
-    {"MiddleButtonAreaLeft", PT_INT, INT_MIN, INT_MAX,
-     SYNAPTICS_PROP_SOFTBUTTON_AREAS, 32, 4},
-    {"MiddleButtonAreaRight", PT_INT, INT_MIN, INT_MAX,
-     SYNAPTICS_PROP_SOFTBUTTON_AREAS, 32, 5},
-    {"MiddleButtonAreaTop", PT_INT, INT_MIN, INT_MAX,
-     SYNAPTICS_PROP_SOFTBUTTON_AREAS, 32, 6},
-    {"MiddleButtonAreaBottom", PT_INT, INT_MIN, INT_MAX,
-     SYNAPTICS_PROP_SOFTBUTTON_AREAS, 32, 7},
-    {NULL, 0, 0, 0, 0}
+    {"LeftEdge",              PT_INT,    0, 10000, SYNAPTICS_PROP_EDGES,	32,	0},
+    {"RightEdge",             PT_INT,    0, 10000, SYNAPTICS_PROP_EDGES,	32,	1},
+    {"TopEdge",               PT_INT,    0, 10000, SYNAPTICS_PROP_EDGES,	32,	2},
+    {"BottomEdge",            PT_INT,    0, 10000, SYNAPTICS_PROP_EDGES,	32,	3},
+    {"FingerLow",             PT_INT,    0, 255,   SYNAPTICS_PROP_FINGER,	32,	0},
+    {"FingerHigh",            PT_INT,    0, 255,   SYNAPTICS_PROP_FINGER,	32,	1},
+    {"FingerPress",           PT_INT,    0, 256,   SYNAPTICS_PROP_FINGER,	32,	2},
+    {"MaxTapTime",            PT_INT,    0, 1000,  SYNAPTICS_PROP_TAP_TIME,	32,	0},
+    {"MaxTapMove",            PT_INT,    0, 2000,  SYNAPTICS_PROP_TAP_MOVE,	32,	0},
+    {"MaxDoubleTapTime",      PT_INT,    0, 1000,  SYNAPTICS_PROP_TAP_DURATIONS,32,	1},
+    {"SingleTapTimeout",      PT_INT,    0, 1000,  SYNAPTICS_PROP_TAP_DURATIONS,32,	0},
+    {"ClickTime",             PT_INT,    0, 1000,  SYNAPTICS_PROP_TAP_DURATIONS,32,	2},
+    {"FastTaps",              PT_BOOL,   0, 1,     SYNAPTICS_PROP_TAP_FAST,	8,	0},
+    {"EmulateMidButtonTime",  PT_INT,    0, 1000,  SYNAPTICS_PROP_MIDDLE_TIMEOUT,32,	0},
+    {"EmulateTwoFingerMinZ",  PT_INT,    0, 1000,  SYNAPTICS_PROP_TWOFINGER_PRESSURE,	32,	0},
+    {"EmulateTwoFingerMinW",  PT_INT,    0, 15,    SYNAPTICS_PROP_TWOFINGER_WIDTH,	32,	0},
+    {"VertScrollDelta",       PT_INT,    -1000, 1000,  SYNAPTICS_PROP_SCROLL_DISTANCE,	32,	0},
+    {"HorizScrollDelta",      PT_INT,    -1000, 1000,  SYNAPTICS_PROP_SCROLL_DISTANCE,	32,	1},
+    {"VertEdgeScroll",        PT_BOOL,   0, 1,     SYNAPTICS_PROP_SCROLL_EDGE,	8,	0},
+    {"HorizEdgeScroll",       PT_BOOL,   0, 1,     SYNAPTICS_PROP_SCROLL_EDGE,	8,	1},
+    {"CornerCoasting",        PT_BOOL,   0, 1,     SYNAPTICS_PROP_SCROLL_EDGE,	8,	2},
+    {"VertTwoFingerScroll",   PT_BOOL,   0, 1,     SYNAPTICS_PROP_SCROLL_TWOFINGER,	8,	0},
+    {"HorizTwoFingerScroll",  PT_BOOL,   0, 1,     SYNAPTICS_PROP_SCROLL_TWOFINGER,	8,	1},
+    {"MinSpeed",              PT_DOUBLE, 0, 255.0,   SYNAPTICS_PROP_SPEED,	0, /*float */	0},
+    {"MaxSpeed",              PT_DOUBLE, 0, 255.0,   SYNAPTICS_PROP_SPEED,	0, /*float */	1},
+    {"AccelFactor",           PT_DOUBLE, 0, 1.0,   SYNAPTICS_PROP_SPEED,	0, /*float */	2},
+    {"TrackstickSpeed",       PT_DOUBLE, 0, 200.0, SYNAPTICS_PROP_SPEED,	0, /*float */ 3},
+    {"EdgeMotionMinZ",        PT_INT,    1, 255,   SYNAPTICS_PROP_EDGEMOTION_PRESSURE,  32,	0},
+    {"EdgeMotionMaxZ",        PT_INT,    1, 255,   SYNAPTICS_PROP_EDGEMOTION_PRESSURE,  32,	1},
+    {"EdgeMotionMinSpeed",    PT_INT,    0, 1000,  SYNAPTICS_PROP_EDGEMOTION_SPEED,     32,	0},
+    {"EdgeMotionMaxSpeed",    PT_INT,    0, 1000,  SYNAPTICS_PROP_EDGEMOTION_SPEED,     32,	1},
+    {"EdgeMotionUseAlways",   PT_BOOL,   0, 1,     SYNAPTICS_PROP_EDGEMOTION,   8,	0},
+    {"UpDownScrolling",       PT_BOOL,   0, 1,     SYNAPTICS_PROP_BUTTONSCROLLING,  8,	0},
+    {"LeftRightScrolling",    PT_BOOL,   0, 1,     SYNAPTICS_PROP_BUTTONSCROLLING,  8,	1},
+    {"UpDownScrollRepeat",    PT_BOOL,   0, 1,     SYNAPTICS_PROP_BUTTONSCROLLING_REPEAT,   8,	0},
+    {"LeftRightScrollRepeat", PT_BOOL,   0, 1,     SYNAPTICS_PROP_BUTTONSCROLLING_REPEAT,   8,	1},
+    {"ScrollButtonRepeat",    PT_INT,    SBR_MIN , SBR_MAX, SYNAPTICS_PROP_BUTTONSCROLLING_TIME, 32,	0},
+    {"TouchpadOff",           PT_INT,    0, 2,     SYNAPTICS_PROP_OFF,		8,	0},
+    {"LockedDrags",           PT_BOOL,   0, 1,     SYNAPTICS_PROP_LOCKED_DRAGS,	8,	0},
+    {"LockedDragTimeout",     PT_INT,    0, 30000, SYNAPTICS_PROP_LOCKED_DRAGS_TIMEOUT,	32,	0},
+    {"RTCornerButton",        PT_INT,    0, SYN_MAX_BUTTONS, SYNAPTICS_PROP_TAP_ACTION,	8,	0},
+    {"RBCornerButton",        PT_INT,    0, SYN_MAX_BUTTONS, SYNAPTICS_PROP_TAP_ACTION,	8,	1},
+    {"LTCornerButton",        PT_INT,    0, SYN_MAX_BUTTONS, SYNAPTICS_PROP_TAP_ACTION,	8,	2},
+    {"LBCornerButton",        PT_INT,    0, SYN_MAX_BUTTONS, SYNAPTICS_PROP_TAP_ACTION,	8,	3},
+    {"TapButton1",            PT_INT,    0, SYN_MAX_BUTTONS, SYNAPTICS_PROP_TAP_ACTION,	8,	4},
+    {"TapButton2",            PT_INT,    0, SYN_MAX_BUTTONS, SYNAPTICS_PROP_TAP_ACTION,	8,	5},
+    {"TapButton3",            PT_INT,    0, SYN_MAX_BUTTONS, SYNAPTICS_PROP_TAP_ACTION,	8,	6},
+    {"ClickFinger1",          PT_INT,    0, SYN_MAX_BUTTONS, SYNAPTICS_PROP_CLICK_ACTION,	8,	0},
+    {"ClickFinger2",          PT_INT,    0, SYN_MAX_BUTTONS, SYNAPTICS_PROP_CLICK_ACTION,	8,	1},
+    {"ClickFinger3",          PT_INT,    0, SYN_MAX_BUTTONS, SYNAPTICS_PROP_CLICK_ACTION,	8,	2},
+    {"CircularScrolling",     PT_BOOL,   0, 1,     SYNAPTICS_PROP_CIRCULAR_SCROLLING,	8,	0},
+    {"CircScrollDelta",       PT_DOUBLE, .01, 3,   SYNAPTICS_PROP_CIRCULAR_SCROLLING_DIST,	0 /* float */,	0},
+    {"CircScrollTrigger",     PT_INT,    0, 8,     SYNAPTICS_PROP_CIRCULAR_SCROLLING_TRIGGER,	8,	0},
+    {"CircularPad",           PT_BOOL,   0, 1,     SYNAPTICS_PROP_CIRCULAR_PAD,	8,	0},
+    {"PalmDetect",            PT_BOOL,   0, 1,     SYNAPTICS_PROP_PALM_DETECT,	8,	0},
+    {"PalmMinWidth",          PT_INT,    0, 15,    SYNAPTICS_PROP_PALM_DIMENSIONS,	32,	0},
+    {"PalmMinZ",              PT_INT,    0, 255,   SYNAPTICS_PROP_PALM_DIMENSIONS,	32,	1},
+    {"CoastingSpeed",         PT_DOUBLE, 0, 20,    SYNAPTICS_PROP_COASTING_SPEED,	0 /* float*/,	0},
+    {"CoastingFriction",      PT_DOUBLE, 0, 255,   SYNAPTICS_PROP_COASTING_SPEED,	0 /* float*/,	1},
+    {"PressureMotionMinZ",    PT_INT,    1, 255,   SYNAPTICS_PROP_PRESSURE_MOTION,	32,	0},
+    {"PressureMotionMaxZ",    PT_INT,    1, 255,   SYNAPTICS_PROP_PRESSURE_MOTION,	32,	1},
+    {"PressureMotionMinFactor", PT_DOUBLE, 0, 10.0,SYNAPTICS_PROP_PRESSURE_MOTION_FACTOR,	0 /*float*/,	0},
+    {"PressureMotionMaxFactor", PT_DOUBLE, 0, 10.0,SYNAPTICS_PROP_PRESSURE_MOTION_FACTOR,	0 /*float*/,	1},
+    {"GrabEventDevice",       PT_BOOL,   0, 1,     SYNAPTICS_PROP_GRAB,	8,	0},
+    {"TapAndDragGesture",     PT_BOOL,   0, 1,     SYNAPTICS_PROP_GESTURES,	8,	0},
+    {"AreaLeftEdge",          PT_INT,    0, 10000, SYNAPTICS_PROP_AREA,	32,	0},
+    {"AreaRightEdge",         PT_INT,    0, 10000, SYNAPTICS_PROP_AREA,	32,	1},
+    {"AreaTopEdge",           PT_INT,    0, 10000, SYNAPTICS_PROP_AREA,	32,	2},
+    {"AreaBottomEdge",        PT_INT,    0, 10000, SYNAPTICS_PROP_AREA,	32,	3},
+    {"HorizHysteresis",       PT_INT,    0, 10000, SYNAPTICS_PROP_NOISE_CANCELLATION, 32,	0},
+    {"VertHysteresis",        PT_INT,    0, 10000, SYNAPTICS_PROP_NOISE_CANCELLATION, 32,	1},
+    {"ClickPad",              PT_BOOL,   0, 1,     SYNAPTICS_PROP_CLICKPAD,	8,	0},
+    {"RightButtonAreaLeft",   PT_INT, INT_MIN, INT_MAX, SYNAPTICS_PROP_SOFTBUTTON_AREAS,	32,	0},
+    {"RightButtonAreaRight",  PT_INT, INT_MIN, INT_MAX, SYNAPTICS_PROP_SOFTBUTTON_AREAS,	32,	1},
+    {"RightButtonAreaTop",    PT_INT, INT_MIN, INT_MAX, SYNAPTICS_PROP_SOFTBUTTON_AREAS,	32,	2},
+    {"RightButtonAreaBottom", PT_INT, INT_MIN, INT_MAX, SYNAPTICS_PROP_SOFTBUTTON_AREAS,	32,	3},
+    {"MiddleButtonAreaLeft",  PT_INT, INT_MIN, INT_MAX, SYNAPTICS_PROP_SOFTBUTTON_AREAS,	32,	4},
+    {"MiddleButtonAreaRight", PT_INT, INT_MIN, INT_MAX, SYNAPTICS_PROP_SOFTBUTTON_AREAS,	32,	5},
+    {"MiddleButtonAreaTop",   PT_INT, INT_MIN, INT_MAX, SYNAPTICS_PROP_SOFTBUTTON_AREAS,	32,	6},
+    {"MiddleButtonAreaBottom", PT_INT, INT_MIN, INT_MAX, SYNAPTICS_PROP_SOFTBUTTON_AREAS,	32,	7},
+    { NULL, 0, 0, 0, 0 }
 };
 
 static double

commit 0434d7776640861d0c8c19a02c2445d2f61627f8
Author: Peter Hutterer <peter.hutterer@who-t.net>
Date:   Thu May 3 11:49:31 2012 +1000

    Indent consistently
    
    x-indent-all.sh from xorg/util/modular as of
    c2d630fab65dbe3409af3947f6f442782ddb026f
    
    Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
    Reviewed-by: Chase Douglas <chase.douglas@canonical.com>

diff --git a/include/synaptics-properties.h b/include/synaptics-properties.h
index 8c20a0c..ad7a502 100644
--- a/include/synaptics-properties.h
+++ b/include/synaptics-properties.h
@@ -164,4 +164,4 @@
 /* 32 Bit Integer, 2 values, horizontal hysteresis, vertical hysteresis */
 #define SYNAPTICS_PROP_NOISE_CANCELLATION "Synaptics Noise Cancellation"
 
-#endif /* _SYNAPTICS_PROPERTIES_H_ */
+#endif                          /* _SYNAPTICS_PROPERTIES_H_ */
diff --git a/include/synaptics.h b/include/synaptics.h
index eee9c6e..3d4832f 100644
--- a/include/synaptics.h
+++ b/include/synaptics.h
@@ -29,36 +29,35 @@
  *			Used by driver and the shared memory configurator
  *****************************************************************************/
 typedef enum {
-    RT_TAP = 0,				    /* Right top corner */
-    RB_TAP,				    /* Right bottom corner */
-    LT_TAP,				    /* Left top corner */
-    LB_TAP,				    /* Left bottom corner */
-    F1_TAP,				    /* Non-corner tap, one finger */
-    F2_TAP,				    /* Non-corner tap, two fingers */
-    F3_TAP,				    /* Non-corner tap, three fingers */
+    RT_TAP = 0,                 /* Right top corner */
+    RB_TAP,                     /* Right bottom corner */
+    LT_TAP,                     /* Left top corner */
+    LB_TAP,                     /* Left bottom corner */
+    F1_TAP,                     /* Non-corner tap, one finger */
+    F2_TAP,                     /* Non-corner tap, two fingers */
+    F3_TAP,                     /* Non-corner tap, three fingers */
     MAX_TAP
 } TapEvent;
 
 typedef enum {
-    F1_CLICK1 = 0,			    /* Click left, one finger */
-    F2_CLICK1,				    /* Click left, two fingers */
-    F3_CLICK1,				    /* Click left, three fingers */
+    F1_CLICK1 = 0,              /* Click left, one finger */
+    F2_CLICK1,                  /* Click left, two fingers */
+    F3_CLICK1,                  /* Click left, three fingers */
     MAX_CLICK
 } ClickFingerEvent;
 
-#define SYN_MAX_BUTTONS 12		    /* Max number of mouse buttons */
+#define SYN_MAX_BUTTONS 12      /* Max number of mouse buttons */
 
 #define SHM_SYNAPTICS 23947
-typedef struct _SynapticsSHM
-{
-    int version;			    /* Driver version */
+typedef struct _SynapticsSHM {
+    int version;                /* Driver version */
 
     /* Current device state */
-    int x, y;				    /* actual x, y coordinates */
-    int z;				    /* pressure value */
-    int numFingers;			    /* number of fingers */
-    int fingerWidth;			    /* finger width value */
-    int left, right, up, down;		    /* left/right/up/down buttons */
+    int x, y;                   /* actual x, y coordinates */
+    int z;                      /* pressure value */
+    int numFingers;             /* number of fingers */
+    int fingerWidth;            /* finger width value */
+    int left, right, up, down;  /* left/right/up/down buttons */
     Bool multi[8];
     Bool middle;
 } SynapticsSHM;
@@ -69,4 +68,4 @@ typedef struct _SynapticsSHM
 #define SBR_MIN 10
 #define SBR_MAX 1000
 
-#endif /* _SYNAPTICS_H_ */
+#endif                          /* _SYNAPTICS_H_ */
diff --git a/src/alpscomm.c b/src/alpscomm.c
index 8988e6b..0bf0447 100644
--- a/src/alpscomm.c
+++ b/src/alpscomm.c
@@ -39,14 +39,14 @@
 #include "ps2comm.h"
 #include <xf86.h>
 
-
 /* Wait for the channel to go silent, which means we're in sync */
 static void
 ALPS_sync(int fd)
 {
     byte buffer[64];
+
     while (xf86WaitForInput(fd, 250000) > 0) {
-	xf86ReadSerial(fd, &buffer, 64);
+        xf86ReadSerial(fd, &buffer, 64);
     }
 }
 
@@ -98,7 +98,7 @@ ALPS_packet_ok(struct CommData *comm)
 {
     /* ALPS absolute mode packets start with 0b11111mrl */
     if ((comm->protoBuf[0] & 0xf8) == 0xf8)
-	return TRUE;
+        return TRUE;
     return FALSE;
 }
 
@@ -108,24 +108,23 @@ ALPS_get_packet(struct CommData *comm, InputInfoPtr pInfo)
     int c;
 
     while ((c = XisbRead(comm->buffer)) >= 0) {
-	unsigned char u = (unsigned char)c;
-
-	comm->protoBuf[comm->protoBufTail++] = u;
-
-	if (comm->protoBufTail == 3) { /* PS/2 packet received? */
-	    if ((comm->protoBuf[0] & 0xc8) == 0x08) {
-		comm->protoBufTail = 0;
-		return TRUE;
-	    }
-	}
-
-	if (comm->protoBufTail >= 6) { /* Full packet received */
-	    comm->protoBufTail = 0;
-	    if (ALPS_packet_ok(comm))
-		return TRUE;
-	    while ((c = XisbRead(comm->buffer)) >= 0)
-		;		   /* If packet is invalid, re-sync */
-	}
+        unsigned char u = (unsigned char) c;
+
+        comm->protoBuf[comm->protoBufTail++] = u;
+
+        if (comm->protoBufTail == 3) {  /* PS/2 packet received? */
+            if ((comm->protoBuf[0] & 0xc8) == 0x08) {
+                comm->protoBufTail = 0;
+                return TRUE;
+            }
+        }
+
+        if (comm->protoBufTail >= 6) {  /* Full packet received */
+            comm->protoBufTail = 0;
+            if (ALPS_packet_ok(comm))
+                return TRUE;
+            while ((c = XisbRead(comm->buffer)) >= 0);  /* If packet is invalid, re-sync */
+        }
     }
 
     return FALSE;
@@ -157,48 +156,50 @@ ALPS_process_packet(unsigned char *packet, struct SynapticsHwState *hw)
 
     hw->millis = GetTimeInMillis();
 
-    x = (packet[1] & 0x7f) | ((packet[2] & 0x78) << (7-3));
-    y = (packet[4] & 0x7f) | ((packet[3] & 0x70) << (7-4));
+    x = (packet[1] & 0x7f) | ((packet[2] & 0x78) << (7 - 3));
+    y = (packet[4] & 0x7f) | ((packet[3] & 0x70) << (7 - 4));
     z = packet[5];
 
-    if (z == 127) {    /* DualPoint stick is relative, not absolute */
-	hw->left  = packet[3] & 1;
-	hw->right = (packet[3] >> 1) & 1;
-	return;
+    if (z == 127) {             /* DualPoint stick is relative, not absolute */
+        hw->left = packet[3] & 1;
+        hw->right = (packet[3] >> 1) & 1;
+        return;
     }
 
     /* Handle normal packets */
     hw->x = hw->y = hw->z = hw->numFingers = hw->fingerWidth = 0;
     hw->left = hw->right = hw->up = hw->down = hw->middle = FALSE;
     for (i = 0; i < 8; i++)
-	hw->multi[i] = FALSE;
+        hw->multi[i] = FALSE;
 
     if (z > 0) {
-	hw->x = x;
-	hw->y = y;
+        hw->x = x;
+        hw->y = y;
     }
     hw->z = z;
     hw->numFingers = (z > 0) ? 1 : 0;
     hw->fingerWidth = 5;
 
-    left  |= (packet[2]     ) & 1;
-    left  |= (packet[3]     ) & 1;
+    left |= (packet[2]) & 1;
+    left |= (packet[3]) & 1;
     right |= (packet[3] >> 1) & 1;
     if (packet[0] == 0xff) {
-	int back    = (packet[3] >> 2) & 1;
-	int forward = (packet[2] >> 2) & 1;
-	if (back && forward) {
-	    middle = 1;
-	    back = 0;
-	    forward = 0;


Reply to: