int XRefreshKeyboardMapping(register XMappingEvent *event) { if(event->request == MappingKeyboard) { /* XXX should really only refresh what is necessary * for now, make initialize test fail */ LockDisplay(event->display); if (event->display->keysyms) { Xfree (event->display->keysyms); event->display->keysyms = NULL; } UnlockDisplay(event->display); } if(event->request == MappingModifier) { LockDisplay(event->display); if (event->display->modifiermap) { XFreeModifiermap(event->display->modifiermap); event->display->modifiermap = NULL; } UnlockDisplay(event->display); /* go ahead and get it now, since initialize test may not fail */ if (event->display->keysyms) (void) InitModMap(event->display); } return 1; }
int _XKeyInitialize( Display *dpy) { int per, n; KeySym *keysyms; /* * lets go get the keysyms from the server. */ if (!dpy->keysyms) { n = dpy->max_keycode - dpy->min_keycode + 1; keysyms = XGetKeyboardMapping (dpy, (KeyCode) dpy->min_keycode, n, &per); /* keysyms may be NULL */ if (! keysyms) return 0; LockDisplay(dpy); if (dpy->keysyms) Xfree (dpy->keysyms); dpy->keysyms = keysyms; dpy->keysyms_per_keycode = per; if (dpy->modifiermap) ResetModMap(dpy); UnlockDisplay(dpy); } if (!dpy->modifiermap) return InitModMap(dpy); return 1; }
void DarwinKeyboardReload (DeviceIntPtr pDev) { KeySymsRec keysyms; load_keyboard_mapping (&keysyms); if (SetKeySymsMap (&pDev->key->curKeySyms, &keysyms)) { /* now try to update modifiers. */ memmove (pDev->key->modifierMap, info.mod_map, MAP_LENGTH); InitModMap (pDev->key); } SendMappingNotify (MappingKeyboard, MIN_KEYCODE, NUM_KEYCODES, 0); SendMappingNotify (MappingModifier, 0, 0, 0); }