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
path: root/source
diff options
context:
space:
mode:
authorCampbell Barton <ideasman42@gmail.com>2018-05-02 11:59:20 +0300
committerCampbell Barton <ideasman42@gmail.com>2018-05-02 12:03:03 +0300
commit85dcdb87d2ee91844e1dc343b8bd48ace2717d77 (patch)
treec09448f6789a3e67101a9736aac8d4a2ceabca83 /source
parent2bc9396b551ff15cb3fee3eca91aa6357d71ae33 (diff)
UI: fix operator redo showing empty popovers
Many operators have no options, showing a popover button with no content isn't good.
Diffstat (limited to 'source')
-rw-r--r--source/blender/editors/include/UI_interface.h2
-rw-r--r--source/blender/editors/interface/interface_templates.c2
-rw-r--r--source/blender/editors/space_topbar/space_topbar.c51
-rw-r--r--source/blender/makesrna/intern/rna_ui_api.c4
4 files changed, 53 insertions, 6 deletions
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");