New API function to call an existing menu
authorDalai Felinto <dfelinto@gmail.com>
Wed, 3 Jan 2018 12:16:26 +0000 (10:16 -0200)
committerDalai Felinto <dfelinto@gmail.com>
Wed, 3 Jan 2018 12:17:59 +0000 (10:17 -0200)
Thanks Campbell Barton for the help and review.
This is for Blender 2.8, so we are not using this function yet.

source/blender/windowmanager/WM_api.h
source/blender/windowmanager/intern/wm_event_system.c

index e40026880c4a4e82ad9b069af027909e02bb4922..96ed179c8f4fa27c878273b696ade1e2460a16fd 100644 (file)
@@ -230,6 +230,7 @@ void                WM_operator_view3d_unit_defaults(struct bContext *C, struct wmOperator *op
 int                    WM_operator_smooth_viewtx_get(const struct wmOperator *op);
 int                    WM_menu_invoke_ex(struct bContext *C, struct wmOperator *op, int opcontext);
 int                    WM_menu_invoke                  (struct bContext *C, struct wmOperator *op, const struct wmEvent *event);
+void           WM_menu_name_call(struct bContext *C, const char *menu_name, short context);
 int                    WM_enum_search_invoke(struct bContext *C, struct wmOperator *op, const struct wmEvent *event);
                        /* invoke callback, confirm menu + exec */
 int                    WM_operator_confirm             (struct bContext *C, struct wmOperator *op, const struct wmEvent *event);
index a71202bfa71a106550f87d670c2a026c35b75f0e..8f0b5de0cde83442f719ed9fc08f7074032e911a 100644 (file)
@@ -1393,6 +1393,19 @@ int WM_operator_name_call(bContext *C, const char *opstring, short context, Poin
        return 0;
 }
 
+/**
+ * Call an existent menu. The menu can be created in C or Python.
+ */
+void WM_menu_name_call(bContext *C, const char *menu_name, short context)
+{
+       wmOperatorType *ot = WM_operatortype_find("WM_OT_call_menu", false);
+       PointerRNA ptr;
+       WM_operator_properties_create_ptr(&ptr, ot);
+       RNA_string_set(&ptr, "name", menu_name);
+       WM_operator_name_call_ptr(C, ot, context, &ptr);
+       WM_operator_properties_free(&ptr);
+}
+
 /**
  * Similar to #WM_operator_name_call called with #WM_OP_EXEC_DEFAULT context.
  *