xserver: Branch 'master'

Adam Jackson ajax at kemper.freedesktop.org
Mon Mar 5 18:43:34 UTC 2018


 xkb/xkb.c |   26 +++++++++++++++++++++++++-
 1 file changed, 25 insertions(+), 1 deletion(-)

New commits:
commit 5d3fd3856b718cfbc87d17f1de698ced94923c78
Author: Samir Benmendil <me at rmz.io>
Date:   Sat Mar 3 01:41:12 2018 +0000

    xkb: XkbSetMap on the lastSlave needs to change the master
    
    The layout needs to be set on the master too if the layout is changed on
    the device that was last used by the master.
    
    Fixes: https://bugs.freedesktop.org/show_bug.cgi?id=85256
    Fixes: https://bugs.freedesktop.org/show_bug.cgi?id=91571
    
    Signed-off-by: Samir Benmendil <me at rmz.io>
    Acked-by: Daniel Stone <daniels at collabora.com>

diff --git a/xkb/xkb.c b/xkb/xkb.c
index 392023f4c..0fe6ebf4a 100644
--- a/xkb/xkb.c
+++ b/xkb/xkb.c
@@ -2627,6 +2627,8 @@ ProcXkbSetMap(ClientPtr client)
     if (rc != Success)
         return rc;
 
+    DeviceIntPtr master = GetMaster(dev, MASTER_KEYBOARD);
+
     if (stuff->deviceSpec == XkbUseCoreKbd) {
         DeviceIntPtr other;
 
@@ -2642,9 +2644,21 @@ ProcXkbSetMap(ClientPtr client)
                 }
             }
         }
+    } else {
+        DeviceIntPtr other;
+
+        for (other = inputInfo.devices; other; other = other->next) {
+            if (other != dev && GetMaster(other, MASTER_KEYBOARD) != dev &&
+                (other != master || dev != master->lastSlave))
+                continue;
+
+            rc = _XkbSetMapChecks(client, other, stuff, tmp);
+            if (rc != Success)
+                return rc;
+        }
     }
 
-    /* We know now that we will succed with the SetMap. In theory anyway. */
+    /* We know now that we will succeed with the SetMap. In theory anyway. */
     rc = _XkbSetMap(client, dev, stuff, tmp);
     if (rc != Success)
         return rc;
@@ -2665,6 +2679,16 @@ ProcXkbSetMap(ClientPtr client)
                    sync. */
             }
         }
+    } else {
+        DeviceIntPtr other;
+
+        for (other = inputInfo.devices; other; other = other->next) {
+            if (other != dev && GetMaster(other, MASTER_KEYBOARD) != dev &&
+                (other != master || dev != master->lastSlave))
+                continue;
+
+            _XkbSetMap(client, other, stuff, tmp); //ignore rc
+        }
     }
 
     return Success;


More information about the xorg-commit mailing list