Merge branch 'blender-v3.0-release'

This commit is contained in:
Julian Eisel 2021-11-23 18:35:56 +01:00
commit c09e8a3590
8 changed files with 31 additions and 8 deletions

View File

@ -1762,6 +1762,8 @@ void UI_panel_header_buttons_begin(struct Panel *panel);
void UI_panel_header_buttons_end(struct Panel *panel);
void UI_panel_end(struct Panel *panel, int width, int height);
void UI_panel_context_pointer_set(struct Panel *panel, const char *name, struct PointerRNA *ptr);
bool UI_panel_is_closed(const struct Panel *panel);
bool UI_panel_is_active(const struct Panel *panel);
void UI_panel_label_offset(const struct uiBlock *block, int *r_x, int *r_y);

View File

@ -486,8 +486,12 @@ static void reorder_instanced_panel_list(bContext *C, ARegion *region, Panel *dr
/* Set the bit to tell the interface to instanced the list. */
drag_panel->flag |= PNL_INSTANCED_LIST_ORDER_CHANGED;
CTX_store_set(C, drag_panel->runtime.context);
/* Finally, move this panel's list item to the new index in its list. */
drag_panel->type->reorder(C, drag_panel, move_to_index);
CTX_store_set(C, NULL);
}
/**
@ -2458,6 +2462,17 @@ static void ui_panel_custom_data_set_recursive(Panel *panel, PointerRNA *custom_
}
}
/**
* Set a context for this entire panel and its current layout. This should be used whenever panel
* callbacks that are called outside of regular drawing might require context. Currently it affects
* the #PanelType.reorder callback only.
*/
void UI_panel_context_pointer_set(Panel *panel, const char *name, PointerRNA *ptr)
{
uiLayoutSetContextPointer(panel->layout, name, ptr);
panel->runtime.context = uiLayoutGetContextStore(panel->layout);
}
void UI_panel_custom_data_set(Panel *panel, PointerRNA *custom_data)
{
BLI_assert(panel->type != NULL);

View File

@ -2727,7 +2727,12 @@ static void draw_constraint_header(uiLayout *layout, Object *ob, bConstraint *co
PointerRNA ptr;
RNA_pointer_create(&ob->id, &RNA_Constraint, con, &ptr);
uiLayoutSetContextPointer(layout, "constraint", &ptr);
if (block->panel) {
UI_panel_context_pointer_set(block->panel, "constraint", &ptr);
}
else {
uiLayoutSetContextPointer(layout, "constraint", &ptr);
}
/* Constraint type icon. */
uiLayout *sub = uiLayoutRow(layout, false);

View File

@ -232,7 +232,7 @@ PointerRNA *gpencil_modifier_panel_get_property_pointers(Panel *panel, PointerRN
UI_block_lock_clear(block);
UI_block_lock_set(block, ID_IS_LINKED((Object *)ptr->owner_id), ERROR_LIBDATA_MESSAGE);
uiLayoutSetContextPointer(panel->layout, "modifier", ptr);
UI_panel_context_pointer_set(panel, "modifier", ptr);
return ptr;
}
@ -312,7 +312,7 @@ static void gpencil_modifier_panel_header(const bContext *UNUSED(C), Panel *pane
PointerRNA *ptr = UI_panel_custom_data_get(panel);
GpencilModifierData *md = (GpencilModifierData *)ptr->data;
uiLayoutSetContextPointer(panel->layout, "modifier", ptr);
UI_panel_context_pointer_set(panel, "modifier", ptr);
const GpencilModifierTypeInfo *mti = BKE_gpencil_modifier_get_info(md->type);
bool narrow_panel = (panel->sizex < UI_UNIT_X * 9 && panel->sizex != 0);

View File

@ -313,8 +313,6 @@ static void panel_draw(const bContext *C, Panel *panel)
UI_TEMPLATE_LIST_FLAG_NONE);
uiLayout *col = uiLayoutColumn(row, false);
uiLayoutSetContextPointer(col, "modifier", ptr);
uiLayout *sub = uiLayoutColumn(col, true);
uiItemO(sub, "", ICON_ADD, "GPENCIL_OT_segment_add");
uiItemO(sub, "", ICON_REMOVE, "GPENCIL_OT_segment_remove");

View File

@ -154,6 +154,9 @@ typedef struct Panel_Runtime {
/* Pointer to the panel's block. Useful when changes to panel #uiBlocks
* need some context from traversal of the panel "tree". */
struct uiBlock *block;
/* Non-owning pointer. The context is stored in the block. */
struct bContextStore *context;
} Panel_Runtime;
/** The part from uiBlock that needs saved in file. */

View File

@ -132,7 +132,7 @@ PointerRNA *modifier_panel_get_property_pointers(Panel *panel, PointerRNA *r_ob_
uiBlock *block = uiLayoutGetBlock(panel->layout);
UI_block_lock_set(block, ID_IS_LINKED((Object *)ptr->owner_id), ERROR_LIBDATA_MESSAGE);
uiLayoutSetContextPointer(panel->layout, "modifier", ptr);
UI_panel_context_pointer_set(panel, "modifier", ptr);
return ptr;
}
@ -304,7 +304,7 @@ static void modifier_panel_header(const bContext *C, Panel *panel)
ModifierData *md = (ModifierData *)ptr->data;
Object *ob = (Object *)ptr->owner_id;
uiLayoutSetContextPointer(panel->layout, "modifier", ptr);
UI_panel_context_pointer_set(panel, "modifier", ptr);
const ModifierTypeInfo *mti = BKE_modifier_get_info(md->type);
Scene *scene = CTX_data_scene(C);

View File

@ -117,7 +117,7 @@ PointerRNA *shaderfx_panel_get_property_pointers(Panel *panel, PointerRNA *r_ob_
RNA_pointer_create(ptr->owner_id, &RNA_Object, ptr->owner_id, r_ob_ptr);
}
uiLayoutSetContextPointer(panel->layout, "shaderfx", ptr);
UI_panel_context_pointer_set(panel, "shaderfx", ptr);
return ptr;
}