Cleanup: Move button context based operator poll into utility function
Using the button context for operators is useful for other cases as well (where the operator isn't the button operator itself). For example we'll need this for the asset view UI template, where there will be additional operators that should be able to act on button context.
This commit is contained in:
parent
781f41f633
commit
d37deb19be
|
@ -1816,6 +1816,29 @@ static void ui_but_validate(const uiBut *but)
|
|||
}
|
||||
#endif
|
||||
|
||||
/**
|
||||
* Check if the operator \a ot poll is successfull with the context given by \a but (optionally).
|
||||
* \param but: The button that might store context. Can be NULL for convenience (e.g. if there is
|
||||
* no button to take context from, but we still want to poll the operator).
|
||||
*/
|
||||
bool ui_but_context_poll_operator(bContext *C, wmOperatorType *ot, const uiBut *but)
|
||||
{
|
||||
bool result;
|
||||
int opcontext = but ? but->opcontext : WM_OP_INVOKE_DEFAULT;
|
||||
|
||||
if (but && but->context) {
|
||||
CTX_store_set(C, but->context);
|
||||
}
|
||||
|
||||
result = WM_operator_poll_context(C, ot, opcontext);
|
||||
|
||||
if (but && but->context) {
|
||||
CTX_store_set(C, NULL);
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
void UI_block_end_ex(const bContext *C, uiBlock *block, const int xy[2], int r_xy[2])
|
||||
{
|
||||
wmWindow *window = CTX_wm_window(C);
|
||||
|
@ -1841,17 +1864,9 @@ void UI_block_end_ex(const bContext *C, uiBlock *block, const int xy[2], int r_x
|
|||
if (but->optype) {
|
||||
wmOperatorType *ot = but->optype;
|
||||
|
||||
if (but->context) {
|
||||
CTX_store_set((bContext *)C, but->context);
|
||||
}
|
||||
|
||||
if (ot == NULL || WM_operator_poll_context((bContext *)C, ot, but->opcontext) == 0) {
|
||||
if (ot == NULL || !ui_but_context_poll_operator((bContext *)C, ot, but)) {
|
||||
but->flag |= UI_BUT_DISABLED;
|
||||
}
|
||||
|
||||
if (but->context) {
|
||||
CTX_store_set((bContext *)C, NULL);
|
||||
}
|
||||
}
|
||||
|
||||
const AnimationEvalContext anim_eval_context = BKE_animsys_eval_context_construct(
|
||||
|
|
|
@ -647,6 +647,8 @@ extern bool ui_but_menu_draw_as_popover(const uiBut *but);
|
|||
void ui_but_range_set_hard(uiBut *but);
|
||||
void ui_but_range_set_soft(uiBut *but);
|
||||
|
||||
bool ui_but_context_poll_operator(struct bContext *C, struct wmOperatorType *ot, const uiBut *but);
|
||||
|
||||
extern void ui_but_update(uiBut *but);
|
||||
extern void ui_but_update_edited(uiBut *but);
|
||||
extern bool ui_but_is_float(const uiBut *but) ATTR_WARN_UNUSED_RESULT;
|
||||
|
|
Loading…
Reference in New Issue