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@rmz.io> Acked-by: Daniel Stone <daniels@collabora.com>
This commit is contained in:
parent
ce8da93646
commit
5d3fd3856b
26
xkb/xkb.c
26
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;
|
||||
|
|
Loading…
Reference in New Issue