But it does not work :-) DEVICE_INIT ... call InitKeyboardDeviceStruct() ... call KbdCtrl() set LEDS in accordance with the ctrl->leds I have not found yet a way to startup X so ctrl->leds were not zero ... call InitKBD() (LEDS has already repaid) manipulation InitKBD do not matter
But I really lost sight of that save state NumLock etc. be useful. I'll prepare a new series of patches, this series can be ignored. On Thu, Feb 17, 2011 at 04:20:10PM -0800, Alan Coopersmith wrote: > Why have you decided to remove the functionality of initializing the > state of things like NumLock based on the initial LED state? It was > a bit of the hack to propogate things like "NumLock on by default" from > the BIOS up through to the X server, but it worked. (At least it used > to, I haven't checked in a while.) > > -alan- > > On 02/17/11 04:10 PM, Alexandr Shadchin wrote: > > Before calling InitKBD called KbdCtrl, which sets the LEDS in > > accordance with the ctrl->leds. Therefore, further manipulation > > InitKBD do not matter. > > > > Signed-off-by: Alexandr Shadchin <alexandr.shadc...@gmail.com> > > --- > > src/kbd.c | 53 +---------------------------------------------------- > > 1 files changed, 1 insertions(+), 52 deletions(-) > > > > diff --git a/src/kbd.c b/src/kbd.c > > index 86b5be5..bb1a177 100644 > > --- a/src/kbd.c > > +++ b/src/kbd.c > > @@ -46,8 +46,6 @@ > > #define SCROLLFLAG 4 > > #define MODEFLAG 8 > > #define COMPOSEFLAG 16 > > -/* Used to know when the first DEVICE_ON after a DEVICE_INIT is called */ > > -#define INITFLAG (1U << 31) > > > > #if GET_ABI_MAJOR(ABI_XINPUT_VERSION) < 12 > > static InputInfoPtr KbdPreInit(InputDriverPtr drv, IDevPtr dev, int flags); > > @@ -59,9 +57,6 @@ static void KbdCtrl(DeviceIntPtr device, KeybdCtrl *ctrl); > > static void KbdBell(int percent, DeviceIntPtr dev, pointer ctrl, int > > unused); > > static void PostKbdEvent(InputInfoPtr pInfo, unsigned int key, Bool down); > > > > -static void InitKBD(InputInfoPtr pInfo, Bool init); > > -static void UpdateLeds(InputInfoPtr pInfo); > > - > > _X_EXPORT InputDriverRec KBD = { > > 1, > > "kbd", > > @@ -209,22 +204,6 @@ KbdBell(int percent, DeviceIntPtr dev, pointer ctrl, > > int unused) > > } > > > > static void > > -UpdateLeds(InputInfoPtr pInfo) > > -{ > > - KbdDevPtr pKbd = (KbdDevPtr) pInfo->private; > > - unsigned long leds = 0; > > - > > - if (pKbd->keyLeds & CAPSFLAG) leds |= XLED1; > > - if (pKbd->keyLeds & NUMFLAG) leds |= XLED2; > > - if (pKbd->keyLeds & SCROLLFLAG || > > - pKbd->keyLeds & MODEFLAG) leds |= XLED3; > > - if (pKbd->keyLeds & COMPOSEFLAG) leds |= XLED4; > > - > > - pKbd->leds = leds; > > - pKbd->SetLeds(pInfo, pKbd->leds); > > -} > > - > > -static void > > KbdCtrl( DeviceIntPtr device, KeybdCtrl *ctrl) > > { > > unsigned long leds; > > @@ -256,35 +235,6 @@ KbdCtrl( DeviceIntPtr device, KeybdCtrl *ctrl) > > pKbd->SetLeds(pInfo, pKbd->leds); > > } > > > > -static void > > -InitKBD(InputInfoPtr pInfo, Bool init) > > -{ > > - KbdDevPtr pKbd = (KbdDevPtr) pInfo->private; > > - > > - pKbd->scanPrefix = 0; > > - > > - if (init) { > > - pKbd->keyLeds = pKbd->GetLeds(pInfo); > > - UpdateLeds(pInfo); > > - pKbd->keyLeds |= INITFLAG; > > - } else { > > - unsigned long leds = pKbd->keyLeds; > > - > > - pKbd->keyLeds = pKbd->GetLeds(pInfo); > > - UpdateLeds(pInfo); > > - if ((pKbd->keyLeds & CAPSFLAG) != > > - ((leds & INITFLAG) ? 0 : (leds & CAPSFLAG))) { > > - pKbd->PostEvent(pInfo, KEY_CapsLock, TRUE); > > - pKbd->PostEvent(pInfo, KEY_CapsLock, FALSE); > > - } > > - if ((pKbd->keyLeds & NUMFLAG) != > > - (leds & INITFLAG ? 0 : leds & NUMFLAG)) { > > - pKbd->PostEvent(pInfo, KEY_NumLock, TRUE); > > - pKbd->PostEvent(pInfo, KEY_NumLock, FALSE); > > - } > > - } > > -} > > - > > static int > > KbdProc(DeviceIntPtr device, int what) > > { > > @@ -333,7 +283,6 @@ KbdProc(DeviceIntPtr device, int what) > > (KbdCtrlProcPtr)KbdCtrl); > > } > > #endif /* XINPUT ABI 5*/ > > - InitKBD(pInfo, TRUE); > > break; > > case DEVICE_ON: > > if (device->public.on) > > @@ -354,7 +303,7 @@ KbdProc(DeviceIntPtr device, int what) > > } > > > > device->public.on = TRUE; > > - InitKBD(pInfo, FALSE); > > + pKbd->scanPrefix = 0; > > break; > > > > case DEVICE_CLOSE: > > > -- > -Alan Coopersmith- alan.coopersm...@oracle.com > Oracle Solaris Platform Engineering: X Window System > > _______________________________________________ > xorg-devel@lists.x.org: X.Org development > Archives: http://lists.x.org/archives/xorg-devel > Info: http://lists.x.org/mailman/listinfo/xorg-devel -- Alexandr Shadchin _______________________________________________ xorg-devel@lists.x.org: X.Org development Archives: http://lists.x.org/archives/xorg-devel Info: http://lists.x.org/mailman/listinfo/xorg-devel