From 843827ed511d6dc39f73389a30bd3cc5d23c883b Mon Sep 17 00:00:00 2001 From: Ander Conselvan de Oliveira <ander@mandriva.com.br> Date: Fri, 23 Jan 2009 14:33:54 -0200 Subject: [PATCH 906/907] LED behavior fixes * Call slave devices CtrlProc on CoreKeyboardCtl to ensure keyboard leds are in sync. * Copy autoState when allocation a new XkbSrvLedInfo otherwise the leds state is lost on layout changes. --- dix/devices.c | 7 +++++++ xkb/xkb.c | 1 + 2 files changed, 8 insertions(+), 0 deletions(-) diff --git a/dix/devices.c b/dix/devices.c index 0858f20..3a0f633 100644 --- a/dix/devices.c +++ b/dix/devices.c @@ -481,6 +481,13 @@ CoreKeyboardBell(int volume, DeviceIntPtr pDev, pointer arg, int something) static void CoreKeyboardCtl(DeviceIntPtr pDev, KeybdCtrl *ctrl) { + /* Call control proc for slave devices */ + DeviceIntPtr slave; + for (slave = inputInfo.devices; slave; slave = slave->next) + if (slave->key && slave->spriteInfo->paired == pDev) { + slave->kbdfeed->ctrl.leds = ctrl->leds; + slave->kbdfeed->CtrlProc (slave, &slave->kbdfeed->ctrl); + } return; } diff --git a/xkb/xkb.c b/xkb/xkb.c index 7c1edea..1d0f7fd 100644 --- a/xkb/xkb.c +++ b/xkb/xkb.c @@ -5854,6 +5854,7 @@ ProcXkbGetKbdByName(ClientPtr client) if (sli) { sli->explicitState = old_sli->explicitState; sli->effectiveState = old_sli->effectiveState; + sli->autoState = old_sli->autoState; } tmpd->kbdfeed->xkb_sli = sli; XkbFreeSrvLedInfo(old_sli); -- 1.6.1.3