diff --git a/input.c b/input.c index aaff9c8..5b5ee41 100644 --- a/input.c +++ b/input.c @@ -368,7 +368,7 @@ static const int ev2ps2[] = NONE, //85 KEY_ZENKAKU NONE, //86 KEY_102ND 0x78, //87 KEY_F11 - OSD_OPEN, //88 KEY_F12 + 0x07, //88 KEY_F12 NONE, //89 KEY_RO NONE, //90 KEY_KATAKANA NONE, //91 KEY_HIRAGANA @@ -1133,7 +1133,7 @@ static int keyrah_trans(int key, int press) if (key == KEY_102ND) { - if (!press && fn == 1) menu_key_set(KEY_F12); + if (!press && fn == 1) menu_key_set(KEY_MENU); fn = press ? 1 : 0; return 0; } @@ -1262,7 +1262,7 @@ static void joy_digital(int num, uint16_t mask, char press, int bnum) break; default: - ev.code = (bnum == 17) ? KEY_F12 : 0; + ev.code = (bnum == 17) ? KEY_MENU : 0; } input_cb(&ev, 0); diff --git a/user_io.c b/user_io.c index d196cdf..f52a7da 100644 --- a/user_io.c +++ b/user_io.c @@ -1607,21 +1607,20 @@ void user_io_kbd(uint16_t key, int press) { if (is_menu_core()) printf("PS2 code(break)%s for core: %d(0x%X)\n", (code & EXT) ? "(ext)" : "", code & 255, code & 255); - if (code & OSD_OPEN) menu_key_set(UPSTROKE | KEY_F12); - else if (osd_is_visible) menu_key_set(UPSTROKE | key); - else + if (osd_is_visible) { - send_keycode(key, press); + if(key == KEY_MENU) menu_key_set(UPSTROKE | KEY_F12); + else menu_key_set(UPSTROKE | key); } + + //don't block depress so keys won't stick in core if pressed before OSD. + send_keycode(key, press); } else { if (is_menu_core()) printf("PS2 code(make)%s for core: %d(0x%X)\n", (code & EXT) ? "(ext)" : "", code & 255, code & 255); - if (code & OSD_OPEN) - { - if (press == 1) menu_key_set(KEY_F12); - } + if (((key == KEY_F12) && (!is_x86_core() || (get_key_mod() & (RGUI | LGUI)))) || key == KEY_MENU) menu_key_set(KEY_F12); else if (osd_is_visible) { if (press == 1) menu_key_set(key);