summaryrefslogtreecommitdiff
path: root/qt/qt-2.3.10.patch/tslib.patch
blob: 47837d7a5d0d9aac21082e1c752eaebf25bddef8 (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
Index: qt-2.3.10/src/kernel/qwsmouse_qws.cpp
===================================================================
--- qt-2.3.10.orig/src/kernel/qwsmouse_qws.cpp	2005-02-16 00:53:53.090339898 +0100
+++ qt-2.3.10/src/kernel/qwsmouse_qws.cpp	2005-02-16 00:54:43.059069292 +0100
@@ -1878,30 +1878,33 @@
  */
 void QTSLibHandlerPrivate::interpolateSample() {
 #ifdef QT_QWS_TSLIB
-    static struct ts_sample samples[25];
-    int index = -1;
+#define TSLIB_MAX_SAMPLES 25
+    static struct ts_sample samples[TSLIB_MAX_SAMPLES];
+    int index = 0;
+    int read_samples = 0;
     int ret;
 
     do {
-        /* fill only the last sample again */
-        if ( index >= 25 )
-            index = 24;
-
+        /* do not access negative arrays */
+        if ( index < 0 )
+            index = 0;
+	    
         /* we're opened non-blocking */
-        if((ret= ts_read_raw(m_ts, &samples[index], 1 ) ) !=  1 ) {
+        if((ret= ts_read_raw(m_ts, &samples[index], 1 ) ) !=  1 )
             /* no event yet, so try again */
-            if (ret==-1 ) {
-                index--;
+            if (ret==-1 )
                 continue;
-            }
-        }
-    }while (samples[index++].pressure != 0);
+	
+	read_samples++;
+	index = (index+1)%TSLIB_MAX_SAMPLES;
+    }while (samples[index == 0 ? (TSLIB_MAX_SAMPLES-1) : index-1].pressure != 0);
 
     /*
-     * index is maximal 25  and we at least one sample
+     * If we've wrapped around each sample is used otherwise
+     * we will use the index
      */
-    if( index >= 25 )
-        index = 24;
+    index = read_samples >= TSLIB_MAX_SAMPLES ?
+            (TSLIB_MAX_SAMPLES-1 ) : index;
     int x, y;
 
     /*