From 2877d65ccc8f09ae33fca2accf636fa088b05a11 Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Wed, 19 Jul 2023 18:10:17 +1000 Subject: [PATCH] Fix error in pop menu key accelerators from recent commit Correct error in own fix [0] popovers (F9-redo) were handled the same as popup menus. `F4,P` wasn't opening the preferences as it used to. Resolve by checking if the parent was a menu. [0]: c3bf00cd2d3a7ab809ada58053fefda6e16cc6f2 --- .../editors/interface/interface_handlers.cc | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/source/blender/editors/interface/interface_handlers.cc b/source/blender/editors/interface/interface_handlers.cc index ffe838c51ca..96b20fd6590 100644 --- a/source/blender/editors/interface/interface_handlers.cc +++ b/source/blender/editors/interface/interface_handlers.cc @@ -10157,13 +10157,13 @@ static void ui_region_auto_open_clear(ARegion *region) static bool ui_menu_pass_event_to_parent_if_nonactive(uiPopupBlockHandle *menu, const uiBut *but, const int level, + const bool is_parent_menu, const int retval) { - /* NOTE(@ideasman42): For `menu->popup` (not a nested tree of menus), don't pass events parents. * This is needed because enum popups (for example) aren't created with an active button. * Otherwise opening a popup & pressing the accelerator key would fail, see: #107838. */ - if ((level != 0) && (but == nullptr) && (menu->popup == false)) { + if ((level != 0) && (but == nullptr) && (is_parent_menu || menu->popup == false)) { menu->menuretval = UI_RETURN_OUT | UI_RETURN_OUT_PARENT; (void)retval; /* so release builds with strict flags are happy as well */ BLI_assert(retval == WM_UI_HANDLER_CONTINUE); @@ -10381,7 +10381,8 @@ static int ui_handle_menu_event(bContext *C, case EVT_RIGHTARROWKEY: if (event->val == KM_PRESS && (block->flag & UI_BLOCK_LOOP)) { - if (ui_menu_pass_event_to_parent_if_nonactive(menu, but, level, retval)) { + if (ui_menu_pass_event_to_parent_if_nonactive( + menu, but, level, is_parent_menu, retval)) { break; } @@ -10482,7 +10483,8 @@ static int ui_handle_menu_event(bContext *C, scrolltype = ui_block_flipped ? MENU_SCROLL_DOWN : MENU_SCROLL_UP; } - if (ui_menu_pass_event_to_parent_if_nonactive(menu, but, level, retval)) { + if (ui_menu_pass_event_to_parent_if_nonactive( + menu, but, level, is_parent_menu, retval)) { break; } @@ -10593,7 +10595,8 @@ static int ui_handle_menu_event(bContext *C, if ((block->flag & UI_BLOCK_NUMSELECT) && event->val == KM_PRESS) { int count; - if (ui_menu_pass_event_to_parent_if_nonactive(menu, but, level, retval)) { + if (ui_menu_pass_event_to_parent_if_nonactive( + menu, but, level, is_parent_menu, retval)) { break; } @@ -10690,7 +10693,8 @@ static int ui_handle_menu_event(bContext *C, * activating an item when the key is held. */ (event->flag & WM_EVENT_IS_REPEAT) == 0) { - if (ui_menu_pass_event_to_parent_if_nonactive(menu, but, level, retval)) { + if (ui_menu_pass_event_to_parent_if_nonactive( + menu, but, level, is_parent_menu, retval)) { break; }