[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

x11proto-input: Changes to 'upstream-experimental'



Rebased ref, commits from common ancestor:
commit 472309905a66245c9fd420ef64716ec630216323
Author: Peter Hutterer <peter.hutterer@who-t.net>
Date:   Fri Aug 21 14:25:51 2009 +1000

    inputproto 1.9.99.902 (RC 2)
    
    Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>

diff --git a/configure.ac b/configure.ac
index 5682dea..2b6c043 100644
--- a/configure.ac
+++ b/configure.ac
@@ -1,5 +1,5 @@
 AC_PREREQ([2.57])
-AC_INIT([InputProto], [1.9.99.901], [https://bugs.freedesktop.org/enter_bug.cgi?product=xorg])
+AC_INIT([InputProto], [1.9.99.902], [https://bugs.freedesktop.org/enter_bug.cgi?product=xorg])
 AM_INIT_AUTOMAKE([foreign dist-bzip2])
 
 # Require xorg-macros: XORG_CHANGELOG

commit f3f79c0642f33b6a39a0f7fdab2bcb06d9cab0f7
Author: Peter Hutterer <peter.hutterer@who-t.net>
Date:   Tue Aug 25 10:04:01 2009 +1000

    Device cursors are deleted once the window or the device disappear.
    
    Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>

diff --git a/XI2proto.txt b/XI2proto.txt
index a55d06d..706f50a 100644
--- a/XI2proto.txt
+++ b/XI2proto.txt
@@ -575,6 +575,9 @@ are required to be 0.
       protocol's window attributes, display cursor C(w).
     - repeat on parent window until a cursor has been found.
 
+    The device cursor for a given window is reset once the window is destroyed
+    or the device is removed, whichever comes earlier.
+
     If deviceid does not specify a master pointer, a BadDevice error
     is returned.
 

commit ae4588ff0c6e5cc7009e4ac78a3f953bc399bd84
Author: Peter Hutterer <peter.hutterer@who-t.net>
Date:   Fri Aug 21 14:24:23 2009 +1000

    XIWarpPointer needs to take FP1616 for positions.
    
    This was already in the spec but the protocol itself hadn't cought up with
    it.
    
    Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>

diff --git a/XI2proto.h b/XI2proto.h
index 78770c5..2fd91eb 100644
--- a/XI2proto.h
+++ b/XI2proto.h
@@ -372,16 +372,16 @@ typedef struct {
     uint16_t    length;                 /**< Length in 4 byte units */
     Window      src_win;
     Window      dst_win;
-    int16_t     src_x;
-    int16_t     src_y;
+    FP1616      src_x;
+    FP1616      src_y;
     uint16_t    src_width;
     uint16_t    src_height;
-    int16_t     dst_x;
-    int16_t     dst_y;
+    FP1616      dst_x;
+    FP1616      dst_y;
     uint16_t    deviceid;
     uint16_t    pad1;
 } xXIWarpPointerReq;
-#define sz_xXIWarpPointerReq                    28
+#define sz_xXIWarpPointerReq                    36
 
 /**
  * Change the given device's sprite to the given cursor.

commit 8eccc169c045fcf68b5a0974c49a8e6863894cf3
Author: Peter Hutterer <peter.hutterer@who-t.net>
Date:   Fri Aug 21 13:56:11 2009 +1000

    Replace four leftover INT16 with int16_t.

diff --git a/XI2proto.h b/XI2proto.h
index 101bbf1..78770c5 100644
--- a/XI2proto.h
+++ b/XI2proto.h
@@ -372,12 +372,12 @@ typedef struct {
     uint16_t    length;                 /**< Length in 4 byte units */
     Window      src_win;
     Window      dst_win;
-    INT16       src_x;
-    INT16       src_y;
+    int16_t     src_x;
+    int16_t     src_y;
     uint16_t    src_width;
     uint16_t    src_height;
-    INT16       dst_x;
-    INT16       dst_y;
+    int16_t     dst_x;
+    int16_t     dst_y;
     uint16_t    deviceid;
     uint16_t    pad1;
 } xXIWarpPointerReq;

commit 68cdaf8d26e133f700404bca93b18240aa6b8f86
Author: Peter Hutterer <peter.hutterer@who-t.net>
Date:   Fri Aug 21 13:55:52 2009 +1000

    XIQueryPointer only works on master pointers and floating slaves.
    
    Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>

diff --git a/XI2proto.txt b/XI2proto.txt
index 3fd7ac9..a55d06d 100644
--- a/XI2proto.txt
+++ b/XI2proto.txt
@@ -503,6 +503,9 @@ are required to be 0.
     buttons
         Button state.
 
+    If the device is not a master pointer device or not a floating slave
+    pointer, a BadDevice error results.
+
     ┌───
         XIWarpPointer
             src_win:         Window

commit d9aa0917b491e9d6ef887ac59fb7a01fb428fa62
Author: Peter Hutterer <peter.hutterer@who-t.net>
Date:   Tue Aug 18 15:05:09 2009 +1000

    XI2proto: XIChangeCursor request requires a master pointer.
    
    State that the server will return BadDevice in this case.
    
    Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>

diff --git a/XI2proto.txt b/XI2proto.txt
index 21410a6..3fd7ac9 100644
--- a/XI2proto.txt
+++ b/XI2proto.txt
@@ -572,6 +572,9 @@ are required to be 0.
       protocol's window attributes, display cursor C(w).
     - repeat on parent window until a cursor has been found.
 
+    If deviceid does not specify a master pointer, a BadDevice error
+    is returned.
+
     ┌───
         XIChangeHierarchy
             num_changes:     CARD8

commit 4f9d8d49eca460b24daca2a28a2c644f7edc19bd
Author: Peter Hutterer <peter.hutterer@who-t.net>
Date:   Tue Aug 18 15:04:47 2009 +1000

    XI2proto.txt: typo fix
    
    Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>

diff --git a/XI2proto.txt b/XI2proto.txt
index 4b67d66..21410a6 100644
--- a/XI2proto.txt
+++ b/XI2proto.txt
@@ -702,7 +702,7 @@ are required to be 0.
     this client's ClientPointer is set to the given device.
 
     If deviceid does not specify a master pointer or master keyboard, a
-    BadDevice error returned.
+    BadDevice error is returned.
 
     If window does not specify a valid window or client ID and is not None, a
     BadWindow error is returned.

commit 6719ae1ed024270f7fe1cb6bbee1f84cdaeba90c
Author: Peter Hutterer <peter.hutterer@who-t.net>
Date:   Fri Aug 7 10:39:46 2009 +1000

    Remove eventtype field from xXIRawEvent.
    
    With c455db2, raw events were split up into using multiple evtypes instead
    of a sub event type. The eventtype field itself however has not been removed
    and was unused by both the server and the library.
    
    Field converted into a padding field, wire layout stays the same.
    
    Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>

diff --git a/XI2proto.h b/XI2proto.h
index 8fb506d..101bbf1 100644
--- a/XI2proto.h
+++ b/XI2proto.h
@@ -901,9 +901,7 @@ typedef struct
     uint16_t    deviceid;
     Time        time;
     uint32_t    detail;
-    uint16_t    eventtype;              /**< ::XI_Motion, ::XI_ButtonPress,
-                                             ::XI_ButtonRelease, ::XI_KeyPress,
-                                             ::XI_KeyRelease */
+    uint16_t    pad0;
     uint16_t    valuators_len;          /**< Length of trailing valuator
                                              mask in 4 byte units */
     uint32_t    flags;                  /**< ::XIKeyRepeat */

commit 1a7eb6de82bd61fc16f2a3f000d4d3b9d418dcd0
Author: Peter Hutterer <peter.hutterer@who-t.net>
Date:   Tue Aug 4 10:43:52 2009 +1000

    inputproto 1.9.99.901 (RC 1)
    
    Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>

diff --git a/configure.ac b/configure.ac
index 9487382..5682dea 100644
--- a/configure.ac
+++ b/configure.ac
@@ -1,5 +1,5 @@
 AC_PREREQ([2.57])
-AC_INIT([InputProto], [1.9.99.15], [https://bugs.freedesktop.org/enter_bug.cgi?product=xorg])
+AC_INIT([InputProto], [1.9.99.901], [https://bugs.freedesktop.org/enter_bug.cgi?product=xorg])
 AM_INIT_AUTOMAKE([foreign dist-bzip2])
 
 # Require xorg-macros: XORG_CHANGELOG

commit d8a1c1b1aba92e60d2fcad7cdf5abe77f3c9ae10
Author: Peter Hutterer <peter.hutterer@who-t.net>
Date:   Wed Aug 5 14:52:45 2009 +1000

    Revert "XI2proto.txt: grabbing a slave does not detach it anymore."
    
    Detaching a slave device during an explicit grab makes sense from a UI
    perspective. It allows a client to get exclusive access to a device without
    that device's events also feeding into the respective master device.
    
    Thanks to Thomas Jaeger for his contribution.
    
    This reverts commit d0b1e55b876a29a7c820ec12d7b9cb5e081e1944.
    
    Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>

diff --git a/XI2proto.txt b/XI2proto.txt
index 00e5e8d..4b67d66 100644
--- a/XI2proto.txt
+++ b/XI2proto.txt
@@ -1050,7 +1050,11 @@ are required to be 0.
         master keyboard are used. If deviceid specifies a slave pointer
         the modifiers of the master keyboard paired with the attached master
         pointers are used. If deviceid specifies a slave keyboard, the
-        modifiers of the attached master keyboard are used.
+        modifiers of the attached master keyboard are used. Note that
+        activating a grab on a slave device detaches the device from its
+        master. In this case, the modifiers after activation of the grab are
+        from the slave device only and may be different to the modifier state
+        when the grab was triggered.
 
         In the future, if grab_type is GrabtypeButton or GrabtypeKeyboard, the
         device is actively grabbed if:

commit b31776bb5b416ffa15235611954e68d386edf674
Author: Peter Hutterer <peter.hutterer@who-t.net>
Date:   Fri Jul 31 08:52:43 2009 +1000

    XI2proto.txt: document ClientPointer in more detail.
    
    Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>

diff --git a/XI2proto.txt b/XI2proto.txt
index 94e0f81..00e5e8d 100644
--- a/XI2proto.txt
+++ b/XI2proto.txt
@@ -149,6 +149,26 @@ to P is only attempted if neither the XI event, nor the core event has been
 delivered on W. Once an event has been delivered as either XI or core event,
 event processing stops.
 
+4.4. The ClientPointer principle
+
+Many core protocol and some extension requests are ambiguous when multiple
+master devices are available (e.g. QueryPointer does not specfy which pointer).
+The X server does not have the knowledge to chose the contextually correct
+master device. For each client, one master pointer is designated as this
+clients's "ClientPointer". Whenever a client sends an ambiguous request (e.g.
+QueryPointer), the ClientPointer or the keyboard paired with the ClientPointer
+is chosen to provide the data for this request.
+
+This ClientPointer may be explicitly assigned to a client with the
+SetClientPointer call. If no ClientPointer is set when a client issues an
+ambiguous request, the server choses one device as the ClientPointer. The
+method of chosing a ClientPointer from the available master pointers is
+implementation-specific.
+
+If the master pointer currently set as ClientPointer for one or more clients is
+removed, the server may either unset the ClientPointer setting or change the
+ClientPointer to a different master pointer.
+
                               ❧❧❧❧❧❧❧❧❧❧❧
 5. Data types
 
@@ -672,7 +692,8 @@ are required to be 0.
     Some protocol requests are ambiguous and the server has to choose a device
     to provide data for a request or a reply. By default, the server will
     choose a client's ClientPointer device to provide the data, unless the
-    client currently has a grab on another device.
+    client currently has a grab on another device. See section 4.4 for more
+    details.
 
     If win is None, the ClientPointer for this client is set to the given
     device. Otherwise, if win is a valid window, the ClientPointer for the

commit 221aed39ac45ce4bf3b28c7956bc00ea3c9dbf57
Author: Peter Hutterer <peter.hutterer@who-t.net>
Date:   Tue Jul 28 11:15:12 2009 +1000

    XI2proto.txt: don't put field names in quotes.
    
    This was done inconsistently anyway so get rid of it alltogether.
    
    Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>

diff --git a/XI2proto.txt b/XI2proto.txt
index ec930d3..94e0f81 100644
--- a/XI2proto.txt
+++ b/XI2proto.txt
@@ -279,33 +279,33 @@ are required to be 0.
     XIQueryDevices details information about the requested input devices.
 
     devices
-        The device to list. If 'devices' is AllDevices, all enabled and
-        disabled devices are listed. If 'devices' is AllMasterDevices, all
-        enabled and disabled master devices are listed. If 'devices' is a
-        valid DEVICE, only this DEVICE is listed and 'num_devices' is 1.
+        The device to list. If devices is AllDevices, all enabled and
+        disabled devices are listed. If devices is AllMasterDevices, all
+        enabled and disabled master devices are listed. If devices is a
+        valid DEVICE, only this DEVICE is listed and num_devices is 1.
     num_devices
-        The number of 'deviceinfos' returned.
+        The number of deviceinfos returned.
 
-    Each 'deviceinfo' is detailed as follows:
+    Each deviceinfo is detailed as follows:
     deviceid
         The unique ID of the device. Device IDs may get re-used when a device
         is removed.
     use
-        If the device is a master pointer, 'use' is MasterPointer.
-        If the device is a master keyboard, 'use' is MasterKeyboard.
-        If the device is a slave pointer, 'use' is SlavePointer.
-        If the device is a slave keyboard, 'use' is SlaveKeyboard.
-        If the device is a floating slave, 'use' is FloatingSlave.
+        If the device is a master pointer, use is MasterPointer.
+        If the device is a master keyboard, use is MasterKeyboard.
+        If the device is a slave pointer, use is SlavePointer.
+        If the device is a slave keyboard, use is SlaveKeyboard.
+        If the device is a floating slave, use is FloatingSlave.
     attachment
-        If the device is a master pointer or a master keyboard, 'attachment'
+        If the device is a master pointer or a master keyboard, attachment
         specifies the paired master keyboard, or the paired master pointer,
         respectively.  If the device is a non-floating slave device
-        'attachment' specifies the master device this device is attached to.
-        If the device is a floating slave, 'attachment' is undefined.
+        attachment specifies the master device this device is attached to.
+        If the device is a floating slave, attachment is undefined.
     enabled
         Zero if the device is disabled, non-zero otherwise.
     num_classes
-        Number of 'classes' provided.
+        Number of classes provided.
     name_len
         Length of the name in bytes not including padding.
     classes
@@ -314,8 +314,8 @@ are required to be 0.
     name
         The device's name. padded to a multiple of 4 bytes.
 
-    For all classes, 'type' specifies the device class. Clients are required
-    to ignore unknown device classes. The 'length' field specifies the length
+    For all classes, type specifies the device class. Clients are required
+    to ignore unknown device classes. The length field specifies the length
     of the class in 4 byte units.
     The following classes may occur only once: ButtonClass, KeyClass
 
@@ -374,8 +374,8 @@ are required to be 0.
     value
         Last published axis value (if mode is absolute).
 
-    An axis in Relative mode may specify 'min' and 'max' as a hint to the
-    client. If no 'min' and 'max' information is available, both must be 0.
+    An axis in Relative mode may specify min and max as a hint to the
+    client. If no min and max information is available, both must be 0.
 
     ┌───
         XISelectEvents
@@ -392,29 +392,29 @@ are required to be 0.
     window
         The window to select the events on.
     num_masks
-        Number of items in 'masks'.
+        Number of items in masks.
     deviceid
         Numerical deviceid, or AllDevices, or AllMasterDevices.
     mask_len
-        Length of 'mask' in 4 byte units.
+        Length of mask in 4 byte units.
     mask
         Event mask. An event mask for an event type T is defined as (1 << T).
 
-    XISelectEvents selects for XI2 events on 'window'.
+    XISelectEvents selects for XI2 events on window.
 
-    If 'num_masks' is 0, a BadValue error occurs.
+    If num_masks is 0, a BadValue error occurs.
 
-    Each 'mask' sets the (and overwrites a previous) event mask for the DEVICE
-    specified through 'deviceid'. The device 'AllDevices' or
-    'AllMasterDevices' is treated as a separate device by server. A client's
-    event mask is the union of 'AllDevices', 'AllMasterDevices' and the
+    Each mask sets the (and overwrites a previous) event mask for the DEVICE
+    specified through deviceid. The device AllDevices or
+    AllMasterDevices is treated as a separate device by server. A client's
+    event mask is the union of AllDevices, AllMasterDevices and the
     per-device event mask.
     The removal of device from the server unsets the event masks for the
     device. If an event mask is set for AllDevices or AllMasterDevices, the
     event mask is not cleared on device removal and affects all future
     devices.
 
-    If 'mask_len' is 0, the event mask for the given device is cleared.
+    If mask_len is 0, the event mask for the given device is cleared.
 
     The mask for XIHierarchyEvents may only be selected for XIAllDevices.
     Setting it for any other device results in a BadValue error.
@@ -430,16 +430,16 @@ are required to be 0.
     window
         The window to select the events on.
     num_masks
-        Number of items in 'masks'.
+        Number of items in masks.
     masks
         Selected event masks by this client.
 
-    Masks are returned on a per-device basis, with masks for 'AllDevices' and
-    'AllMasterDevices' returned separately. A client can calculate the
+    Masks are returned on a per-device basis, with masks for AllDevices and
+    AllMasterDevices returned separately. A client can calculate the
     effective mask for a device with a bitwise OR of the AllDevices, the
     AllMasterDevices and the device-specific mask.
 
-    If 'num_masks' is 0, no events have been selected by this client on the
+    If num_masks is 0, no events have been selected by this client on the
     given window.
 
     ┌───
@@ -465,21 +465,21 @@ are required to be 0.
     root
         The root window the pointer is logically on.
     child
-        The child window of 'window' that contains the pointer or None.
+        The child window of window that contains the pointer or None.
     root_x
     root_y
         Pointer position relative to the root window's origin.
     win_x
     win_y
-        Pointer position relative to 'window' or 0 if 'same_screen' is false.
+        Pointer position relative to window or 0 if same_screen is false.
     same_screen
-        True if 'window' is on the same screen as the pointer.
+        True if window is on the same screen as the pointer.
     mods
         XKB modifier state on the paired device.
     group
         XKB group state on the paired device.
     buttons_len
-        The length of 'buttons' in 4 byte units.
+        The length of buttons in 4 byte units.
     buttons
         Button state.
 
@@ -496,7 +496,7 @@ are required to be 0.
             deviceid:        DEVICEID
     └───
 
-    WarpPointer moves the pointer of 'deviceid' as if the user had moved
+    WarpPointer moves the pointer of deviceid as if the user had moved
     the pointer. WarpPointer can only be called for MasterPointer and
     FloatingSlave devices.
 
@@ -506,9 +506,9 @@ are required to be 0.
        rectangle of src_window.
     dst_win
        If dst_win is None, this request moves the pointer by offsets
-       'dst_x'/'dst_y' relative to the current position of the pointer. If
+       dst_x/dst_y relative to the current position of the pointer. If
         dst_window is a window, this request moves the pointer to
-       'dst_x'/'dst_y' relative to dst_win's origin.
+       dst_x/dst_y relative to dst_win's origin.
     src_x
     src_y
     src_width
@@ -516,8 +516,8 @@ are required to be 0.
        Specifies the source window rectangle.
     dst_x
     dst_y
-        The relative coordinates to move the pointer if 'dst_win' is None, or
-        the absolute coordinates if 'dst_win' is a window.
+        The relative coordinates to move the pointer if dst_win is None, or
+        the absolute coordinates if dst_win is a window.
     deviceid
         The device to warp.
 
@@ -544,9 +544,9 @@ are required to be 0.
     deviceid
         The master pointer device.
 
-    Whenever 'device' enters a window W, the cursor shape is selected in the
+    Whenever device enters a window W, the cursor shape is selected in the
     following order:
-    - if the current window has a device cursor C(d) defined for 'device',
+    - if the current window has a device cursor C(d) defined for device,
       display this cursor C(d).
     - otherwise, if the current window has a cursor C(w) defined in the core
       protocol's window attributes, display cursor C(w).
@@ -606,7 +606,7 @@ are required to be 0.
     length
         Length in 4 byte units.
     name_len
-        Length of 'name' in bytes.
+        Length of name in bytes.
     send_core
         True if the device should send core events.
     enable
@@ -625,15 +625,15 @@ are required to be 0.
         The device to remove.
     return_mode
         Return mode for attached slave devices.
-        If 'return_mode' is Float, all slave devices are set to floating.
-        If 'return_mode' is Attach, slave pointers are attached to
-        'return_pointer' and slave keyboards are attached to
-        'return_keyboard'.
+        If return_mode is Float, all slave devices are set to floating.
+        If return_mode is Attach, slave pointers are attached to
+        return_pointer and slave keyboards are attached to
+        return_keyboard.
     return_pointer
     return_keyboard
         The master pointer and master keyboard to attach slave devices to, if
-        'return_mode' is Attach. If 'return_mode' is Float, 'return_pointer'
-        and 'return_keyboard' are undefined.
+        return_mode is Attach. If return_mode is Float, return_pointer
+        and return_keyboard are undefined.
 
     Removing a master pointer removes the paired master keyboard and vice
     versa.
@@ -662,7 +662,7 @@ are required to be 0.
             deviceid:        DEVICEID
     └───
 
-    Set the ClientPointer for the client owning 'win' to the given device.
+    Set the ClientPointer for the client owning win to the given device.
 
     win
          Window or client ID.
@@ -694,14 +694,14 @@ are required to be 0.
             deviceid:        DEVICEID
     └───
 
-    Query the ClientPointer for the client owning 'win'.
+    Query the ClientPointer for the client owning win.
 
     win
         The window or client ID.
     set
         True if the client has a ClientPointer set.
     deviceid
-        The master pointer that acts as a ClientPointer if 'set' is True.
+        The master pointer that acts as a ClientPointer if set is True.
 
     No difference is made between a ClientPointer set explicitly through
     XISetClientPointer and a ClientPointer implicitly assigned by the server
@@ -1358,16 +1358,16 @@ EVENTHEADER { type:                       BYTE
         The current hierarchy information.
 
     An XIHierarchyEvent is sent whenever the device hierarchy been
-    changed. The 'flags' specify all types of hierarchy modifiations that have
+    changed. The flags specify all types of hierarchy modifiations that have
     occured.
-    For all devices, 'info' details the hierarchy information after the
+    For all devices, info details the hierarchy information after the
     modification of the hierarchy has occured. For each device specified with
-    'deviceid':
-    - if 'type' is MasterPointer or MasterKeyboard, 'attachment' decribes the
+    deviceid:
+    - if type is MasterPointer or MasterKeyboard, attachment decribes the
       pairing of this device.
-    - if 'type' is SlavePointer or SlaveKeyboard, 'attachment' describes the
+    - if type is SlavePointer or SlaveKeyboard, attachment describes the
       master device this device is attached to.
-    - if 'type' is FloatingSlave device, 'attachment' is undefined.
+    - if type is FloatingSlave device, attachment is undefined.
 
     enabled
          True if the device is enabled and can send events. A disabled master
@@ -1375,8 +1375,8 @@ EVENTHEADER { type:                       BYTE
          device.
 
     Note: Multiple devices may be affected in one hierarchy change,
-    'deviceid' in an XIHierarchyEvent is always the first affected
-    device. Clients should ignore deviceid and instead use the 'devices' list.
+    deviceid in an XIHierarchyEvent is always the first affected
+    device. Clients should ignore deviceid and instead use the devices list.
 
     ┌───
         DeviceChangedEvent:
@@ -1395,21 +1395,21 @@ EVENTHEADER { type:                       BYTE
 
     reason
         The reason for generating this event.
-        If 'reason' is SlaveSwitch, the slave device sending events through
-        this device has changed and 'source' specifies the new slave device.
-        A SlaveSwitch 'reason' can only occur on a master device.
-        If 'reason' is DeviceChange, the device itself has changed through
-        other means (e.g. a physical device change) and 'source' is
+        If reason is SlaveSwitch, the slave device sending events through
+        this device has changed and source specifies the new slave device.
+        A SlaveSwitch reason can only occur on a master device.
+        If reason is DeviceChange, the device itself has changed through
+        other means (e.g. a physical device change) and source is
         the device itself.
     source
         The source of the new classes.
     num_classes
-        Number of 'classes' provided.
+        Number of classes provided.
     classes
         Details the available classes provided by the device.  The order the
         classes are provided in is undefined.
 
-    For a detailed description of 'classes', see the XQueryInputDevice
+    For a detailed description of classes, see the XQueryInputDevice
     request.
 
     ┌───
@@ -1470,9 +1470,9 @@ EVENTHEADER { type:                       BYTE
         event window (16.16 fixed point).
 
     buttons_len
-        The length of 'buttons' in 4 byte units.
+        The length of buttons in 4 byte units.
     valuators_len
-        The length of 'valuators' in 4 byte units.
+        The length of valuators in 4 byte units.
     sourceid
         The source device that originally generated the event.
     mods
@@ -1482,7 +1482,7 @@ EVENTHEADER { type:                       BYTE
     buttons
         Button state before the event.
     valuators
-        Bitmask of valuators provided in 'axisvalues'.
+        Bitmask of valuators provided in axisvalues.
     axisvalues
         Valuator data in device-native resolution.
     flags
@@ -1493,7 +1493,7 @@ EVENTHEADER { type:                       BYTE
         the physical state of the key has not changed.  This is only
         valid for KeyPress events.
 
-    Modifier state in 'mods' is detailed as follows:
+    Modifier state in mods is detailed as follows:
     base_mods
         XKB base modifier state.
     latched_mods
@@ -1501,7 +1501,7 @@ EVENTHEADER { type:                       BYTE
     locked_mods
         XKB locked modifier state.
 
-    Group state in 'group' is detailed as follows:
+    Group state in group is detailed as follows:
     base_group
         XKB base group state.
     latched_group
@@ -1536,9 +1536,9 @@ EVENTHEADER { type:                       BYTE
     flags
         Flags as described in DeviceEvent.
     valuators_len
-        The length of 'valuators' in 4 byte units.
+        The length of valuators in 4 byte units.
     valuators
-        Bitmask of valuators provided in 'axisvalues' and 'axisvalues_raw'.
+        Bitmask of valuators provided in axisvalues and axisvalues_raw.
     axisvalues
         Valuator data in device-native resolution.
     axisvalues_raw
@@ -1620,7 +1620,7 @@ EVENTHEADER { type:                       BYTE
     group
         XKB group state before the event.
     buttons_len
-        The length of 'buttons' in 4 byte units.
+        The length of buttons in 4 byte units.
     buttons
         Button state before the event.
 

commit 5e76f4ca69fedab770280854ab238587eb5e10fb
Author: Peter Hutterer <peter.hutterer@who-t.net>
Date:   Tue Jul 28 10:12:06 2009 +1000

    XI2proto.txt: typo fixes and minor clarifications.
    
    Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>

diff --git a/XI2proto.txt b/XI2proto.txt
index f1cbb1e..ec930d3 100644
--- a/XI2proto.txt
+++ b/XI2proto.txt
@@ -224,7 +224,7 @@ are required to be 0.
     server sends the highest version it supports, but no higher than the
     requested version. Major versions changes can introduce incompatibilities
     in existing functionality, minor version changes introduce only backward
-    compatible changes.  It is the clients responsibility to ensure that the
+    compatible changes.  It is the client's responsibility to ensure that the
     server supports a version which is compatible with its expectations.
 
     major_version
@@ -251,7 +251,7 @@ are required to be 0.
                  name:                  LISTofCHAR8
                  classes:               LISTofCLASS }
 
-    CLASS { BUTTONCLASS KEYCLASS, AXISCLASS }
+    CLASS { BUTTONCLASS, KEYCLASS, AXISCLASS }
 
     BUTTONCLASS { type:                 ButtonClass
                   length:               CARD16
@@ -296,25 +296,23 @@ are required to be 0.
         If the device is a slave pointer, 'use' is SlavePointer.
         If the device is a slave keyboard, 'use' is SlaveKeyboard.
         If the device is a floating slave, 'use' is FloatingSlave.
-
     attachment
         If the device is a master pointer or a master keyboard, 'attachment'
         specifies the paired master keyboard, or the paired master pointer,
         respectively.  If the device is a non-floating slave device
         'attachment' specifies the master device this device is attached to.
         If the device is a floating slave, 'attachment' is undefined.
-
     enabled
         Zero if the device is disabled, non-zero otherwise.
     num_classes
         Number of 'classes' provided.
     name_len
-        Length of the name in bytes.
+        Length of the name in bytes not including padding.
     classes
         Details the available classes provided by the device in an undefined
         order.
     name
-        The device's name, padded to a multiple of 4 bytes.
+        The device's name. padded to a multiple of 4 bytes.
 
     For all classes, 'type' specifies the device class. Clients are required
     to ignore unknown device classes. The 'length' field specifies the length
@@ -331,14 +329,14 @@ are required to be 0.
     num_buttons
         Number of buttons provided by the device.
     labels
-        List of Atoms specifying the label for each button. An atom of None
+        List of Atoms specifying the label for each button. An Atom of None
         specifies an unlabeled button. Buttons are listed in the device-native
-        order and potential button mappings are ignored.
+        order regardless of the current button mapping.
     state
-        The current button mask for this device. Each bit representing a
-        button is 1 if this button is logically down, or 0 otherwise. State a
-        multiple of 4-byte units and always contains at least num_buttons
-        bits.
+        The current button mask for this device after button mapping is
+        applied. Each bit representing a button is 1 if this button is
+        logically down, or 0 otherwise. State is a multiple of 4-byte units
+        and always contains at least num_buttons bits.
 
     KeyClass:
     type
@@ -394,11 +392,11 @@ are required to be 0.
     window
         The window to select the events on.
     num_masks
-        Number of items in mask.
+        Number of items in 'masks'.
     deviceid
         Numerical deviceid, or AllDevices, or AllMasterDevices.
     mask_len
-        Length of mask in 4 byte units.
+        Length of 'mask' in 4 byte units.
     mask
         Event mask. An event mask for an event type T is defined as (1 << T).
 
@@ -429,16 +427,17 @@ are required to be 0.
             masks:          LISTofEVENTMASK
     └───
 
-
     window
         The window to select the events on.
     num_masks
-        Number of items in mask.
+        Number of items in 'masks'.
     masks
         Selected event masks by this client.
 
     Masks are returned on a per-device basis, with masks for 'AllDevices' and
-    'AllMasterDevices' returned separately.
+    'AllMasterDevices' returned separately. A client can calculate the
+    effective mask for a device with a bitwise OR of the AllDevices, the
+    AllMasterDevices and the device-specific mask.
 
     If 'num_masks' is 0, no events have been selected by this client on the
     given window.
@@ -474,7 +473,7 @@ are required to be 0.
     win_y
         Pointer position relative to 'window' or 0 if 'same_screen' is false.
     same_screen
-        TRUE if 'window' is on the same screen as the pointer.
+        True if 'window' is on the same screen as the pointer.
     mods
         XKB modifier state on the paired device.
     group
@@ -596,9 +595,10 @@ are required to be 0.
     changes
         The list of changes.
 
-    The server processes the changes one by one and applies changes
-    immediately. If an error occurs, processing stops at the current change
-    and returns the number of successfully applied changes in the error.
+    The server processes the changes in the order received from the client and
+    applies each requested change immediately. If an error occurs, processing
+    stops at the current change and returns the number of successfully applied
+    changes in the error.
 
     ADDMASTER creates a pair of master devices.
     type
@@ -608,9 +608,9 @@ are required to be 0.
     name_len
         Length of 'name' in bytes.
     send_core
-        TRUE if the device should send core events.
+        True if the device should send core events.
     enable
-        TRUE if the device is to be enabled immediately.
+        True if the device is to be enabled immediately.
     name
         The name for the new master devices. The master pointer's name is
         automatically appended with " pointer", the master keyboard's name is
@@ -632,7 +632,8 @@ are required to be 0.
     return_pointer
     return_keyboard
         The master pointer and master keyboard to attach slave devices to, if
-        'return_mode' is Attach.
+        'return_mode' is Attach. If 'return_mode' is Float, 'return_pointer'
+        and 'return_keyboard' are undefined.
 
     Removing a master pointer removes the paired master keyboard and vice
     versa.
@@ -698,9 +699,9 @@ are required to be 0.
     win
         The window or client ID.
     set
-        TRUE if the client has a ClientPointer set.
+        True if the client has a ClientPointer set.
     deviceid
-        The master pointer that acts as a ClientPointer if 'set' is TRUE.
+        The master pointer that acts as a ClientPointer if 'set' is True.
 
     No difference is made between a ClientPointer set explicitly through
     XISetClientPointer and a ClientPointer implicitly assigned by the server
@@ -788,7 +789,6 @@ are required to be 0.
     status
         Success or the reason why the grab could not be established.
 
-
     The masks parameter specifies which events the client wishes to receive
     while the device is grabbed.
 
@@ -850,8 +850,8 @@ are required to be 0.
     time
         A valid server time or CurrentTime.
 
-    The request has no effect if the specified time is earlier
-    than the last-device-grab time or is later than the current server time.
+    The request has no effect if the specified time is earlier than the
+    last-device-grab time or is later than the current server time.
     This request generates FocusIn and FocusOut events.
     An XIUngrabDevice is performed automatically if the event window for an
     active device grab becomes not viewable.
@@ -1370,7 +1370,7 @@ EVENTHEADER { type:                       BYTE
     - if 'type' is FloatingSlave device, 'attachment' is undefined.
 
     enabled
-         TRUE if the device is enabled and can send events. A disabled master
+         True if the device is enabled and can send events. A disabled master
          device will not forward events from an attached, enabled slave
          device.
 
@@ -1534,7 +1534,7 @@ EVENTHEADER { type:                       BYTE
     detail
         The button number or keycode.
     flags
-        Flags as described in DeviceEvent::flags.
+        Flags as described in DeviceEvent.
     valuators_len
         The length of 'valuators' in 4 byte units.
     valuators
@@ -1609,7 +1609,7 @@ EVENTHEADER { type:                       BYTE
         Specifies the relation of the event window to the window the pointer
         entered or left. See the core protocol spec for details.
     same_screen
-        TRUE if the event window is on the same screen as the pointer's root
+        True if the event window is on the same screen as the pointer's root
         window.
     focus
         If the event window is the focus window or an inferior of the focus

commit 26f244fadc188cc76f53c82c10bc3b308964f20c
Author: Peter Hutterer <peter.hutterer@who-t.net>
Date:   Tue Jul 28 11:12:50 2009 +1000

    XI2proto.txt: sourceid on DeviceChanged is the device.
    
    Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>

diff --git a/XI2proto.txt b/XI2proto.txt
index 6349e19..f1cbb1e 100644
--- a/XI2proto.txt
+++ b/XI2proto.txt
@@ -1400,10 +1400,9 @@ EVENTHEADER { type:                       BYTE
         A SlaveSwitch 'reason' can only occur on a master device.
         If 'reason' is DeviceChange, the device itself has changed through
         other means (e.g. a physical device change) and 'source' is
-        undefined.
+        the device itself.
     source
-        The source of the new classes. Only defined in 'reason' is
-        SlaveSwitch.
+        The source of the new classes.
     num_classes
         Number of 'classes' provided.
     classes

commit b877309713930f92f04e2485bc40e1b6730d7e77
Author: Peter Hutterer <peter.hutterer@who-t.net>
Date:   Tue Jul 28 11:12:26 2009 +1000

    XI2proto.txt: passive grabs can take XIAll{Master}Devices.
    
    Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>

diff --git a/XI2proto.txt b/XI2proto.txt
index 90690a3..6349e19 100644
--- a/XI2proto.txt
+++ b/XI2proto.txt
@@ -951,7 +951,7 @@ are required to be 0.
 
     ┌───
         XIPassiveGrabDevice
-            deviceid:        DEVICEID
+            deviceid:        DEVICE
             detail:          CARD32
             grab_type:       GRABTYPE
             grab_window:     Window
@@ -981,7 +981,8 @@ are required to be 0.
             The cursor to display for the duration of the grab. If grab_type
             is not GrabtypeButton, this argument is ignored.
         deviceid
-            The device to establish the passive grab on.
+            The device to establish the passive grab on or AllDevices or
+            AllMasterDevices.
         detail
             The button number, or key symbol to grab for.
             Must be 0 for GrabtypeEnter and GrabtypeFocusIn.

commit d0b1e55b876a29a7c820ec12d7b9cb5e081e1944
Author: Peter Hutterer <peter.hutterer@who-t.net>
Date:   Tue Jul 28 10:53:08 2009 +1000

    XI2proto.txt: grabbing a slave does not detach it anymore.
    
    Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>

diff --git a/XI2proto.txt b/XI2proto.txt
index ab075f7..90690a3 100644
--- a/XI2proto.txt
+++ b/XI2proto.txt
@@ -1028,11 +1028,7 @@ are required to be 0.
         master keyboard are used. If deviceid specifies a slave pointer


Reply to: