Merge branch 'master' into blender2.8
authorCampbell Barton <ideasman42@gmail.com>
Fri, 13 Jul 2018 08:31:30 +0000 (10:31 +0200)
committerCampbell Barton <ideasman42@gmail.com>
Fri, 13 Jul 2018 08:31:30 +0000 (10:31 +0200)
source/blender/editors/interface/interface.c

index 20361bde16fde32f4047a0d262bac01da46e6f64..0b91a1c7aade38e47686914247468b3342a9faa5 100644 (file)
@@ -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:
  *