diff --git a/release/scripts/startup/bl_ui/space_topbar.py b/release/scripts/startup/bl_ui/space_topbar.py index dad13ce9f1e..3f32038e56d 100644 --- a/release/scripts/startup/bl_ui/space_topbar.py +++ b/release/scripts/startup/bl_ui/space_topbar.py @@ -179,7 +179,7 @@ class TOPBAR_HT_lower_bar(Header): row.enabled = op is not None row.popover( space_type='TOPBAR', - region_type='WINDOW', + region_type='HEADER', panel_type="TOPBAR_PT_redo", text=op.name + " Settings" if op else "Command Settings", ) @@ -232,16 +232,6 @@ class _draw_left_context_mode: UnifiedPaintPanel.prop_unified_strength(layout, context, brush, "strength", slider=True, text="Strength") -class TOPBAR_PT_redo(Panel): - bl_label = "Redo" - bl_space_type = 'TOPBAR' - bl_region_type = 'WINDOW' - - def draw(self, context): - layout = self.layout - layout.column().template_operator_redo_props() - - class INFO_MT_editor_menus(Menu): bl_idname = "INFO_MT_editor_menus" bl_label = "" @@ -508,7 +498,6 @@ class INFO_MT_help(Menu): classes = ( TOPBAR_HT_upper_bar, TOPBAR_HT_lower_bar, - TOPBAR_PT_redo, INFO_MT_editor_menus, INFO_MT_file, INFO_MT_file_import, diff --git a/source/blender/editors/include/UI_interface.h b/source/blender/editors/include/UI_interface.h index 33dc12f83aa..5830a8ea811 100644 --- a/source/blender/editors/include/UI_interface.h +++ b/source/blender/editors/include/UI_interface.h @@ -1001,7 +1001,7 @@ void uiTemplatePathBuilder(uiLayout *layout, struct PointerRNA *ptr, const char struct PointerRNA *root_ptr, const char *text); uiLayout *uiTemplateModifier(uiLayout *layout, struct bContext *C, struct PointerRNA *ptr); -void uiTemplateOperatorRedoProperties(uiLayout *layout, struct bContext *C); +void uiTemplateOperatorRedoProperties(uiLayout *layout, const struct bContext *C); uiLayout *uiTemplateConstraint(uiLayout *layout, struct PointerRNA *ptr); void uiTemplatePreview(uiLayout *layout, struct bContext *C, struct ID *id, int show_buttons, struct ID *parent, diff --git a/source/blender/editors/interface/interface_templates.c b/source/blender/editors/interface/interface_templates.c index 29a40f4e05f..9167bc43f4a 100644 --- a/source/blender/editors/interface/interface_templates.c +++ b/source/blender/editors/interface/interface_templates.c @@ -1561,7 +1561,7 @@ static void template_operator_redo_property_buts_draw( } } -void uiTemplateOperatorRedoProperties(uiLayout *layout, bContext *C) +void uiTemplateOperatorRedoProperties(uiLayout *layout, const bContext *C) { wmOperator *op = WM_operator_last_redo(C); uiBlock *block = uiLayoutGetBlock(layout); diff --git a/source/blender/editors/space_topbar/space_topbar.c b/source/blender/editors/space_topbar/space_topbar.c index fc76fd9c638..4c40353618b 100644 --- a/source/blender/editors/space_topbar/space_topbar.c +++ b/source/blender/editors/space_topbar/space_topbar.c @@ -57,6 +57,8 @@ #include "WM_message.h" +void topbar_panels_register(ARegionType *art); + /* ******************** default callbacks for topbar space ***************** */ static SpaceLink *topbar_new(const ScrArea *UNUSED(area), const Scene *UNUSED(scene)) @@ -273,9 +275,58 @@ void ED_spacetype_topbar(void) art->layout = ED_region_header_layout; art->draw = ED_region_header_draw; + /* For popovers. */ + topbar_panels_register(art); + BLI_addhead(&st->regiontypes, art); recent_files_menu_register(); BKE_spacetype_register(st); } + + +/* -------------------------------------------------------------------- */ +/** \name Redo Panel + * \{ */ + +static int topbar_panel_operator_redo_poll(const bContext *C, PanelType *UNUSED(pt)) +{ + wmOperator *op = WM_operator_last_redo(C); + if (op == NULL) { + return false; + } + + return (WM_operator_poll((bContext *)C, op->type) && + WM_operator_check_ui_empty(op->type) == false); +} + +static void topbar_panel_operator_redo(const bContext *C, Panel *pa) +{ + wmOperator *op = WM_operator_last_redo(C); + if (op == NULL) { + return; + } + if (!WM_operator_check_ui_enabled(C, op->type->name)) { + uiLayoutSetEnabled(pa->layout, false); + } + uiLayout *col = uiLayoutColumn(pa->layout, false); + uiTemplateOperatorRedoProperties(col, C); +} + +void topbar_panels_register(ARegionType *art) +{ + PanelType *pt; + + pt = MEM_callocN(sizeof(PanelType), __func__); + strcpy(pt->idname, "TOPBAR_PT_redo"); + strcpy(pt->label, N_("Redo")); + strcpy(pt->translation_context, BLT_I18NCONTEXT_DEFAULT_BPYRNA); + pt->draw = topbar_panel_operator_redo; + pt->poll = topbar_panel_operator_redo_poll; + pt->space_type = SPACE_TOPBAR; + pt->region_type = RGN_TYPE_HEADER; + BLI_addtail(&art->paneltypes, pt); +} + +/** \} */ diff --git a/source/blender/makesrna/intern/rna_ui_api.c b/source/blender/makesrna/intern/rna_ui_api.c index cb72e237577..d980696c3ee 100644 --- a/source/blender/makesrna/intern/rna_ui_api.c +++ b/source/blender/makesrna/intern/rna_ui_api.c @@ -811,10 +811,6 @@ void RNA_api_ui_layout(StructRNA *srna) parm = RNA_def_pointer(func, "layout", "UILayout", "", "Sub-layout to put items in"); RNA_def_function_return(func, parm); - func = RNA_def_function(srna, "template_operator_redo_props", "uiTemplateOperatorRedoProperties"); - RNA_def_function_flag(func, FUNC_USE_CONTEXT); - RNA_def_function_ui_description(func, "Adds properties of the last executed operator using redo"); - func = RNA_def_function(srna, "template_constraint", "uiTemplateConstraint"); RNA_def_function_ui_description(func, "Generates the UI layout for constraints"); parm = RNA_def_pointer(func, "data", "Constraint", "", "Constraint data");