Commit 5d3fd385 authored by Samir Benmendil's avatar Samir Benmendil Committed by Adam Jackson

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=91571Signed-off-by: 's avatarSamir Benmendil <me@rmz.io>
Acked-by: 's avatarDaniel Stone <daniels@collabora.com>
parent ce8da936
......@@ -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;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment