diff options
Diffstat (limited to 'source/blender')
-rw-r--r-- | source/blender/editors/interface/interface.c | 84 |
1 files changed, 56 insertions, 28 deletions
diff --git a/source/blender/editors/interface/interface.c b/source/blender/editors/interface/interface.c index 20361bde16f..0b91a1c7aad 100644 --- a/source/blender/editors/interface/interface.c +++ b/source/blender/editors/interface/interface.c @@ -916,7 +916,6 @@ static void ui_menu_block_set_keyaccels(uiBlock *block) * but this could be supported */ void ui_but_add_shortcut(uiBut *but, const char *shortcut_str, const bool do_strip) { - if (do_strip && (but->flag & UI_BUT_HAS_SEP_CHAR)) { char *cpoin = strrchr(but->str, UI_SEP_CHAR); if (cpoin) { @@ -948,43 +947,70 @@ void ui_but_add_shortcut(uiBut *but, const char *shortcut_str, const bool do_str } } -static bool ui_but_event_operator_string( +/* -------------------------------------------------------------------- */ +/** \name Find Key Shortcut for Button + * + * - #ui_but_event_operator_string (and helpers) + * - #ui_but_event_property_operator_string + * \{ */ + +static bool ui_but_event_operator_string_from_operator( const bContext *C, uiBut *but, char *buf, const size_t buf_len) { - MenuType *mt; + BLI_assert(but->optype != NULL); bool found = false; + IDProperty *prop = (but->opptr) ? but->opptr->data : NULL; - if (but->optype) { - IDProperty *prop = (but->opptr) ? but->opptr->data : NULL; - - if (WM_key_event_operator_string( - C, but->optype->idname, but->opcontext, prop, true, - buf, buf_len)) - { - found = true; - } + if (WM_key_event_operator_string( + C, but->optype->idname, but->opcontext, prop, true, + buf, buf_len)) + { + found = true; } - else if ((mt = UI_but_menutype_get(but))) { - IDProperty *prop_menu; - IDProperty *prop_menu_name; + return found; +} - /* annoying, create a property */ - IDPropertyTemplate val = {0}; - prop_menu = IDP_New(IDP_GROUP, &val, __func__); /* dummy, name is unimportant */ - IDP_AddToGroup(prop_menu, (prop_menu_name = IDP_NewString("", "name", sizeof(mt->idname)))); +static bool ui_but_event_operator_string_from_menu( + const bContext *C, uiBut *but, + char *buf, const size_t buf_len) +{ + MenuType *mt = UI_but_menutype_get(but); + BLI_assert(mt != NULL); - IDP_AssignString(prop_menu_name, mt->idname, sizeof(mt->idname)); + bool found = false; + IDProperty *prop_menu, *prop_menu_name; - if (WM_key_event_operator_string( - C, "WM_OT_call_menu", WM_OP_INVOKE_REGION_WIN, prop_menu, true, - buf, buf_len)) - { - found = true; - } + /* annoying, create a property */ + IDPropertyTemplate val = {0}; + prop_menu = IDP_New(IDP_GROUP, &val, __func__); /* dummy, name is unimportant */ + IDP_AddToGroup(prop_menu, (prop_menu_name = IDP_NewString("", "name", sizeof(mt->idname)))); + + IDP_AssignString(prop_menu_name, mt->idname, sizeof(mt->idname)); - IDP_FreeProperty(prop_menu); - MEM_freeN(prop_menu); + if (WM_key_event_operator_string( + C, "WM_OT_call_menu", WM_OP_INVOKE_REGION_WIN, prop_menu, true, + buf, buf_len)) + { + found = true; + } + + IDP_FreeProperty(prop_menu); + MEM_freeN(prop_menu); + return found; +} + +static bool ui_but_event_operator_string( + const bContext *C, uiBut *but, + char *buf, const size_t buf_len) +{ + bool found = false; + + if (but->optype != NULL) { + found = ui_but_event_operator_string_from_operator(C, but, buf, buf_len); + } + else if (UI_but_menutype_get(but) != NULL) { + found = ui_but_event_operator_string_from_menu(C, but, buf, buf_len); } return found; @@ -1106,6 +1132,8 @@ static bool ui_but_event_property_operator_string( return found; } +/** \} */ + /** * This goes in a seemingly weird pattern: * |