[PATCH xserver] xkb: XkbSetMap on the lastSlave needs to change the master
Samir Benmendil
me at rmz.io
Sat Mar 3 01:41:12 UTC 2018
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>
---
xkb/xkb.c | 26 +++++++++++++++++++++++++-
1 file changed, 25 insertions(+), 1 deletion(-)
diff --git a/xkb/xkb.c b/xkb/xkb.c
index 678f82368..12460034b 100644
--- a/xkb/xkb.c
+++ b/xkb/xkb.c
@@ -2626,6 +2626,8 @@ ProcXkbSetMap(ClientPtr client)
if (rc != Success)
return rc;
+ DeviceIntPtr master = GetMaster(dev, MASTER_KEYBOARD);
+
if (stuff->deviceSpec == XkbUseCoreKbd) {
DeviceIntPtr other;
@@ -2641,9 +2643,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;
@@ -2664,6 +2678,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;
--
2.14.2
More information about the xorg-devel
mailing list