From 23e5f77988bb5cb26db7d7bfd60a2c39b9199e21 Mon Sep 17 00:00:00 2001 From: zakk4223 Date: Thu, 19 Mar 2026 02:05:15 -0400 Subject: [PATCH] input: Fix F12 and F12+modifier for OSD (#1129) --- input.cpp | 3 +++ menu.cpp | 13 ++++++++----- user_io.cpp | 8 ++++---- user_io.h | 1 + 4 files changed, 16 insertions(+), 9 deletions(-) diff --git a/input.cpp b/input.cpp index 4815596..a1016c9 100644 --- a/input.cpp +++ b/input.cpp @@ -6214,6 +6214,7 @@ static uint32_t process_abm_entry(advancedButtonMap *abm, advancedButtonState *a struct input_event ev; ev.code = ocode; ev.value = abs->pressed; + ev.type = EV_KEY; input_cb(&ev, NULL, devnum, true); input[devnum].advanced_last_pressed_keycode = abs->pressed ? ocode : 0; } else { @@ -6272,6 +6273,7 @@ bool update_advanced_state(int devnum, uint16_t evcode, int evstate) struct input_event ev; ev.code = input[devnum].advanced_last_pressed_keycode; ev.value = evstate; + ev.type = EV_KEY; input_cb(&ev, NULL, devnum, true); return false; } @@ -6318,6 +6320,7 @@ bool update_advanced_state(int devnum, uint16_t evcode, int evstate) struct input_event ev; ev.code = icode; ev.value = !abs->pressed; + ev.type = EV_KEY; input_cb(&ev, NULL, devnum, true); } } else { //Joypad diff --git a/menu.cpp b/menu.cpp index a8d8bd8..3152f8b 100644 --- a/menu.cpp +++ b/menu.cpp @@ -1280,11 +1280,14 @@ void HandleUI(void) } break; case KEY_F12 | UPSTROKE: - if (!user_io_osd_is_visible() && !ignore_osd_release) - menu = true; - ignore_osd_release = false; - if(video_fb_state()) video_menu_bg(user_io_status_get("[3:1]")); - video_fb_enable(0); + if (!is_f12_mod_needed() || (get_key_mod() & (RGUI | LGUI))) + { + if (!user_io_osd_is_visible() && !ignore_osd_release) + menu = true; + ignore_osd_release = false; + if(video_fb_state()) video_menu_bg(user_io_status_get("[3:1]")); + video_fb_enable(0); + } break; case KEY_F1: diff --git a/user_io.cpp b/user_io.cpp index 0c17d59..eb0cbdd 100644 --- a/user_io.cpp +++ b/user_io.cpp @@ -4115,13 +4115,13 @@ void user_io_kbd(uint16_t key, int press) { if (is_menu() && !video_fb_state()) printf("PS2 code(break)%s for core: %d(0x%X)\n", (code & EXT) ? "(ext)" : "", code & 255, code & 255); + menu_key_set(UPSTROKE | key); if (key == KEY_MENU) key = KEY_F12; if (key != KEY_F12 || !block_F12) { - /*if (osd_is_visible)*/ menu_key_set(UPSTROKE | key); // these modifiers should be passed to core even if OSD is open or they will get stuck! - if (!osd_is_visible || key == KEY_LEFTALT || key == KEY_RIGHTALT || key == KEY_LEFTMETA || key == KEY_RIGHTMETA) send_keycode(key, press); + if (!osd_is_visible || key == KEY_LEFTALT || key == KEY_RIGHTALT || key == KEY_LEFTMETA || key == KEY_RIGHTMETA) {send_keycode(key, press);} } if (key == KEY_F12) block_F12 = 0; } @@ -4131,8 +4131,8 @@ void user_io_kbd(uint16_t key, int press) if (!osd_is_visible && !is_menu() && key == KEY_MENU && press == 3) open_joystick_setup(); else if ((has_menu() || osd_is_visible || (get_key_mod() & (LALT | RALT | RGUI | LGUI))) && (((key == KEY_F12) && (!is_f12_mod_needed() || (get_key_mod() & (RGUI | LGUI)))) || key == KEY_MENU)) { - //block_F12 = 1; - if (press == 1) menu_key_set(KEY_F12); + if (press == 1) menu_key_set(KEY_F12); + block_F12 = 1; } else if (osd_is_visible) { diff --git a/user_io.h b/user_io.h index 79bda2e..0d3f663 100644 --- a/user_io.h +++ b/user_io.h @@ -265,6 +265,7 @@ int user_io_use_cheats(); int process_ss(const char *rom_name, int enable = 1); +char is_f12_mod_needed(); void diskled_on(); #define DISKLED_ON diskled_on() #define DISKLED_OFF void()