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
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/blender/editors/space_topbar
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/blender/editors/space_topbar')
-rw-r--r--source/blender/editors/space_topbar/space_topbar.c51
1 files changed, 51 insertions, 0 deletions
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);
+}
+
+/** \} */