Update xnest keyboard code to match xephyr/kdrive.

Xnest was not updated in the last batch of xkb changes. This
patch is basically cut&paste from hw/kdrive/src/kinput.c and
hw/kdrive/ephyr/ephyr.c, and appears to generate a Xnest as
functional as before the xkb changes.
This commit is contained in:
Paulo Cesar Pereira de Andrade 2009-01-25 19:01:10 -02:00
parent 759348f13f
commit 6ef46c40e6

View File

@ -114,16 +114,15 @@ xnestChangeKeyboardControl(DeviceIntPtr pDev, KeybdCtrl *ctrl)
int int
xnestKeyboardProc(DeviceIntPtr pDev, int onoff) xnestKeyboardProc(DeviceIntPtr pDev, int onoff)
{ {
XModifierKeymap *modifier_keymap;
KeySym *keymap; KeySym *keymap;
int mapWidth; int mapWidth;
int min_keycode, max_keycode; int min_keycode, max_keycode;
KeySymsRec keySyms; KeySymsRec keySyms;
int i, j; int i;
XKeyboardState values; XKeyboardState values;
XkbComponentNamesRec names; XkbComponentNamesRec names;
XkbDescPtr xkb; XkbDescPtr xkb;
char *rules, *model, *layout, *variants, *options; XkbRMLVOSet rmlvo;
int op, event, error, major, minor; int op, event, error, major, minor;
switch (onoff) switch (onoff)
@ -168,15 +167,14 @@ xnestKeyboardProc(DeviceIntPtr pDev, int onoff)
XkbGetControls(xnestDisplay, XkbAllControlsMask, xkb); XkbGetControls(xnestDisplay, XkbAllControlsMask, xkb);
memset(&names, 0, sizeof(XkbComponentNamesRec)); memset(&names, 0, sizeof(XkbComponentNamesRec));
rules = XKB_DFLT_RULES; rmlvo.rules = XKB_DFLT_RULES;
model = XKB_DFLT_MODEL; rmlvo.model = XKB_DFLT_MODEL;
layout = XKB_DFLT_LAYOUT; rmlvo.layout = XKB_DFLT_LAYOUT;
variants = XKB_DFLT_VARIANT; rmlvo.variant = XKB_DFLT_VARIANT;
options = XKB_DFLT_OPTIONS; rmlvo.options = XKB_DFLT_OPTIONS;
XkbSetRulesDflts(rules, model, layout, variants, options); InitKeyboardDeviceStruct(pDev, &rmlvo,
XkbInitKeyboardDeviceStruct(pDev, &names, &keySyms, xnestBell, xnestChangeKeyboardControl);
xnestBell, xnestChangeKeyboardControl);
XkbDDXChangeControls(pDev, xkb->ctrls, xkb->ctrls); XkbDDXChangeControls(pDev, xkb->ctrls, xkb->ctrls);
XkbFreeKeyboard(xkb, 0, False); XkbFreeKeyboard(xkb, 0, False);
xfree(keymap); xfree(keymap);
@ -217,11 +215,26 @@ LegalModifier(unsigned int key, DeviceIntPtr pDev)
void void
xnestUpdateModifierState(unsigned int state) xnestUpdateModifierState(unsigned int state)
{ {
#if 0
DeviceIntPtr pDev = xnestKeyboardDevice; DeviceIntPtr pDev = xnestKeyboardDevice;
KeyClassPtr keyc = pDev->key; KeyClassPtr keyc = pDev->key;
int i; int i;
CARD8 mask; CARD8 mask;
if (!pDev)
return;
/* This is pretty broken.
*
* What should happen is that focus out should do as a VT switch does in
* traditional servers: fake releases for all keys (and buttons too, come
* to think of it) currently down. Then, on focus in, get the state from
* the host, and fake keypresses for everything currently down.
*
* So I'm leaving this broken for a little while. Sorry, folks.
*
* -daniels
*/
state = state & 0xff; state = state & 0xff;
if (keyc->state == state) if (keyc->state == state)
@ -260,4 +273,5 @@ xnestUpdateModifierState(unsigned int state)
break; break;
} }
} }
#endif
} }