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 <[email protected]> --- 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 _______________________________________________ [email protected]: X.Org development Archives: http://lists.x.org/archives/xorg-devel Info: https://lists.x.org/mailman/listinfo/xorg-devel
