On Tue, Feb 07, 2012 at 01:07:08PM -0800, Chase Douglas wrote:
> Signed-off-by: Chase Douglas <[email protected]>
> ---
>  src/synaptics.c |    2 +-
>  1 files changed, 1 insertions(+), 1 deletions(-)
> 
> diff --git a/src/synaptics.c b/src/synaptics.c
> index a4c1e5a..106b5ee 100644
> --- a/src/synaptics.c
> +++ b/src/synaptics.c
> @@ -1791,7 +1791,7 @@ HandleTapProcessing(SynapticsPrivate *priv, struct 
> SynapticsHwState *hw,
>  }
>  
>  #define HIST(a) (priv->move_hist[((priv->hist_index - (a) + 
> SYNAPTICS_MOVE_HISTORY) % SYNAPTICS_MOVE_HISTORY)])
> -#define HIST_DELTA(a, b, e) ((HIST((a)).e) - (HIST((b)).e))
> +#define HIST_DELTA(a, b, e) ((int)((HIST((a)).e) - (HIST((b)).e)))

this only casts the result to a signed int, the actual computation is still
undefined for b > a. With the revert, HIST_DELTA is only used in one place
so we could either do it there or just write a helper function like this

diff --git a/src/synaptics.c b/src/synaptics.c
index a4c1e5a..fbc5515 100644
--- a/src/synaptics.c
+++ b/src/synaptics.c
@@ -1791,7 +1791,18 @@ HandleTapProcessing(SynapticsPrivate *priv, struct 
SynapticsHwState *hw,
 }
 
 #define HIST(a) (priv->move_hist[((priv->hist_index - (a) + 
SYNAPTICS_MOVE_HISTORY) % SYNAPTICS_MOVE_HISTORY)])
-#define HIST_DELTA(a, b, e) ((HIST((a)).e) - (HIST((b)).e))
+
+static inline unsigned int
+hist_time_delta(SynapticsMoveHistRec a, SynapticsMoveHistRec b)
+{
+    if (a.millis < b.millis)
+    {
+        xf86Msg(X_ERROR, "Bug: history a < b");
+        return 0;
+    }
+
+    return a.millis - b.millis;
+}
 
 static void
 store_history(SynapticsPrivate *priv, int x, int y, CARD32 millis)
@@ -2016,7 +2027,7 @@ start_coasting(SynapticsPrivate *priv, struct 
SynapticsHwState *hw,
     priv->scroll.coast_delta_x = 0.0;
 
     if ((priv->scroll.packets_this_scroll > 3) && (para->coasting_speed > 
0.0)) {
-       double pkt_time = HIST_DELTA(0, 3, millis) / 1000.0;
+       double pkt_time = hist_time_delta(HIST(0), HIST(3)) / 1000.0;
        if (vert && !circ) {
            double dy = estimate_delta(HIST(0).y, HIST(1).y, HIST(2).y, 
HIST(3).y);
            int sdelta = para->scroll_dist_vert;

Cheers,
  Peter

>  static void
>  store_history(SynapticsPrivate *priv, int x, int y, CARD32 millis)
> -- 
> 1.7.8.3
> 
_______________________________________________
[email protected]: X.Org development
Archives: http://lists.x.org/archives/xorg-devel
Info: http://lists.x.org/mailman/listinfo/xorg-devel

Reply via email to