void xf86KbdGetMapping (KeySymsPtr pKeySyms, CARD8 *pModMap) { KeySym *k; char type; int i, j; readKernelMapping(pKeySyms, pModMap); /* * Apply the special key mapping specified in XF86Config */ for (k = map, i = MIN_KEYCODE; i < (NUM_KEYCODES + MIN_KEYCODE); i++, k += 4) { switch (k[0]) { case XK_Alt_L: j = K_INDEX_LEFTALT; break; case XK_Alt_R: j = K_INDEX_RIGHTALT; break; case XK_Scroll_Lock: j = K_INDEX_SCROLLLOCK; break; case XK_Control_R: j = K_INDEX_RIGHTCTL; break; default: j = -1; } if (j >= 0) switch (xf86Info.specialKeyMap[j]) { case KM_META: if (k[0] == XK_Alt_R) k[1] = XK_Meta_R; else { k[0] = XK_Alt_L; k[1] = XK_Meta_L; } break; case KM_COMPOSE: k[0] = XK_Multi_key; break; case KM_MODESHIFT: k[0] = XK_Mode_switch; k[1] = NoSymbol; break; case KM_MODELOCK: k[0] = XK_Mode_switch; k[1] = XF86XK_ModeLock; break; case KM_SCROLLLOCK: k[0] = XK_Scroll_Lock; break; case KM_CONTROL: k[0] = XK_Control_R; break; } } /* * compute the modifier map */ for (i = 0; i < MAP_LENGTH; i++) pModMap[i] = NoSymbol; /* make sure it is restored */ for (k = map, i = MIN_KEYCODE; i < (NUM_KEYCODES + MIN_KEYCODE); i++, k += 4) switch(*k) { case XK_Shift_L: case XK_Shift_R: pModMap[i] = ShiftMask; break; case XK_Control_L: case XK_Control_R: pModMap[i] = ControlMask; break; case XK_Caps_Lock: pModMap[i] = LockMask; break; case XK_Alt_L: case XK_Alt_R: pModMap[i] = AltMask; break; case XK_Num_Lock: if (!xf86Info.serverNumLock) pModMap[i] = NumLockMask; break; case XK_Scroll_Lock: pModMap[i] = ScrollLockMask; break; /* kana support */ case XK_Kana_Lock: case XK_Kana_Shift: pModMap[i] = KanaMask; break; /* alternate toggle for multinational support */ case XK_Mode_switch: pModMap[i] = AltLangMask; break; } xf86Info.kbdType = ioctl(xf86Info.consoleFd, KDGKBTYPE, &type) != -1 ? type : KB_101; pKeySyms->map = map; pKeySyms->mapWidth = GLYPHS_PER_KEY; pKeySyms->minKeyCode = MIN_KEYCODE; if (xf86Info.serverNumLock) pKeySyms->maxKeyCode = MAX_KEYCODE; else pKeySyms->maxKeyCode = MAX_STD_KEYCODE; }
void KbdGetMapping (InputInfoPtr pInfo, KeySymsPtr pKeySyms, CARD8 *pModMap) { KeySym *k; int i; readKernelMapping(pInfo, pKeySyms, pModMap); /* * compute the modifier map */ for (i = 0; i < MAP_LENGTH; i++) pModMap[i] = NoSymbol; /* make sure it is restored */ for (k = map, i = MIN_KEYCODE; i < (NUM_KEYCODES + MIN_KEYCODE); i++, k += 4) switch(*k) { case XK_Shift_L: case XK_Shift_R: pModMap[i] = ShiftMask; break; case XK_Control_L: case XK_Control_R: pModMap[i] = ControlMask; break; case XK_Caps_Lock: pModMap[i] = LockMask; break; case XK_Alt_L: case XK_Alt_R: pModMap[i] = AltMask; break; case XK_Num_Lock: pModMap[i] = NumLockMask; break; case XK_Scroll_Lock: pModMap[i] = ScrollLockMask; break; /* kana support */ case XK_Kana_Lock: case XK_Kana_Shift: pModMap[i] = KanaMask; break; /* alternate toggle for multinational support */ case XK_Mode_switch: pModMap[i] = AltLangMask; break; } pKeySyms->map = map; pKeySyms->mapWidth = GLYPHS_PER_KEY; pKeySyms->minKeyCode = MIN_KEYCODE; pKeySyms->maxKeyCode = MAX_KEYCODE; }
void LinuxKeyboardLoad (void) { readKernelMapping (); }