Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCampbell Barton <ideasman42@gmail.com>2018-07-13 11:26:24 +0300
committerCampbell Barton <ideasman42@gmail.com>2018-07-13 11:30:18 +0300
commit252ebf6bfdb52d8d02adb46b8ba0712bd8392aa5 (patch)
tree79e619facdae092a1c4baa61d1ead2c9e0891539
parent8c957468bcd5159ddedcecd33a87ce75e0d7637f (diff)
Cleanup: split keymap lookups into own functions
More will be added in 2.8, keep this manageable.
-rw-r--r--source/blender/editors/interface/interface.c84
1 files changed, 56 insertions, 28 deletions
diff --git a/source/blender/editors/interface/interface.c b/source/blender/editors/interface/interface.c
index e5c3ebf2695..e51822ac125 100644
--- a/source/blender/editors/interface/interface.c
+++ b/source/blender/editors/interface/interface.c
@@ -942,7 +942,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) {
@@ -973,43 +972,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;
@@ -1131,6 +1157,8 @@ static bool ui_but_event_property_operator_string(
return found;
}
+/** \} */
+
/**
* This goes in a seemingly weird pattern:
*