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>2017-11-02 07:44:33 +0300
committerCampbell Barton <ideasman42@gmail.com>2017-11-02 07:45:19 +0300
commit4a85089abe6d5abb9f6bb0d8255eba33dc030fcb (patch)
tree25459e54af9cf6712ca349b924319939ba853909 /source/blender/editors/interface/interface_layout.c
parentcf6e45b5224d16263d7c87411a2ff71ed928410f (diff)
parent765e28948e706d8fce97c23d4d050a607971488b (diff)
Merge branch 'master' into blender2.8
Diffstat (limited to 'source/blender/editors/interface/interface_layout.c')
-rw-r--r--source/blender/editors/interface/interface_layout.c52
1 files changed, 50 insertions, 2 deletions
diff --git a/source/blender/editors/interface/interface_layout.c b/source/blender/editors/interface/interface_layout.c
index 1ac54d5353d..212cd462aef 100644
--- a/source/blender/editors/interface/interface_layout.c
+++ b/source/blender/editors/interface/interface_layout.c
@@ -795,7 +795,7 @@ static void ui_item_disabled(uiLayout *layout, const char *name)
* \param r_opptr: Optional, initialize with operator properties when not NULL.
* Will always be written to even in the case of errors.
*/
-void uiItemFullO_ptr(
+static uiBut *uiItemFullO_ptr_ex(
uiLayout *layout, wmOperatorType *ot,
const char *name, int icon, IDProperty *properties, int context, int flag,
PointerRNA *r_opptr)
@@ -845,6 +845,10 @@ void uiItemFullO_ptr(
if (flag & UI_ITEM_R_NO_BG)
UI_block_emboss_set(block, UI_EMBOSS);
+ if (flag & UI_ITEM_O_DEPRESS) {
+ but->flag |= UI_SELECT;
+ }
+
if (layout->redalert)
UI_but_flag_enable(but, UI_BUT_REDALERT);
@@ -862,6 +866,50 @@ void uiItemFullO_ptr(
*r_opptr = *opptr;
}
}
+
+ return but;
+}
+
+static void ui_item_hold_menu(struct bContext *C, ARegion *butregion, uiBut *but)
+{
+ uiPopupMenu *pup = UI_popup_menu_begin(C, "", ICON_NONE);
+ uiLayout *layout = UI_popup_menu_layout(pup);
+ uiBlock *block = layout->root->block;
+ UI_popup_menu_but_set(pup, butregion, but);
+
+ block->flag |= UI_BLOCK_POPUP_HOLD;
+
+ const char *menu_id = but->hold_argN;
+ MenuType *mt = WM_menutype_find(menu_id, true);
+ if (mt) {
+ Menu menu = {NULL};
+ menu.layout = layout;
+ menu.type = mt;
+ mt->draw(C, &menu);
+ }
+ else {
+ uiItemL(layout, "Menu Missing:", ICON_NONE);
+ uiItemL(layout, menu_id, ICON_NONE);
+ }
+ UI_popup_menu_end(C, pup);
+}
+
+void uiItemFullO_ptr(
+ uiLayout *layout, wmOperatorType *ot,
+ const char *name, int icon, IDProperty *properties, int context, int flag,
+ PointerRNA *r_opptr)
+{
+ uiItemFullO_ptr_ex(layout, ot, name, icon, properties, context, flag, r_opptr);
+}
+
+void uiItemFullOMenuHold_ptr(
+ uiLayout *layout, wmOperatorType *ot,
+ const char *name, int icon, IDProperty *properties, int context, int flag,
+ const char *menu_id,
+ PointerRNA *r_opptr)
+{
+ uiBut *but = uiItemFullO_ptr_ex(layout, ot, name, icon, properties, context, flag, r_opptr);
+ UI_but_func_hold_set(but, ui_item_hold_menu, BLI_strdup(menu_id));
}
void uiItemFullO(
@@ -875,7 +923,7 @@ void uiItemFullO(
ot, opname, {
if (r_opptr) {
*r_opptr = PointerRNA_NULL;
- };
+ }
return;
});