void t_keyboard_reload(void) { gint i, j, k; if(started) t_keyboard_shutdown(); started = TRUE; xim_init(); for(i = 0; i < T_KEYBOARD_NUM_MODKEYS; ++i) modkeys_keys[i] = 0; modmap = XGetModifierMapping(t_display); XDisplayKeycodes(t_display, &min_keycode, &max_keycode); keymap = XGetKeyboardMapping(t_display, min_keycode, max_keycode - min_keycode + 1, &keysyms_per_keycode); alt_l = meta_l = super_l = hyper_l = FALSE; for(i = 0; i < NUM_MASKS; ++i) { for(j = 0; j < modmap->max_keypermod; ++j) { KeySym sym; KeyCode keycode = modmap->modifiermap[i * modmap->max_keypermod + j]; if(keycode) { for(k = 0; k < keysyms_per_keycode; ++k) { sym = keymap[(keycode - min_keycode) * keysyms_per_keycode + k]; if(sym != NoSymbol) { set_modkey_mask(nth_mask(i), sym); } } } } } modkeys_keys[T_KEYBOARD_MODKEY_CAPSLOCK] = LockMask; modkeys_keys[T_KEYBOARD_MODKEY_SHIFT] = ShiftMask; modkeys_keys[T_KEYBOARD_MODKEY_CONTROL] = ControlMask; }
int main(int argc, char **argv) { command_switch(argc, argv); signal(SIGQUIT, sighandler); signal(SIGTERM, sighandler); signal(SIGINT, sighandler); /* 初始化 OXIM */ oxim_init(); gui_init(&oxim_core); xim_init(&oxim_core); ReloadPanel(&oxim_core); gui_loop(&oxim_core); return 0; }