[Bf-blender-cvs] [85dcdb87d2e] blender2.8: UI: fix operator redo showing empty popovers

Campbell Barton noreply at git.blender.org
Wed May 2 11:03:19 CEST 2018


Commit: 85dcdb87d2ee91844e1dc343b8bd48ace2717d77
Author: Campbell Barton
Date:   Wed May 2 10:59:20 2018 +0200
Branches: blender2.8
https://developer.blender.org/rB85dcdb87d2ee91844e1dc343b8bd48ace2717d77

UI: fix operator redo showing empty popovers

Many operators have no options,
showing a popover button with no content isn't good.

===================================================================

M	release/scripts/startup/bl_ui/space_topbar.py
M	source/blender/editors/include/UI_interface.h
M	source/blender/editors/interface/interface_templates.c
M	source/blender/editors/space_topbar/space_topbar.c
M	source/blender/makesrna/intern/rna_ui_api.c

===================================================================

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");



More information about the Bf-blender-cvs mailing list