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:
-rw-r--r--source/blender/editors/include/UI_interface.h2
-rw-r--r--source/blender/editors/interface/interface.c22
-rw-r--r--source/blender/editors/interface/interface_layout.c27
-rw-r--r--source/blender/editors/interface/interface_region_tooltip.c2
-rw-r--r--source/blender/windowmanager/WM_api.h3
-rw-r--r--source/blender/windowmanager/intern/wm_operator_type.c22
6 files changed, 56 insertions, 22 deletions
diff --git a/source/blender/editors/include/UI_interface.h b/source/blender/editors/include/UI_interface.h
index 1fa9ed0b2c0..367f7965026 100644
--- a/source/blender/editors/include/UI_interface.h
+++ b/source/blender/editors/include/UI_interface.h
@@ -1863,6 +1863,8 @@ uiBlock *uiLayoutGetBlock(uiLayout *layout);
void uiLayoutSetFunc(uiLayout *layout, uiMenuHandleFunc handlefunc, void *argv);
void uiLayoutSetContextPointer(uiLayout *layout, const char *name, struct PointerRNA *ptr);
void uiLayoutContextCopy(uiLayout *layout, struct bContextStore *context);
+struct wmOperatorType *UI_but_operatortype_get_from_enum_menu(struct uiBut *but,
+ PropertyRNA **r_prop);
struct MenuType *UI_but_menutype_get(uiBut *but);
struct PanelType *UI_but_paneltype_get(uiBut *but);
void UI_menutype_draw(struct bContext *C, struct MenuType *mt, struct uiLayout *layout);
diff --git a/source/blender/editors/interface/interface.c b/source/blender/editors/interface/interface.c
index 9cede126890..c8526c16dba 100644
--- a/source/blender/editors/interface/interface.c
+++ b/source/blender/editors/interface/interface.c
@@ -6758,9 +6758,6 @@ void UI_but_string_info_get(bContext *C, uiBut *but, ...)
else if (but->tip && but->tip[0]) {
tmp = BLI_strdup(but->tip);
}
- else if (but->optype && but->optype->get_description) {
- tmp = WM_operatortype_description(C, but->optype, but->opptr);
- }
else {
type = BUT_GET_RNA_TIP; /* Fail-safe solution... */
}
@@ -6805,13 +6802,10 @@ void UI_but_string_info_get(bContext *C, uiBut *but, ...)
}
else if (but->optype) {
if (type == BUT_GET_RNA_LABEL) {
- tmp = BLI_strdup(WM_operatortype_name(but->optype, NULL));
+ tmp = BLI_strdup(WM_operatortype_name(but->optype, but->opptr));
}
else {
- const char *t = RNA_struct_ui_description(but->optype->srna);
- if (t && t[0]) {
- tmp = BLI_strdup(t);
- }
+ tmp = WM_operatortype_description(C, but->optype, but->opptr);
}
}
else if (ELEM(but->type, UI_BTYPE_MENU, UI_BTYPE_PULLDOWN, UI_BTYPE_POPOVER)) {
@@ -6834,6 +6828,18 @@ void UI_but_string_info_get(bContext *C, uiBut *but, ...)
}
if (tmp == NULL) {
+ wmOperatorType *ot = UI_but_operatortype_get_from_enum_menu(but, NULL);
+ if (ot) {
+ if (type == BUT_GET_RNA_LABEL) {
+ tmp = BLI_strdup(WM_operatortype_name(ot, NULL));
+ }
+ else {
+ tmp = WM_operatortype_description(C, ot, NULL);
+ }
+ }
+ }
+
+ if (tmp == NULL) {
PanelType *pt = UI_but_paneltype_get(but);
if (pt) {
if (type == BUT_GET_RNA_LABEL) {
diff --git a/source/blender/editors/interface/interface_layout.c b/source/blender/editors/interface/interface_layout.c
index f7955c15dc4..50355d350ac 100644
--- a/source/blender/editors/interface/interface_layout.c
+++ b/source/blender/editors/interface/interface_layout.c
@@ -3404,14 +3404,7 @@ void uiItemMenuEnumO_ptr(uiLayout *layout,
BLI_strncpy(lvl->propname, propname, sizeof(lvl->propname));
lvl->opcontext = layout->root->opcontext;
- but = ui_item_menu(layout,
- name,
- icon,
- menu_item_enum_opname_menu,
- NULL,
- lvl,
- RNA_struct_ui_description(ot->srna),
- true);
+ but = ui_item_menu(layout, name, icon, menu_item_enum_opname_menu, NULL, lvl, NULL, true);
/* add hotkey here, lower UI code can't detect it */
if ((layout->root->block->flag & UI_BLOCK_LOOP) && (ot->prop && ot->invoke)) {
@@ -5501,6 +5494,24 @@ void uiLayoutSetContextFromBut(uiLayout *layout, uiBut *but)
}
/* this is a bit of a hack but best keep it in one place at least */
+wmOperatorType *UI_but_operatortype_get_from_enum_menu(uiBut *but, PropertyRNA **r_prop)
+{
+ if (r_prop != NULL) {
+ *r_prop = NULL;
+ }
+
+ if (but->menu_create_func == menu_item_enum_opname_menu) {
+ MenuItemLevel *lvl = but->func_argN;
+ wmOperatorType *ot = WM_operatortype_find(lvl->opname, false);
+ if ((ot != NULL) && (r_prop != NULL)) {
+ *r_prop = RNA_struct_type_find_property(ot->srna, lvl->propname);
+ }
+ return ot;
+ }
+ return NULL;
+}
+
+/* this is a bit of a hack but best keep it in one place at least */
MenuType *UI_but_menutype_get(uiBut *but)
{
if (but->menu_create_func == ui_item_menutype_func) {
diff --git a/source/blender/editors/interface/interface_region_tooltip.c b/source/blender/editors/interface/interface_region_tooltip.c
index b3a65e024f3..f472c56e280 100644
--- a/source/blender/editors/interface/interface_region_tooltip.c
+++ b/source/blender/editors/interface/interface_region_tooltip.c
@@ -1075,7 +1075,7 @@ static uiTooltipData *ui_tooltip_data_from_gizmo(bContext *C, wmGizmo *gz)
NULL;
if (gzop != NULL) {
/* Description */
- char *info = WM_operatortype_description(C, gzop->type, &gzop->ptr);
+ char *info = WM_operatortype_description_or_name(C, gzop->type, &gzop->ptr);
if (info != NULL) {
char *text = info;
diff --git a/source/blender/windowmanager/WM_api.h b/source/blender/windowmanager/WM_api.h
index 07746af4b60..c57fe6d4ba1 100644
--- a/source/blender/windowmanager/WM_api.h
+++ b/source/blender/windowmanager/WM_api.h
@@ -578,6 +578,9 @@ const char *WM_operatortype_name(struct wmOperatorType *ot, struct PointerRNA *p
char *WM_operatortype_description(struct bContext *C,
struct wmOperatorType *ot,
struct PointerRNA *properties);
+char *WM_operatortype_description_or_name(struct bContext *C,
+ struct wmOperatorType *ot,
+ struct PointerRNA *properties);
/* wm_operator_utils.c */
void WM_operator_type_modal_from_exec_for_object_edit_coords(struct wmOperatorType *ot);
diff --git a/source/blender/windowmanager/intern/wm_operator_type.c b/source/blender/windowmanager/intern/wm_operator_type.c
index 457cd0f16be..7cc20baf606 100644
--- a/source/blender/windowmanager/intern/wm_operator_type.c
+++ b/source/blender/windowmanager/intern/wm_operator_type.c
@@ -611,15 +611,27 @@ char *WM_operatortype_description(struct bContext *C,
}
const char *info = RNA_struct_ui_description(ot->srna);
-
- if (!(info && info[0])) {
- info = RNA_struct_ui_name(ot->srna);
- }
-
if (info && info[0]) {
return BLI_strdup(info);
}
return NULL;
}
+/**
+ * Use when we want a label, preferring the description.
+ */
+char *WM_operatortype_description_or_name(struct bContext *C,
+ struct wmOperatorType *ot,
+ struct PointerRNA *properties)
+{
+ char *text = WM_operatortype_description(C, ot, properties);
+ if (text == NULL) {
+ const char *text_orig = WM_operatortype_name(ot, properties);
+ if (text_orig != NULL) {
+ text = BLI_strdup(text_orig);
+ }
+ }
+ return text;
+}
+
/** \} */