Disable FreeBSD console mouse when initializing evdev input

Enable it again after quitting evdev input.
This commit is contained in:
Cacodemon345 2021-02-14 13:13:34 +06:00 committed by Ryan C. Gordon
parent d4d32833f4
commit c5f9e061b5

View File

@ -87,15 +87,17 @@ static int fatal_signals[] =
static void kbd_cleanup(void) static void kbd_cleanup(void)
{ {
struct mouse_info mData;
SDL_EVDEV_keyboard_state* kbd = kbd_cleanup_state; SDL_EVDEV_keyboard_state* kbd = kbd_cleanup_state;
if (kbd == NULL) { if (kbd == NULL) {
return; return;
} }
kbd_cleanup_state = NULL; kbd_cleanup_state = NULL;
mData.operation = MOUSE_SHOW;
ioctl(kbd->keyboard_fd, KDSKBMODE, kbd->old_kbd_mode); ioctl(kbd->keyboard_fd, KDSKBMODE, kbd->old_kbd_mode);
if (kbd->keyboard_fd != kbd->console_fd) close(kbd->keyboard_fd); if (kbd->keyboard_fd != kbd->console_fd) close(kbd->keyboard_fd);
ioctl(kbd->console_fd, CONS_SETKBD, (unsigned long)(kbd->kbInfo->kb_index)); ioctl(kbd->console_fd, CONS_SETKBD, (unsigned long)(kbd->kbInfo->kb_index));
ioctl(kbd->console_fd, CONS_MOUSECTL, &mData);
} }
void void
@ -221,9 +223,12 @@ SDL_EVDEV_keyboard_state *
SDL_EVDEV_kbd_init(void) SDL_EVDEV_kbd_init(void)
{ {
SDL_EVDEV_keyboard_state *kbd; SDL_EVDEV_keyboard_state *kbd;
struct mouse_info mData;
char flag_state; char flag_state;
char* devicePath; char* devicePath;
memset(&mData, 0, sizeof(struct mouse_info));
mData.operation = MOUSE_HIDE;
kbd = (SDL_EVDEV_keyboard_state *)SDL_calloc(1, sizeof(SDL_EVDEV_keyboard_state)); kbd = (SDL_EVDEV_keyboard_state *)SDL_calloc(1, sizeof(SDL_EVDEV_keyboard_state));
if (!kbd) { if (!kbd) {
return NULL; return NULL;
@ -241,7 +246,8 @@ SDL_EVDEV_kbd_init(void)
kbd->kbInfo = SDL_calloc(sizeof(keyboard_info_t), 1); kbd->kbInfo = SDL_calloc(sizeof(keyboard_info_t), 1);
ioctl(kbd->console_fd, KDGKBINFO, kbd->kbInfo); ioctl(kbd->console_fd, KDGKBINFO, kbd->kbInfo);
ioctl(kbd->console_fd, CONS_MOUSECTL, &mData);
if (ioctl(kbd->console_fd, KDGKBSTATE, &flag_state) == 0) { if (ioctl(kbd->console_fd, KDGKBSTATE, &flag_state) == 0) {
kbd->ledflagstate = flag_state; kbd->ledflagstate = flag_state;
} }
@ -292,9 +298,14 @@ SDL_EVDEV_kbd_init(void)
void void
SDL_EVDEV_kbd_quit(SDL_EVDEV_keyboard_state *kbd) SDL_EVDEV_kbd_quit(SDL_EVDEV_keyboard_state *kbd)
{ {
struct mouse_info mData;
if (!kbd) { if (!kbd) {
return; return;
} }
memset(&mData, 0, sizeof(struct mouse_data));
mData.operation = MOUSE_SHOW;
ioctl(kbd->console_fd, CONS_MOUSECTL, &mData);
kbd_unregister_emerg_cleanup(); kbd_unregister_emerg_cleanup();