debian/changelog                                   |   10 
 debian/control                                     |    2 
 debian/patches/500_pointer_barrier_thresholds.diff |  559 +++++++++++++++++++++
 debian/patches/series                              |    3 
 4 files changed, 573 insertions(+), 1 deletion(-)

New commits:
commit 775b75fe9b5f46ce437b89a27d106cf823508613
Author: Christopher James Halse Rogers <christopher.halse.rog...@canonical.com>
Date:   Fri Jan 27 21:46:54 2012 +1100

    Bump build-dep to ensure XFIXES 6.0 protocol headers are available

diff --git a/debian/changelog b/debian/changelog
index 3f74559..04c12a5 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -3,6 +3,8 @@ xorg-server (2:1.11.3-0ubuntu9) precise; urgency=low
   * debian/patches/500_pointer_barrier_thresholds.diff:
     - Implement proposed XFIXES 6.0 protocol.  This protocol is subject to
       change, use at own risk!
+  * debian/control:
+    - Bump build-dep on x11proto-fixes to pick up new protocol definition
 
  -- Christopher James Halse Rogers <r...@ubuntu.com>  Fri, 27 Jan 2012 
20:05:42 +1100
 
diff --git a/debian/control b/debian/control
index a80659e..88514fe 100644
--- a/debian/control
+++ b/debian/control
@@ -25,7 +25,7 @@ Build-Depends:
  x11proto-composite-dev (>= 1:0.4),
  x11proto-core-dev (>= 7.0.22),
  x11proto-damage-dev (>= 1.1),
- x11proto-fixes-dev (>= 1:5.0),
+ x11proto-fixes-dev (>= 1:5.0-2ubuntu1),
  x11proto-kb-dev (>= 1.0.3),
  x11proto-xinerama-dev,
  x11proto-randr-dev (>= 1.2.99.3),

commit cca89364a0a78fa66e423bb10eac3f23f4c5c809
Author: Christopher James Halse Rogers <christopher.halse.rog...@canonical.com>
Date:   Fri Jan 27 21:40:17 2012 +1100

    Add initial implementation of XFIXES 6.0 protocol

diff --git a/debian/changelog b/debian/changelog
index 31ee64a..3f74559 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,3 +1,11 @@
+xorg-server (2:1.11.3-0ubuntu9) precise; urgency=low
+
+  * debian/patches/500_pointer_barrier_thresholds.diff:
+    - Implement proposed XFIXES 6.0 protocol.  This protocol is subject to
+      change, use at own risk!
+
+ -- Christopher James Halse Rogers <r...@ubuntu.com>  Fri, 27 Jan 2012 
20:05:42 +1100
+
 xorg-server (2:1.11.3-0ubuntu8) precise; urgency=low
 
   * debian/patches/224_return_BadWindow_not_BadMatch.diff:
diff --git a/debian/patches/500_pointer_barrier_thresholds.diff 
b/debian/patches/500_pointer_barrier_thresholds.diff
new file mode 100644
index 0000000..b1e0859
--- /dev/null
+++ b/debian/patches/500_pointer_barrier_thresholds.diff
@@ -0,0 +1,559 @@
+Index: xorg-server/include/protocol-versions.h
+===================================================================
+--- xorg-server.orig/include/protocol-versions.h       2012-01-27 
20:49:26.085712305 +1100
++++ xorg-server/include/protocol-versions.h    2012-01-27 20:53:59.721697695 
+1100
+@@ -122,7 +122,7 @@
+ #define SERVER_XF86VIDMODE_MINOR_VERSION      2
+ 
+ /* Fixes */
+-#define SERVER_XFIXES_MAJOR_VERSION           5
++#define SERVER_XFIXES_MAJOR_VERSION           6
+ #define SERVER_XFIXES_MINOR_VERSION           0
+ 
+ /* X Input */
+Index: xorg-server/mi/mipointer.c
+===================================================================
+--- xorg-server.orig/mi/mipointer.c    2012-01-27 20:53:59.525697704 +1100
++++ xorg-server/mi/mipointer.c 2012-01-27 20:53:59.721697695 +1100
+@@ -623,6 +623,9 @@
+           }
+       }
+     }
++    if (pScreen->ConstrainCursorHarder)
++       pScreen->ConstrainCursorHarder(pDev, pScreen, mode, &x, &y);
++
+     /* Constrain the sprite to the current limits. */
+     if (x < pPointer->limits.x1)
+       x = pPointer->limits.x1;
+@@ -633,9 +636,6 @@
+     if (y >= pPointer->limits.y2)
+       y = pPointer->limits.y2 - 1;
+ 
+-    if (pScreen->ConstrainCursorHarder)
+-       pScreen->ConstrainCursorHarder(pDev, pScreen, mode, &x, &y);
+-
+     if (pPointer->x != x || pPointer->y != y ||
+             pPointer->pScreen != pScreen)
+         miPointerMoveNoEvent(pDev, pScreen, x, y);
+Index: xorg-server/xfixes/cursor.c
+===================================================================
+--- xorg-server.orig/xfixes/cursor.c   2012-01-27 20:49:26.109712303 +1100
++++ xorg-server/xfixes/cursor.c        2012-01-27 20:54:59.037694528 +1100
+@@ -61,6 +61,7 @@
+ static RESTYPE                CursorHideCountType;
+ static RESTYPE                CursorWindowType;
+ RESTYPE                       PointerBarrierType;
++static RESTYPE                PointerBarrierClientType;
+ static CursorPtr      CursorCurrent[MAXDEVICES];
+ 
+ static DevPrivateKeyRec CursorScreenPrivateKeyRec;
+@@ -129,6 +130,7 @@
+     ConstrainCursorHarderProcPtr ConstrainCursorHarder;
+     CursorHideCountPtr          pCursorHideCounts;
+     struct list                 barriers;
++    struct list                 barrierClients;
+ } CursorScreenRec, *CursorScreenPtr;
+ 
+ #define GetCursorScreen(s) 
((CursorScreenPtr)dixLookupPrivate(&(s)->devPrivates, CursorScreenPrivateKey))
+@@ -1232,14 +1234,77 @@
+ }
+ 
+ static void
++SendBarrierEvent(CursorScreenPtr cs, struct PointerBarrier *barrier,
++               int x, int y, int velocity, Bool threshold_exceeded)
++{
++    PointerBarrierEventClientPtr client;
++    list_for_each_entry(client, &cs->barrierClients, entry) {
++      xXFixesBarrierNotifyEvent       ev;
++      ev.type = XFixesEventBase + XFixesBarrierNotify;
++      ev.subtype = threshold_exceeded ? XFixesBarrierThresholdExceededNotify :
++                                        XFixesBarrierHitNotify;
++      ev.event_id = barrier->barrierEventID;
++      ev.barrier = barrier->barrier;
++      ev.x = x;
++      ev.y = y;
++      ev.velocity = velocity;
++      ev.timestamp = currentTime.milliseconds;
++
++      if (client->client->swapped) {
++          int n;
++
++          swapl(&ev.event_id, n);
++          swapl(&ev.barrier, n);
++          swaps(&ev.x, n);
++          swaps(&ev.y, n);
++          swapl(&ev.velocity, n);
++          swapl(&ev.timestamp, n);
++      }
++      
++      WriteEventsToClient (client->client, 1, (xEvent *) &ev);
++    }
++}
++
++static void
++barrier_calculate_velocity_components (int x1, int y1, int x2, int y2,
++                                     int *vel_x, int *vel_y)
++{
++    static CARD32 last_timestamp = 0;
++    CARD32 timestamp = GetTimeInMillis();
++    int dx, dy;
++    int dt = timestamp - last_timestamp;
++
++    if (last_timestamp == 0) {
++      /* Not much we can do for the first event */
++      *vel_x = 0;
++      *vel_y = 0;
++      last_timestamp = timestamp;
++      return;
++    }
++
++    /* Lets not divide by zero if we can avoid it */
++    dt = dt > 0 ? dt : 1;
++
++    dx = x2 - x1;
++    dy = y2 - y1;
++
++    *vel_x = abs(dx) * 1000.0 / dt;
++    *vel_y = abs(dy) * 1000.0 / dt;
++
++    last_timestamp = timestamp;  
++}
++
++static void
+ CursorConstrainCursorHarder(DeviceIntPtr dev, ScreenPtr screen, int mode, int 
*x, int *y)
+ {
+     CursorScreenPtr cs = GetCursorScreen(screen);
+ 
+     if (!list_is_empty(&cs->barriers) && !IsFloating(dev) && mode == 
Relative) {
+       int ox, oy;
++      int vel_x, vel_y;
+       int dir;
+       struct PointerBarrier *nearest = NULL;
++      PointerBarrierClientPtr c;
+ 
+       /* where are we coming from */
+       miPointerGetPosition(dev, &ox, &oy);
+@@ -1252,11 +1317,27 @@
+        * destination, again finding the nearest barrier and clamping.
+        */
+       dir = barrier_get_direction(ox, oy, *x, *y);
++      barrier_calculate_velocity_components(ox, oy, *x, *y, &vel_x, &vel_y);
+ 
+       nearest = barrier_find_nearest(cs, dir, ox, oy, *x, *y);
+       if (nearest) {
+-          barrier_clamp_to_barrier(nearest, dir, x, y);
++          int velocity = barrier_is_vertical(nearest) ? vel_x : vel_y;
++          Bool threshold_exceeded = (nearest->velocity == 0) ||
++                                    (velocity > nearest->velocity);
++
++          if (!nearest->lastHit) {
++              /* This is the start of a new barrier event */
++              nearest->barrierEventID++;
++          }
+ 
++          if ((!threshold_exceeded || nearest->lastHit) &&
++              (nearest->barrierEventID != nearest->releaseEventID)) {
++              barrier_clamp_to_barrier(nearest, dir, x, y);
++              nearest->hit = TRUE;
++          }
++
++          SendBarrierEvent(cs, nearest, *x, *y, velocity, threshold_exceeded);
++              
+           if (barrier_is_vertical(nearest)) {
+               dir &= ~(BarrierNegativeX | BarrierPositiveX);
+               ox = *x;
+@@ -1267,9 +1348,29 @@
+ 
+           nearest = barrier_find_nearest(cs, dir, ox, oy, *x, *y);
+           if (nearest) {
+-              barrier_clamp_to_barrier(nearest, dir, x, y);
++              velocity = barrier_is_vertical(nearest) ? vel_x : vel_y;
++              threshold_exceeded = (nearest->velocity == 0) ||
++                                   (velocity > nearest->velocity);
++
++              if (!nearest->lastHit) {
++                  /* This is the start of a new barrier event */
++                  nearest->barrierEventID++;
++              }
++
++              if ((!threshold_exceeded || nearest->lastHit) &&
++                  (nearest->barrierEventID != nearest->releaseEventID)) {
++                  barrier_clamp_to_barrier(nearest, dir, x, y);
++                  nearest->hit = TRUE;
++              }
++
++              SendBarrierEvent(cs, nearest, *x, *y, velocity, 
threshold_exceeded);
+           }
+       }
++
++      list_for_each_entry(c, &cs->barriers, entry) {
++          c->barrier.lastHit = c->barrier.hit;
++          c->barrier.hit = FALSE;
++      }
+     }
+ 
+     if (cs->ConstrainCursorHarder) {
+@@ -1288,11 +1389,41 @@
+ 
+     if (ret) {
+       ret->screen = screen;
++      ret->barrier.barrier = stuff->barrier;
+       ret->barrier.x1 = min(stuff->x1, stuff->x2);
+       ret->barrier.x2 = max(stuff->x1, stuff->x2);
+       ret->barrier.y1 = min(stuff->y1, stuff->y2);
+       ret->barrier.y2 = max(stuff->y1, stuff->y2);
+       ret->barrier.directions = stuff->directions & 0x0f;
++      ret->barrier.velocity = 0;
++      ret->barrier.barrierEventID = 0;
++      if (barrier_is_horizontal(&ret->barrier))
++          ret->barrier.directions &= ~(BarrierPositiveX | BarrierNegativeX);
++      if (barrier_is_vertical(&ret->barrier))
++          ret->barrier.directions &= ~(BarrierPositiveY | BarrierNegativeY);
++      list_add(&ret->entry, &cs->barriers);
++    }
++
++    return ret;
++}
++
++static struct PointerBarrierClient *
++CreatePointerBarrierVelocityClient(ScreenPtr screen, ClientPtr client,
++                         xXFixesCreatePointerBarrierVelocityReq *stuff)
++{
++    CursorScreenPtr cs = GetCursorScreen(screen);
++    struct PointerBarrierClient *ret = malloc(sizeof(*ret));
++
++    if (ret) {
++      ret->screen = screen;
++      ret->barrier.barrier = stuff->barrier;
++      ret->barrier.x1 = min(stuff->x1, stuff->x2);
++      ret->barrier.x2 = max(stuff->x1, stuff->x2);
++      ret->barrier.y1 = min(stuff->y1, stuff->y2);
++      ret->barrier.y2 = max(stuff->y1, stuff->y2);
++      ret->barrier.directions = stuff->directions & 0x0f;
++      ret->barrier.velocity = stuff->velocity;
++      ret->barrier.barrierEventID = 0;
+       if (barrier_is_horizontal(&ret->barrier))
+           ret->barrier.directions &= ~(BarrierPositiveX | BarrierNegativeX);
+       if (barrier_is_vertical(&ret->barrier))
+@@ -1365,6 +1496,69 @@
+     return ProcXFixesVector[stuff->xfixesReqType](client);
+ }
+ 
++int
++ProcXFixesCreatePointerBarrierVelocity (ClientPtr client)
++{
++    int err;
++    WindowPtr pWin;
++    struct PointerBarrierClient *barrier;
++    struct PointerBarrier b;
++    REQUEST (xXFixesCreatePointerBarrierVelocityReq);
++
++    REQUEST_SIZE_MATCH(xXFixesCreatePointerBarrierVelocityReq);
++    LEGAL_NEW_RESOURCE(stuff->barrier, client);
++
++    err = dixLookupWindow(&pWin, stuff->window, client, DixReadAccess);
++    if (err != Success) {
++      client->errorValue = stuff->window;
++      return err;
++    }
++
++    /* This sure does need fixing. */
++    if (stuff->num_devices)
++      return BadImplementation;
++
++    b.x1 = stuff->x1;
++    b.x2 = stuff->x2;
++    b.y1 = stuff->y1;
++    b.y2 = stuff->y2;
++
++    if (!barrier_is_horizontal(&b) && !barrier_is_vertical(&b))
++      return BadValue;
++
++    /* no 0-sized barriers */
++    if (barrier_is_horizontal(&b) && barrier_is_vertical(&b))
++      return BadValue;
++
++    if (!(barrier = CreatePointerBarrierVelocityClient(pWin->drawable.pScreen,
++                                                     client, stuff)))
++      return BadAlloc;
++
++    if (!AddResource(stuff->barrier, PointerBarrierType, &barrier->barrier))
++      return BadAlloc;
++
++    return Success;
++}
++
++int
++SProcXFixesCreatePointerBarrierVelocity (ClientPtr client)
++{
++    int n;
++    REQUEST(xXFixesCreatePointerBarrierVelocityReq);
++
++    swaps(&stuff->length, n);
++    REQUEST_SIZE_MATCH(xXFixesCreatePointerBarrierReq);
++    swapl(&stuff->barrier, n);
++    swapl(&stuff->window, n);
++    swaps(&stuff->x1, n);
++    swaps(&stuff->y1, n);
++    swaps(&stuff->x2, n);
++    swaps(&stuff->y2, n);
++    swapl(&stuff->directions, n);
++    swapl(&stuff->velocity, n);
++    return ProcXFixesVector[stuff->xfixesReqType](client);
++}
++
+ static int
+ CursorFreeBarrier(void *data, XID id)
+ {
+@@ -1421,6 +1615,118 @@
+     return ProcXFixesVector[stuff->xfixesReqType](client);
+ }
+ 
++static int
++CursorFreeBarrierClient(void *data, XID id)
++{
++    PointerBarrierEventClientPtr client = data, c;
++    ScreenPtr screen = client->screen;
++    CursorScreenPtr cs = GetCursorScreen(screen);
++
++    /* find and unlink from the screen private */
++    list_for_each_entry(c, &cs->barrierClients, entry) {
++      if (c == client) {
++          list_del(&c->entry);
++          break;
++      }
++    }
++
++    free(client);
++    return Success;
++}
++
++static struct PointerBarrierEventClient *
++CreatePointerBarrierEventClient(ScreenPtr screen, ClientPtr client,
++                                 xXFixesSelectBarrierInputReq *stuff)
++{
++    CursorScreenPtr cs = GetCursorScreen(screen);
++    struct PointerBarrierEventClient *ret = malloc(sizeof(*ret));
++
++    if (ret) {
++      ret->screen = screen;
++      ret->client = client;
++      ret->eventMask = stuff->eventMask;
++      ret->window = stuff->window;
++      ret->resource = FakeClientID (client->index);      
++      list_add(&ret->entry, &cs->barrierClients);
++    }
++
++    return ret;
++}
++
++int
++ProcXFixesSelectBarrierInput (ClientPtr client)
++{
++    int err;
++    WindowPtr pWin;
++    struct PointerBarrierEventClient *eventClient;
++    REQUEST (xXFixesSelectBarrierInputReq);
++
++    REQUEST_SIZE_MATCH(xXFixesSelectBarrierInputReq);
++
++    err = dixLookupWindow(&pWin       , stuff->window, client, DixReadAccess);
++    if (err != Success) {
++      client->errorValue = stuff->window;
++      return err;
++    }
++
++    if (!(eventClient = 
CreatePointerBarrierEventClient(pWin->drawable.pScreen,
++                                                      client,
++                                                      stuff)))
++      return BadAlloc;
++
++    if (!AddResource (eventClient->resource, PointerBarrierClientType, 
eventClient))
++      return BadAlloc;
++    
++    return Success;
++}
++
++int
++SProcXFixesSelectBarrierInput (ClientPtr client)
++{
++    int n;
++    REQUEST(xXFixesSelectBarrierInputReq);
++
++    swaps(&stuff->length, n);
++    REQUEST_SIZE_MATCH(xXFixesSelectBarrierInputReq);
++    swapl(&stuff->window, n);
++    swapl(&stuff->eventMask, n);
++    return ProcXFixesVector[stuff->xfixesReqType](client);
++}
++
++int
++ProcXFixesBarrierReleasePointer (ClientPtr client)
++{
++    int err;
++    struct PointerBarrier *barrier;
++    REQUEST (xXFixesBarrierReleasePointerReq);
++    REQUEST_SIZE_MATCH(xXFixesBarrierReleasePointerReq);
++
++    err = dixLookupResourceByType((void **)&barrier, stuff->barrier,
++                                PointerBarrierType, client,
++                                DixReadAccess);
++    if (err != Success) {
++      client->errorValue = stuff->barrier;
++      return err;
++    }
++
++    barrier->releaseEventID = stuff->event_id;
++    
++    return Success;
++}
++
++int
++SProcXFixesBarrierReleasePointer (ClientPtr client)
++{
++    int n;
++    REQUEST(xXFixesBarrierReleasePointerReq);
++
++    swaps(&stuff->length, n);
++    REQUEST_SIZE_MATCH(xXFixesBarrierReleasePointerReq);
++    swapl(&stuff->barrier, n);
++    swapl(&stuff->event_id, n);
++    return ProcXFixesVector[stuff->xfixesReqType](client);
++}
++
+ Bool
+ XFixesCursorInit (void)
+ {
+@@ -1441,6 +1747,7 @@
+       if (!cs)
+           return FALSE;
+       list_init(&cs->barriers);
++      list_init(&cs->barrierClients);
+       Wrap (cs, pScreen, CloseScreen, CursorCloseScreen);
+       Wrap (cs, pScreen, DisplayCursor, CursorDisplayCursor);
+       Wrap (cs, pScreen, ConstrainCursorHarder, CursorConstrainCursorHarder);
+@@ -1455,8 +1762,10 @@
+                                            "XFixesCursorWindow");
+     PointerBarrierType = CreateNewResourceType(CursorFreeBarrier,
+                                             "XFixesPointerBarrier");
++    PointerBarrierClientType = CreateNewResourceType(CursorFreeBarrierClient,
++                                                   
"XFixesPointerBarrierClient");
+ 
+     return CursorClientType && CursorHideCountType && CursorWindowType &&
+-         PointerBarrierType;
++         PointerBarrierType && PointerBarrierClientType;
+ }
+ 
+Index: xorg-server/xfixes/xfixes.c
+===================================================================
+--- xorg-server.orig/xfixes/xfixes.c   2012-01-27 20:49:26.097712304 +1100
++++ xorg-server/xfixes/xfixes.c        2012-01-27 20:53:59.721697695 +1100
+@@ -100,6 +100,7 @@
+     X_XFixesExpandRegion,         /* Version 3 */
+     X_XFixesShowCursor,                   /* Version 4 */
+     X_XFixesDestroyPointerBarrier,  /* Version 5 */
++    X_XFixesBarrierReleasePointer, /* Version 6 */
+ };
+ 
+ #define NUM_VERSION_REQUESTS  (sizeof (version_requests) / sizeof 
(version_requests[0]))
+@@ -143,6 +144,10 @@
+ /*************** Version 5 ****************/
+     ProcXFixesCreatePointerBarrier,
+     ProcXFixesDestroyPointerBarrier,
++/*************** Version 6 ****************/
++    ProcXFixesCreatePointerBarrierVelocity,
++    ProcXFixesSelectBarrierInput,
++    ProcXFixesBarrierReleasePointer,
+ };
+ 
+ static int
+@@ -209,6 +214,10 @@
+ /*************** Version 5 ****************/
+     SProcXFixesCreatePointerBarrier,
+     SProcXFixesDestroyPointerBarrier,
++/*************** Version 6 ****************/
++    SProcXFixesCreatePointerBarrierVelocity,
++    SProcXFixesSelectBarrierInput,
++    SProcXFixesBarrierReleasePointer,
+ };
+ 
+ static int
+Index: xorg-server/xfixes/xfixes.h
+===================================================================
+--- xorg-server.orig/xfixes/xfixes.h   2012-01-27 20:49:26.133712302 +1100
++++ xorg-server/xfixes/xfixes.h        2012-01-27 20:53:59.721697695 +1100
+@@ -28,6 +28,7 @@
+ #define _XFIXES_H_
+ 
+ #include "resource.h"
++#include "list.h"
+ 
+ extern _X_EXPORT RESTYPE RegionResType;
+ extern _X_EXPORT RESTYPE PointerBarrierType;
+@@ -52,9 +53,27 @@
+ extern _X_EXPORT RegionPtr
+ XFixesRegionCopy (RegionPtr pRegion);
+ 
++typedef struct PointerBarrierEventClient *PointerBarrierEventClientPtr;
++
++struct PointerBarrierEventClient {
++    ScreenPtr screen;
++    ClientPtr client;
++    CARD32    eventMask;
++    XID window;
++    XID resource;
++    struct list entry;
++};
++
++  
++
+ struct PointerBarrier {
++    XID    barrier;
+     CARD16 x1, x2, y1, y2;
+     CARD32 directions;
++    CARD32 velocity;
++    CARD32 barrierEventID;
++    CARD32 releaseEventID;
++    Bool   hit, lastHit;
+ };
+ 
+ 
+Index: xorg-server/xfixes/xfixesint.h
+===================================================================
+--- xorg-server.orig/xfixes/xfixesint.h        2012-01-27 20:49:26.121712303 
+1100
++++ xorg-server/xfixes/xfixesint.h     2012-01-27 20:53:59.721697695 +1100
+@@ -59,6 +59,7 @@
+ #include "windowstr.h"
+ #include "selection.h"
+ #include "xfixes.h"
++#include "list.h"
+ 
+ extern int            XFixesEventBase;
+ 
+@@ -293,6 +294,26 @@
+ int
+ SProcXFixesDestroyPointerBarrier (ClientPtr client);
+ 
++/* Version 6 */
++
++int
++ProcXFixesSelectBarrierInput (ClientPtr client);
++
++int
++SProcXFixesSelectBarrierInput (ClientPtr client);
++
++int
++ProcXFixesCreatePointerBarrierVelocity (ClientPtr client);
++
++int
++SProcXFixesCreatePointerBarrierVelocity (ClientPtr client);
++
++int
++ProcXFixesBarrierReleasePointer (ClientPtr client);
++
++int
++SProcXFixesBarrierReleasePointer (ClientPtr client);
++
+ /* Xinerama */
+ extern int (*PanoramiXSaveXFixesVector[XFixesNumberRequests])(ClientPtr);
+ void PanoramiXFixesInit (void);
diff --git a/debian/patches/series b/debian/patches/series
index c481ca5..16bb1be 100644
--- a/debian/patches/series
+++ b/debian/patches/series
@@ -32,3 +32,6 @@
 222_touch_valuators_absolute.patch
 223_indirect_touch_x_y_valuators.patch
 224_return_BadWindow_not_BadMatch.diff
+
+# Temporary, until it's reviewed & accepted upstream
+500_pointer_barrier_thresholds.diff


-- 
To UNSUBSCRIBE, email to debian-x-requ...@lists.debian.org
with a subject of "unsubscribe". Trouble? Contact listmas...@lists.debian.org
Archive: http://lists.debian.org/e1rqjux-0003vm...@vasks.debian.org

Reply via email to