hi

I am currently implementing support for XInput(2) devices in GNU Xnee, starting out with recording events.

Xnee gets copies of events from the X Server (using the RECORD extension). It seems to be a problem in the RECORD extension regarding XI (or XI(2)), but I am not sure and it would be great to get feedback.

 I'll try to describe the problem as good as I can.

 ---

When reading the XInput spec and the corresponding source code I understand it as one XI2 event is packed into two "normal" events. I started by implementing support for MotionEvents. This worked out rather well. Xnee receives four "normal" events and packs them into two XI2 events (one from the master and one from the slave) and prints them out.

 When moving a pointer one pixel Xnee gets (event, detail):
   83 detail=0
   78 detail=9
   83 detail=0
   78 detail=13
The event base for XI is 78, so it looks ok to me. The detail is set to the deviceid of the input device (when not 0).

But when adding support for ButtonPress and ButtonRelease I don't get the 4 events for every press (or release). And the detail is always set to the number of the button pressed.

 When pressing a button Xnee gets (event, detail):
    81 detail=1
    81 detail=1
    82 detail=2
    82 detail=2

When reading the source code of XInputWireToEvent (libXi/src/XExtInt.c) it looks as if the client side of XI does pack two events together to one.

Since RECORD doesn't give Xnee normal client side events (as normal apps get from client libs) but rather "limited" copies directly from the server, it seems to be something odd in the RECORD extension (or with my code).

Most of my tests are done using swinput (Linux module) with support for 8 input devices, but I've tested with real devices as well.



 Any input is welcome.

 regards, Henrik Sandklef





GNU Xnee version:
============================================
Latest on Branch: xinput2-support
  with some minor local modifications

My system:
============================================
name of display:    :2.0
version number:    11.0
vendor string:    The X.Org Foundation
vendor release number:    10706000
X.Org version: 1.7.6
maximum request size:  16777212 bytes
motion buffer size:  256
bitmap unit, bit order, padding:    32, LSBFirst, 32
image byte order:    LSBFirst
number of supported pixmap formats:    7
supported pixmap formats:
    depth 1, bits_per_pixel 1, scanline_pad 32
    depth 4, bits_per_pixel 8, scanline_pad 32
    depth 8, bits_per_pixel 8, scanline_pad 32
    depth 15, bits_per_pixel 16, scanline_pad 32
    depth 16, bits_per_pixel 16, scanline_pad 32
    depth 24, bits_per_pixel 32, scanline_pad 32
    depth 32, bits_per_pixel 32, scanline_pad 32
keycode range:    minimum 8, maximum 255
focus:  window 0x3200004, revert to Parent
number of extensions:    27
    BIG-REQUESTS
    Composite
    DAMAGE
    DOUBLE-BUFFER
    DPMS
    DRI2
    GLX
    Generic Event Extension
    MIT-SCREEN-SAVER
    MIT-SHM
    RANDR
    RECORD
    RENDER
    SECURITY
    SGI-GLX
    SHAPE
    SYNC
    X-Resource
    XC-MISC
    XFIXES
    XFree86-DGA
    XFree86-VidModeExtension
    XINERAMA
    XInputExtension
    XKEYBOARD
    XTEST
    XVideo

_______________________________________________
xorg@lists.freedesktop.org: X.Org support
Archives: http://lists.freedesktop.org/archives/xorg
Info: http://lists.freedesktop.org/mailman/listinfo/xorg
Your subscription address: arch...@mail-archive.com

Reply via email to