On Wed, May 26, 2010 at 23:51:45 +0300, Sami Liedes wrote:

> This also affects trying to set some options with synclient:
> 
> ------------------------------------------------------------
> $ synclient VertEdgeScroll=0
> Float properties not available.
>    VertEdgeScroll          = format mismatch (32)
> X Error of failed request:  BadMatch (invalid parameter attributes)
>   Major opcode of failed request:  141 (XInputExtension)
>   Minor opcode of failed request:  37 (X_ChangeDeviceProperty)
>   Serial number of failed request:  22
>   Current serial number in output stream:  25
> ------------------------------------------------------------
> 
> For me, only some of the options in -l are garbage (and setting the
> rest works; but my version is 1.2.2-2, the original submitter had
> 1.2.1-1):
> 
Can you run 'xtrace -I . synclient -l' with the attached file in the
current directory, and send us the output?

Thanks,
Julien
EXTENSION "XInputExtension" XInput
USE core

TYPE FP1616 FIXED

#define ra(a) { #a , parameterXInput ## a , NULL,NULL,NULL}
#define rb(a) { #a , parameterXInput ## a , returnXInput ## a ,NULL,NULL}
REQUESTS
UNKNOWN /* 0 */
GetExtensionVersion RESPONDS /* 1 */
ListInputDevices RESPONDS /* 2 */
OpenDevice RESPONDS /* 3 */
CloseDevice /* 4 */
SetDeviceMode RESPONDS /* 5 */
SelectExtensionEvent /* 6 */
GetSelectedExtensionEvents RESPONDS /* 7 */
ChangeDeviceDontPropagateList /* 8 */
GetDeviceDontPropagateList RESPONDS /* 9 */
GetDeviceMotionEvents RESPONDS /* 10 */
ChangeKeyboardDevice RESPONDS /* 11 */
ChangePointerDevice RESPONDS /* 12 */
GrabDevice RESPONDS /* 13 */
UngrabDevice /* 14 */
GrabDeviceKey /* 15 */
UngrabDeviceKey /* 16 */
GrabDeviceButton /* 17 */
UngrabDeviceButton /* 18 */
AllowDeviceEvents /* 19 */
GetDeviceFocus RESPONDS /* 20 */
SetDeviceFocus /* 21 */
GetFeedbackControl RESPONDS /* 22 */
ChangeFeedbackControl /* 23 */
GetDeviceKeyMapping RESPONDS /* 24 */
ChangeDeviceKeyMapping /* 25 */
GetDeviceModifierMapping RESPONDS /* 26 */
SetDeviceModifierMapping RESPONDS /* 27 */
GetDeviceButtonMapping RESPONDS /* 28 */
SetDeviceButtonMapping RESPONDS /* 29 */
QueryDeviceState RESPONDS /* 30 */
SendExtensionEvent /* 31 */
DeviceBell /* 32 */
SetDeviceValuators RESPONDS /* 33 */
GetDeviceControl RESPONDS /* 34 */
ChangeDeviceControl RESPONDS /* 35 */
# XI 1.5
ListDeviceProperties RESPONDS /* 36 */
ChangeDeviceProperty /* 37 */
DeleteDeviceProperty /* 38 */
GetDeviceProperty RESPONDS /* 39 */

# XI 2
XIQueryPointer RESPONDS /* 40 */
XIWarpPointer /* 41 */
XIChangeCursor /* 42 */
XIChangeHierarchy /* 43 */
XISetClientPointer /* 44 */
XIGetClientPointer RESPONDS /* 45 */
XISelectEvents /* 46 */
XIQueryVersion RESPONDS /* 47 */
XIQueryDevice UNSUPPORTED RESPONDS /* 48 */
XISetFocus /* 49 */
XIGetFocus RESPONDS /* 50 */
XIGrabDevice /* 51 */
XIUngrabDevice UNSUPPORTED /* 52 */
XIAllowEvents UNSUPPORTED /* 53 */
XIPassiveGrabDevice UNSUPPORTED RESPONDS /* 54 */
XIPassiveUngrabDevice UNSUPPORTED /* 55 */
XIListProperties RESPONDS /* 56 */
XIChangeProperty /* 57 */
XIDeleteProperty /* 58 */
XIGetProperty RESPONDS /* 59 */
XIGetSelectedEvents UNSUPPORTED /* 60 */
END

EVENTS
DeviceValuator
DeviceKeyPress
DeviceKeyRelease
DeviceButtonPress
DeviceButtonRelease
DeviceMotionNotify
DeviceFocusIn
DeviceFocusOut
ProximityIn
ProximityOut
DeviceStateNotify
DeviceMappingNotify
ChangeDeviceNotify
DeviceKeystateNotify
DeviceButtonstateNotify
DevicePresenceNotify
DevicePropertyNotify
END

ERRORS
BadDevice
BadEvent
BadMode
DeviceBusy
BadClass
END

CONSTANTS device_change
0       Added
1       Removed
2       Enabled
3       Disabled
4       Unrecoverable
END

CONSTANTS syncmode
0       AsyncThisDevice
1       SyncThisDevice
2       ReplayThisDevice
3       AsyncOtherDevice
4       AsyncAll
5       SyncAll
END

CONSTANTS device_use
0       Pointer
1       Keyboard
2       ExtensionDevice
3       ExtensionKeyboard
4       ExtensionPointer
END

CONSTANTS notify_mode
0       Normal
1       Grab
2       Ungrab
3       WhileGrabbed
4       PassiveGrab
5       PassiveUngrab
END

CONSTANTS notify_detail
0       Ancestor
1       Virtual
2       Inferior
3       Nonlinear
4       NonlinearVirtual
5       Pointer
6       PointerRoot
7       DetailNone
END

CONSTANTS usexkeyboard
0xFF    UseXKeyboard
END

CONSTANTS anykey
0x00    AnyKey
END

CONSTANTS anybutton
0x00    AnyButton
END

# there is only one set of constants in the header files for this,
# so I assume this are the correct values and what is described for most
# other status values in the XIproto.ps is just bogus
CONSTANTS device_status
0       Success
1       AlreadyGrabbed
2       InvalidTime
3       NotViewable
4       Frozen
END

CONSTANTS input_class_id
0       key
1       button
2       valuator
3       feedback
4       proximity
5       focus
6       other
END

CONSTANTS device_mode
0       relative
1       absolute
END

CONSTANTS device_mode_and_prox
0       "relative, in proximity"
1       "absolute, in proximity"
2       "relative, out of proximity"
3       "absolute, out of proximity"
END

BITMASK classes_reported
0x01    "reporting keys"
0x02    "reporting buttons"
0x04    "reporting valuators"
0x40    absolute
0x80    "out of proximity"
END

CONSTANTS feedback_class
0       Kbd
1       Ptr
2       String
3       Integer
4       Led
5       Bell
END

CONSTANTS auto_repeat_mode
0       Off
1       On
2       Default
END

BITMASK dv_pointer
1<<0    AccelNum
1<<1    AccelDenom
1<<2    Threshold
END

BITMASK dv_keyboardbellled
1<<0    KeyClickPercent
1<<1    Percent
1<<2    Pitch
1<<3    Duration
1<<4    Led
1<<5    LedMode
1<<6    Key
1<<7    AutoRepeatMode
END
BITMASK dv_string
1<<0    String
END
BITMASK dv_integer
1<<0    Integer
END

CONSTANTS devicecontroltype
0       Resolution?
1       RESOLUTION
2       ABS_CALIB
3       CORE
4       ENABLE
5       ABS_AREA
END

CONSTANTS changereason
1       SlaveSwitch
2       DeviceChange
END
TYPE CHANGEREASON ENUM8 changereason

REQUEST GetExtensionVersion
 4      len     COUNT16
 8      name    STRING8
END

RESPONSE GetExtensionVersion
 8      major_version   UINT16
10      minor_version   UINT16
12      present BOOL
END

REQUEST ListInputDevices ALIASES Empty

LIST AXISINFO length 12
0       resolution      UINT32
4       min     UINT32
8       max     UINT32
END

# /* that's what xspecs says it would like:
# LIST INPUTINFO variable length 4
# //    {       0,      "class id",     ft_ENUM8,       c_class_id},
#       {       0,      "\0",   ft_IF8, (void*)structpartKEYINFO},
#       {       0,      "\1",   ft_IF8, (void*)structpartBUTTONINFO},
#       {       0,      "\2",   ft_IF8, (void*)structpartVALUATORINFO},
# 1     len     COUNT8
# 0     unsupported     LISTofCARD8
# END
#
# LIST DEVICEINFO length 8
# 0     type    CARD32
# 4     id      CARD8
# 6     use     ENUM8 device_use
# 5     "#classes"      COUNT8
# 8     classes LISTofINPUTINFO
# LATER name    LISTofSTRING8
# END
#
# RESPONSE ListInputDevices
#  8    #devices        COUNT8
# 32    devices LISTofDEVICEINFO
# END
#
# but the implementation in reality it is totally different:
#
# first come all the device structs, then all the INPUTINFO structs,
# then all the names. To know how many INPUTINFO structs there are,
# one would need to sum the numbers from the devices, which we cannot
# do yet. So we assume that none will have a name with at most 2 characters:

LIST INPUTINFO variable min-length 4
IF 0 CARD8 0
 2      "min keycode"   CARD8
 3      "max keycode"   CARD8
 4      "#keys" UINT16
 NEXT 8
ELSEIF 0 CARD8 1
 2      "#buttons"      CARD16
 NEXT 4
ELSEIF 0 CARD8 2
 2      "#axes" CARD16
 3      mode    ENUM8 device_mode
 4      "motion buffer size"    UINT32
 2      "#axes" COUNT16
 8      axes    LISTofAXISINFO
ELSE
# otherwise we assume that it is time for the strings
0       len     COUNT8
1       name    STRING8
END

LIST DEVICEINFO length 8
0       type    CARD32
4       id      CARD8
5       "#classes"      UINT8
6       use     ENUM8 device_use
END

RESPONSE ListInputDevices
 8      "#devices"      COUNT8
32      devices LISTofDEVICEINFO
RESET_COUNTER
LATER   infos   LISTofINPUTINFO
END

# The rest I had no program to test with. Judging from the problems
# above, that might mean the actual code is totally different, too

templateREQUEST Device
 4      device  CARD8
END
REQUEST OpenDevice ALIASES Device

LIST INPUTCLASSINFO length 2
0       class   ENUM8 input_class_id
1       "event type base"       CARD8
END
RESPONSE OpenDevice
 8      "#classes"      COUNT8
32      classes LISTofINPUTCLASSINFO
END

REQUEST CloseDevice ALIASES Device

REQUEST SetDeviceMode
 4      device  CARD8
 5      mode    ENUM8 device_mode
END

templateRESPONSE Status
 8      status  CARD8 constants device_status
END
RESPONSE SetDeviceMode ALIASES Status

TYPE LISTofEVENTCLASS LISTofCARD32

REQUEST SelectExtensionEvent
 4      window  WINDOW
 8      count   UINT16
12      "desired events"        LISTofEVENTCLASS
END

REQUEST GetSelectedExtensionEvents
 4      window  WINDOW
END
RESPONSE GetSelectedExtensionEvents
 8      "#this client"  COUNT16
32      "this client"   LISTofEVENTCLASS
10      "#all clients"  COUNT16
LATER   "all clients"   LISTofEVENTCLASS
END

REQUEST ChangeDeviceDontPropagateList
 4      window  WINDOW
 8      count   COUNT16
10      mode    ENUM8 device_mode
12      "desired events"        LISTofEVENTCLASS
END

REQUEST GetDeviceDontPropagateList ALIASES GetSelectedExtensionEvents

RESPONSE GetDeviceDontPropagateList
 8      count   COUNT16
32      list    LISTofEVENTCLASS
END

REQUEST GetDeviceMotionEvents
 4      start-time      TIMESTAMP constants curtime
 8      stop-time       TIMESTAMP constants curtime
10      device  CARD8
END

LIST DEVICETIMECOORD variable min-length 4
 0      time    TIMESTAMP
GET  0
# TODO huch?
 0      valuators       LISTofUINT32
END

RESPONSE GetDeviceMotionEvents
 8      "#events"       UINT32
12      axes    UINT8
12      axes    PUSH8
13      mode    ENUM8 device_mode
32      events  LISTofDEVICETIMECOORD
END

REQUEST ChangeKeyboardDevice ALIASES Device
RESPONSE ChangeKeyboardDevice ALIASES Status

REQUEST ChangePointerDevice
 4      xaxis   CARD8
 5      yaxis   CARD8
 6      device  CARD8
END
RESPONSE ChangePointerDevice ALIASES Status

REQUEST GrabDevice
 4      window  WINDOW
 8      time    TIMESTAMP constants curtime
12      "#event"        COUNT16
14      this-device-mode        ENUM8 synmode
15      other-device-mode       ENUM8 synmode
16      owner-events    BOOL
17      device  CARD8
20      events  LISTofEVENTCLASS
END
RESPONSE GrabDevice ALIASES Status

REQUEST UngrabDevice
 4      time    TIMESTAMP constants curtime
 8      device  CARD8
END

REQUEST GrabDeviceKey
 4      window  WINDOW
 8      "#event"        COUNT16
10      modifiers       SETofKEYMASK
12      modifier_device CARD8 constants usexkeyboard
13      grabbed_device  CARD8
14      key     CARD8 constants anykey
15      this-device-mode        ENUM8 synmode
16      other-device-mode       ENUM8 synmode
17      owner-events    BOOL
20      events  LISTofEVENTCLASS
END

REQUEST UngrabDeviceKey
 4      window  WINDOW
 8      modifiers       SETofKEYMASK
10      modifier_device CARD8 constants usexkeyboard
11      key     CARD8 constants anykey
12      grabbed_device  CARD8
END


REQUEST GrabDeviceButton
 4      window  WINDOW
 8      grabbed_device  CARD8
 9      modifier_device CARD8 constants usexkeyboard
10      "#event"        COUNT16
12      modifiers       SETofKEYMASK
14      this-device-mode        ENUM8 synmode
15      other-device-mode       ENUM8 synmode
16      button  UINT8 constants anybutton
17      owner-events    BOOL
20      events  LISTofEVENTCLASS
END

REQUEST UngrabDeviceButton
 4      window  WINDOW
 8      modifiers       SETofKEYMASK
10      modifier_device CARD8 constants usexkeyboard
11      button  UINT8 constants anybutton
12      grabbed_device  CARD8
END

REQUEST AllowDeviceEvents
 4      time    TIMESTAMP constants curtime
 8      mode    ENUM8 syncmode
 9      device  CARD8
END

REQUEST GetDeviceFocus ALIASES Device
RESPONSE GetDeviceFocus
 8      focus   WINDOW constants revertto
12      time    TIMESTAMP
16      revert-to       ENUM8 revertto
END

REQUEST SetDeviceFocus
 4      focus   WINDOW constants revertto
 8      time    TIMESTAMP
12      revert-to       ENUM8 revertto
13      device  CARD8
END

LIST FEEDBACKSTATE variable min-length 4
# XIproto.ps has strange values here, XI.h looks more reasonable:
 0      "feedback class"        ENUM8 feedback_class
 1      id      CARD8
IF 0 CARD8 $feedback_class:Kbd
 4      pitch   UINT16
 6      duration        UINT16
 8      led_mask        CARD32
12      led_values      CARD32
16      global-auto-repeat      BOOL
17      click   UINT8
18      percent UINT8
SET_COUNTER 32
20      auto-repeats    LISTofCARD8
ELSEIF 0 CARD8 $feedback_class:Ptr
# PTR
 6      acceleration    FRACTION16_16
10      treshold        UINT16
NEXT    12
ELSEIF 0 CARD8 $feedback_class:String
 4      "max symbols"   UINT16
 6      "#keysyms"      COUNT16
 8      keysyms LISTofKEYSYM
ELSEIF 0 CARD8 $feedback_class:Integer
 4      resolution      UINT32
 8      min     INT32
12      max     INT32
NEXT 16
ELSEIF 0 CARD8 $feedback_class:Led
 4      mask    CARD32
 8      values  CARD32
NEXT 12
ELSEIF 0 CARD8 $feedback_class:Bell
 4      percent UINT8
 8      pitch   UINT16
10      duration        UINT16
NEXT 12
ELSE
# fallback in case of unsupported:
 2      length  COUNT16
 0      unsupported     LISTofCARD8
END

REQUEST GetFeedbackControl ALIASES Device
RESPONSE GetFeedbackControl
 8      "#feedbacks"    COUNT16
32      feedbacks       LISTofFEEDBACKSTATE
END

REQUEST ChangeFeedbackControl
 8      device  CARD8
 9      "feedback id"   CARD8
12      "feedback class"        ENUM8 feedback_class
13      "feedback id"   CARD8
IF 12 CARD8 $feedback_class:Kbd
 4      mask    BITMASK32 dv_keyboardbellled
16      key     CARD8
17      auto-repeat     ENUM8 auto_repeat_mode
18      click-percent   UINT8
19      bell-percent    UINT8
20      bell-pitch      UINT16
22      bell-duration   UINT16
24      led_mask        CARD32
28      led_values      CARD32
ELSEIF 12 CARD8 $feedback_class:Ptr
 4      mask    BITMASK32 dv_pointer
18      acceleration    FRACTION16_16
22      treshold        UINT16
ELSEIF 12 CARD8 $feedback_class:String
 4      mask    BITMASK32 dv_string
18      "#keysyms"      COUNT16
20      keysyms LISTofCARD32
ELSEIF 12 CARD8 $feedback_class:Integer
 4      mask    BITMASK32 dv_integer
16      integer INT32
ELSEIF 12 CARD8 $feedback_class:Led
 4      mask    BITMASK32 dv_keyboardbellled
16      led_mask        CARD32
20      led_values      CARD32
ELSEIF 12 CARD8 $feedback_class:Bell
 4      mask    BITMASK32 dv_keyboardbellled
16      percent UINT8
20      pitch   INT16
22      duration        INT16
ELSE
14      length  COUNT16
12      unsupported     LISTofCARD8
END

REQUEST GetDeviceKeyMapping
 4      device  CARD8
 5      firstKeyCode    CARD8
 6      count   UINT8
END
RESPONSE GetDeviceKeyMapping
 8      keysSyms/keyCode        UINT8
32      keysyms LISTofCARD32
END

REQUEST ChangeDeviceKeyMapping
 4      device  CARD8
 5      firstKeyCode    CARD8
 6      "#keycodes"     UINT8
 7      "#keySyms/keyCode"      UINT8
 8      keysyms LISTofCARD32
END

REQUEST GetDeviceModifierMapping ALIASES Device
RESPONSE GetDeviceModifierMapping
 8      keycodes/modifier       UINT8
32      keycodes        LISTofCARD8
END

REQUEST SetDeviceModifierMapping
 4      device  CARD8
 5      keycodes/modifier       UINT8
 8      keycodes        LISTofCARD8
END
RESPONSE SetDeviceModifierMapping ALIASES Status

REQUEST GetDeviceButtonMapping ALIASES Device
RESPONSE GetDeviceButtonMapping
 8      l(map)  COUNT8
32      map     LISTofCARD8
END

REQUEST SetDeviceButtonMapping
 4      device  CARD8
 5      l(map)  COUNT8
 8      map     LISTofCARD8
END
RESPONSE SetDeviceButtonMapping ALIASES Status


LIST INPUTSTATE variable min-length 2
 0      class   ENUM8 input_class_id
IF 0 CARD8 $input_class_id:key
 2      "#keys" UINT8
SET_COUNTER     32
 4      "key states"    LISTofCARD8
ELSEIF 0 CARD8 $input_class_id:button
 2      "#buttons"      UINT8
SET_COUNTER     32
 4      "button states" LISTofCARD8
ELSEIF 0 CARD8 $input_class_id:valuator
 2      "#valuators"    COUNT8
 3      mode    ENUM8 device_mode_and_prox
 4      "valuator states"       LISTofCARD32
ELSE
 1      length  COUNT8
 0      unsupported     LISTofCARD8
END

REQUEST QueryDeviceState ALIASES Device
RESPONSE QueryDeviceState
 8      "#classes"      COUNT8
32      classes LISTofINPUTSTATE
END

LIST XiEVENT length 32
 0      event   EVENT
END
REQUEST SendExtensionEvent
 4      destinatione    WINDOW
 8      device  CARD8
 9      propagate       BOOL
12      "#events"       COUNT8
16      events  LISTofXiEVENT
10      "#event classes"        COUNT16
LATER   "desired events"        LISTofEVENTCLASS
END

REQUEST DeviceBell
 4      device  CARD8
 5      "feedback id"   CARD8
 6      "feedback class"        ENUM8 feedback_class
 7      percent INT8
END

REQUEST SetDeviceValuators
 4      device  CARD8
 5      "first valuator"        UINT8
 6      "#valuators"    COUNT8
 8      valuators       LISTofUINT32
END
RESPONSE SetDeviceValuators ALIASES Status

LIST DEVICESTATE variable min-length 4
# this is supposed to be the length, but at least in
# lenny the xserver is still buggy and returns bogus values:
 2      "length (often faulty)" UINT16
# Xspecs says 0, DEVICE_RESOLUTION is 1...
IF 0 CARD16 0
# RESOLUTIONSTATE
 4      "#valuators"    COUNT32
 8      values  LISTofUINT32
 4      "#valuators"    COUNT32
LATER   min_values      LISTofUINT32
 4      "#valuators"    COUNT32
LATER   max_values      LISTofUINT32
ELSEIF 0 CARD16 1
# RESOLUTIONSTATE
 4      "#valuators"    COUNT32
 8      values  LISTofUINT32
 4      "#valuators"    COUNT32
LATER   min_values      LISTofUINT32
 4      "#valuators"    COUNT32
LATER   max_values      LISTofUINT32
ELSEIF 0 CARD16 2
# ABSCALIBSTATE
 4      min_x   UINT32
 8      max_x   UINT32
12      min_y   UINT32
16      max_y   UINT32
20      flip_x  UINT32
24      flip_y  UINT32
28      rotation        UINT32
32      button_threshold        UINT32
NEXT    36
ELSEIF 0 CARD16 3
# CORESTATE
 4      status  CARD8
 5      iscore  BOOL
NEXT 8
ELSEIF 0 CARD16 4
# ENABLESTATE
 4      enable  CARD8
NEXT 8
ELSEIF 0 CARD16 5
# ABSAREASTATE
 4      offset_x        UINT32
 8      offset_y        UINT32
12      width   UINT32
16      height  UINT32
20      screen  CARD32
24      following       CARD32
NEXT    28
ELSE
 2      length  COUNT16
 0      unsupported     LISTofCARD8
END
REQUEST GetDeviceControl
 6      device  CARD8
 4      "device control type"   ENUM16 devicecontroltype
END
RESPONSE GetDeviceControl
 8      status  CARD8 constants device_status
32      states  LISTofDEVICESTATE
END

LIST DEVICECONTROL variable min-length 4
 2      length  UINT16
# Xspecs says 0, DEVICE_RESOLUTION is 1...
IF 0 CARD16 0
# RESOLUTIONCONTOL
 4      "first valuator"        UINT8
 5      "#valuators"    COUNT8
 8      values  LISTofUINT32
ELSEIF 0 CARD16 1
# RESOLUTIONCONTOL
 4      "first valuator"        UINT8
 5      "#valuators"    COUNT8
 8      values  LISTofUINT32
ELSEIF 0 CARD16 2
# ABSCALIBCONTOL
 4      min_x   UINT32
 8      max_x   UINT32
12      min_y   UINT32
16      max_y   UINT32
20      flip_x  UINT32
24      flip_y  UINT32
28      rotation        UINT32
32      button_threshold        UINT32
NEXT    36
ELSEIF 0 CARD16 3
# CORECONTOL
 4      status  CARD8
NEXT    8
ELSEIF 0 CARD16 4
# ENABLECONTOL
 4      enable  CARD8
NEXT    8
ELSEIF 0 CARD16 5
# ABSAREACONTOL
 4      offset_x        UINT32
 8      offset_y        UINT32
12      width   UINT32
16      height  UINT32
20      screen  CARD32
24      following       CARD32
NEXT    28
ELSE
 2      length  COUNT16
 0      unsupported     LISTofCARD8
END

REQUEST ChangeDeviceControl
 6      device  CARD8
 4      "device control type"   ENUM16 devicecontroltype
 8      data    LISTofDEVICECONTROL
END
RESPONSE ChangeDeviceControl ALIASES Status

REQUEST ListDeviceProperties
 4      device  UINT8
END
RESPONSE ListDeviceProperties
 8      nAtoms  COUNT16
32      Atoms   LISTofATOM
END

REQUEST ChangeDeviceProperty
 4      property        ATOM
 8      type    ATOM
12      device  UINT8
13      format  FORMAT8
14      mode    ENUM8 change_mode
16      nUnits  COUNT32
IF 8 ATOM "ATOM"
20      value   LISTofATOM
ELSEIF 8 ATOM "FLOAT"
20      value   LISTofFLOAT32
ELSE
20      value   LISTofFormat
END

REQUEST DeleteDeviceProperty
 4      property        ATOM
 8      device  UINT8
END

REQUEST GetDeviceProperty
 4      property        ATOM
 8      type    ATOM
12      longOffset      UINT32
16      longLength      UINT32
20      device  UINT8
21      delete  BOOL
END
RESPONSE GetDeviceProperty
 8      type    ATOM
12      bytesAfter      UINT32
16      nItems  COUNT32
20      format  FORMAT8
21      device  UINT8
IF 8 ATOM "ATOM"
32      value   LISTofATOM
ELSEIF 8 ATOM "FLOAT"
32      value   LISTofFLOAT32
ELSE
32      value   LISTofFormat
END

STRUCT MODIFIERINFO length 16
 0      base_mods       CARD32
 4      latched_mods    CARD32
 8      locked_mods     CARD32
12      effective_mods  CARD32
END

STRUCT GROUPINFO length 4
0       base_group      CARD8
1       latched_group   CARD8
2       locked_group    CARD8
3       effective_group CARD8
END

REQUEST XIQueryPointer
 4      window  WINDOW
 8      device  UINT16
END
RESPONSE XIQueryPointer
 8      root    WINDOW
12      child   WINDOW
16      root_x  FIXED
20      root_y  FIXED
24      win_x   FIXED
28      win_y   FIXED
32      same_screen     BOOL
34      buttons_len     COUNT16
36      mods    MODIFIERINFO
52      groups  GROUPINFO
56      buttons LISTofCARD8
END

REQUEST XIWarpPointer
 4      src_win WINDOW
 8      dst_win WINDOW
12      src_x   FIXED
16      src_y   FIXED
20      src_width       UINT16
22      src_height      UINT16
24      dst_x   FIXED
28      dst_y   FIXED
32      device  CARD16
END

REQUEST XIChangeCursor
 4      win     WINDOW
 8      cursor  CURSOR
12      device  CARD16
END

CONSTANTS hierarchy_change
1       AddMaster
2       RemoveMaster
3       AttachSlave
4       DetachSlave
END

CONSTANTS change_mode
1       Attach
2       Float
END

LIST HIERARCHYCHANGE variable min-length 8
 0      type    ENUM16 hierarchy_change
 2      length  COUNT16
IF 0 CARD16 $hierarchy_change:AddMaster
 4      name_len        COUNT16
 6      send_core       BOOL
 7      enable  BOOL
 8      name    STRING8
ELSEIF 0 CARD16 $hierarchy_change:RemoveMaster
 4      device  UINT16
 6      return_mode     ENUM8 change_mode
 8      return_pointer  UINT16
10      return_keyboard UINT16
 NEXT   12
ELSEIF 0 CARD16 $hierarchy_change:AttachSlave
 4      device  UINT16
 6      new_master      UINT16
 NEXT   8
ELSEIF 0 CARD16 $hierarchy_change:DetachSlave
 4      device  UINT16
 NEXT   8
ELSE
 0      pad     LISTofCARD32
END

REQUEST XIChangeHierarchy
 4      num_changes     COUNT8
 8      changes LISTofHIERARCHYCHANGE
END

REQUEST XISetClientPointer
 4      win     WINDOW
 8      device  UINT16
END

REQUEST XIGetClientPointer
 4      win     WINDOW
END
RESPONSE XIGetClientPointer
 8      set     BOOL
10      device  UINT16
END

LIST EVENTMASK variable min-length 4
0       device  UINT16
2       mask_len        COUNT16
4       mask    LISTofCARD32
END

REQUEST XISelectEvents
 4      win     WINDOW
 8      num_masks       COUNT16
12      masks   LISTofEVENTMASK
END

REQUEST XIQueryVersion
 4      major   UINT16
 6      minor   UINT16
END
RESPONSE XIQueryVersion
 8      major   UINT16
10      minor   UINT16
END

# TODO: could be > 32bits if the device has more than 2^32 buttons
TYPE SETofBUTTONMASK CARD32

CONSTANTS class
0       KeyClass
1       ButtonClass
2       AxisClass
END

CONSTANTS xi_device_use
1       MasterPointer
2       MasterKeyboard
3       SlavePointer
4       SlaveKeyboard
5       FloatingSlave
END

CONSTANTS xidevice
0       AllDevices
1       AllMasterDevices
END

REQUEST XISetFocus
 4      focus   WINDOW
 8      time    TIMESTAMP
10      device  UINT16
END

REQUEST XIGetFocus
 4      device  UINT16
END
RESPONSE XIGetFocus
 8      focus   WINDOW
END

REQUEST XIGrabDevice
 4      grab_window     WINDOW
 8      time    TIMESTAMP
12      cursor  CURSOR
16      device  UINT16
18      grab_mode       ENUM8   synmode
19      paired_device_mode      ENUM8   synmode
20      owner_events    BOOL
22      mask_len        COUNT16
24      masks   LISTofCARD32
END

REQUEST XIListProperties
 4      device  UINT16
END
RESPONSE XIListProperties
 8      "#properties"   COUNT16
32      properties      LISTofATOM
END

REQUEST XIChangeProperty
 4      device  UINT16
 6      mode    ENUM8   device_mode
 7      format  FORMAT8
 8      property        ATOM
12      type    ATOM
16      num_items       COUNT32
IF 12 ATOM "ATOM"
20      value   LISTofATOM
ELSEIF 12 ATOM "FLOAT"
20      value   LISTofFLOAT32
ELSE
20      value   LISTofFormat
END

REQUEST XIDeleteProperty
 4      device  UINT16
 8      property        ATOM
END

REQUEST XIGetProperty
 4      device  UINT16
 6      delete  BOOL
 8      property        ATOM
12      type    ATOM
16      offset  UINT32
20      len     UINT32
END
RESPONSE XIGetProperty
 8      type    ATOM
12      bytes_after     UINT32
16      num_items       COUNT32
20      format  UINT8
20      format  FORMAT8
IF 8 ATOM "ATOM"
32      value   LISTofATOM
ELSEIF 8 ATOM "FLOAT"
32      value   LISTofFLOAT32
ELSE
32      value   LISTofFormat
END

# Events

# the top-most bit of the device-id (0x80) always means more events to follow.
# TODO: how to express that?

EVENT DeviceValuator
 1      device  CARD8
 4      state   SETofKEYBUTMASK
 6      "#valuators"    COUNT8
 7      "first axis"    CARD8
# should be LISTofINT32?
 8      valuators       LISTofUINT32
END

templateEVENT KeyButtonPointer
# keycode, button, ... depending on actual even
 1      detail  CARD8
 4      "timestamp"     TIMESTAMP
 8      "root window"   WINDOW
12      "event window"  WINDOW
16      "child window"  WINDOW constants none
20      root-x  INT16
22      root-y  INT16
24      event-x INT16
26      event-y INT16
28      state   SETofKEYBUTMASK
30      same-screen     BOOL
31      device  CARD8
END
EVENT DeviceKeyPress ALIASES KeyButtonPointer
EVENT DeviceKeyRelease ALIASES KeyButtonPointer
EVENT DeviceButtonPress ALIASES KeyButtonPointer
EVENT DeviceButtonRelease ALIASES KeyButtonPointer

EVENT DeviceMotionNotify
 1      detail  ENUM8 normalhint
        4       "timestamp"     TIMESTAMP
 8      "root window"   WINDOW
12      "event window"  WINDOW
16      "child window"  WINDOW constants none
20      root-x  INT16
22      root-y  INT16
24      event-x INT16
26      event-y INT16
28      state   SETofKEYBUTMASK
30      same-screen     BOOL
31      device  CARD8
END

templateEVENT Proximity
        4       "timestamp"     TIMESTAMP
 8      "root window"   WINDOW
12      "event window"  WINDOW
16      "child window"  WINDOW constants none
20      root-x  INT16
22      root-y  INT16
24      event-x INT16
26      event-y INT16
28      state   SETofKEYBUTMASK
30      same-screen     BOOL
31      device  CARD8
END
EVENT ProximityIn ALIASES Proximity
EVENT ProximityOut ALIASES Proximity

templateEVENT DeviceFocus
 1      detail  ENUM8 enterdetail
        4       "timestamp"     TIMESTAMP
 8      "event window"  WINDOW
12      mode    ENUM8 grabmode
13      device  CARD8
END
EVENT DeviceFocusOut ALIASES DeviceFocus
EVENT DeviceFocusIn ALIASES DeviceFocus

EVENT DeviceStateNotify
 1      device  CARD8
        4       "timestamp"     TIMESTAMP
11      reported        BITMASK8 classes_reported
 8      "#keys" COUNT8
12      keys    LISTofCARD8
 9      "#buttons"      COUNT8
LATER   buttons LISTofCARD8
10      "#valuators"    COUNT8
LATER   valuators       LISTofCARD32
END

EVENT DeviceKeystateNotify
 1      device  CARD8
 4      keys    LISTofCARD8
END

EVENT DeviceButtonstateNotify
 1      device  CARD8
 4      buttons LISTofCARD8
END

EVENT DeviceMappingNotify
 1      device  CARD8
 4      request CARD8
 5      "first key code"        KEYCODE
 6      count   UINT8
 8      "timestamp"     TIMESTAMP
END

EVENT ChangeDeviceNotify
 1      device  CARD8
 4      "timestamp"     TIMESTAMP
 8      request CARD8
END

EVENT DevicePresenceNotify
 4      timestamp       TIMESTAMP
 8      change  ENUM8 device_change
 9      device  CARD8
10      control CARD16
END

EVENT DevicePropertyNotify
 1      state   ENUM8   newdeleted
 4      timestamp       TIMESTAMP
 8      atom    ATOM
31      device  CARD8
END

STRUCT ModifierInfo length 16
 0      base_mods       CARD32
 4      latched_mods    CARD32
 8      locked_mods     CARD32
12      effective_mods  CARD32
END

STRUCT GroupInfo length 4
0       base_group      CARD8
1       latched_group   CARD8
2       locked_group    CARD8
3       effective_group CARD8
END

EOF

Attachment: signature.asc
Description: Digital signature

Reply via email to