static int keyboard_init(void) { #ifndef DISABLE_X11 const char *funcs[] = { "XOpenDisplay", "XCloseDisplay", "XQueryKeymap", "XDisplayKeycodes", "XGetKeyboardMapping", NULL }; #endif struct termios term; main_pid = getpid(); old_getch = __fb_con.keyboard_getch; if(__fb_con.inited == INIT_CONSOLE) { key_fd = dup(__fb_con.h_in); term.c_iflag = 0; term.c_cflag = CS8; term.c_lflag = 0; term.c_cc[VMIN] = 0; term.c_cc[VTIME] = 0; if ((ioctl(key_fd, KDGKBMODE, &key_old_mode) < 0) || (tcsetattr(key_fd, TCSANOW, &term) < 0) || (ioctl(key_fd, KDSKBMODE, K_MEDIUMRAW) < 0)) { close(key_fd); return -1; } __fb_con.keyboard_handler = keyboard_console_handler; __fb_con.keyboard_getch = keyboard_console_getch; key_head = key_tail = 0; ioctl(key_fd, KDGETLED, &key_leds); } #ifndef DISABLE_X11 else { xlib = fb_hDynLoad("libX11.so", funcs, (void **)&X); if (!xlib) return -1; display = X.OpenDisplay(NULL); if (!display) return -1; fb_hInitX11KeycodeToScancodeTb( display, X.DisplayKeycodes, X.GetKeyboardMapping ); fb_hXTermInitFocus(); __fb_con.keyboard_handler = keyboard_x11_handler; } #endif __fb_con.keyboard_init = keyboard_init; __fb_con.keyboard_exit = keyboard_exit; return 0; }
int fb_hXTermInitFocus(void) { #ifndef DISABLE_X11 const char *funcs[] = { "XOpenDisplay", "XCloseDisplay", "XGetInputFocus", NULL }; int dummy; ref_count++; if (ref_count > 1) return 0; xlib = fb_hDynLoad("libX11.so", funcs, (void **)&X); if (!xlib) return -1; display = X.OpenDisplay(NULL); if (!display) return -1; X.GetInputFocus(display, &xterm_window, &dummy); #endif return 0; }