UI: replace toggle header with a property
authorCampbell Barton <ideasman42@gmail.com>
Thu, 18 Apr 2019 14:35:11 +0000 (16:35 +0200)
committerCampbell Barton <ideasman42@gmail.com>
Thu, 18 Apr 2019 14:39:46 +0000 (16:39 +0200)
source/blender/editors/screen/screen_ops.c
source/blender/makesrna/intern/rna_space.c

index 9a79578..07f6055 100644 (file)
@@ -3746,40 +3746,6 @@ static void SCREEN_OT_region_flip(wmOperatorType *ot)
 
 /** \} */
 
-/* -------------------------------------------------------------------- */
-/** \name Header Toggle Operator
- * \{ */
-
-static int header_exec(bContext *C, wmOperator *UNUSED(op))
-{
-  ARegion *ar = screen_find_region_type(C, RGN_TYPE_HEADER);
-
-  if (ar == NULL) {
-    return OPERATOR_CANCELLED;
-  }
-
-  ar->flag ^= RGN_FLAG_HIDDEN;
-
-  ED_area_tag_redraw(CTX_wm_area(C));
-
-  WM_event_add_notifier(C, NC_SCREEN | NA_EDITED, NULL);
-
-  return OPERATOR_FINISHED;
-}
-
-static void SCREEN_OT_header(wmOperatorType *ot)
-{
-  /* identifiers */
-  ot->name = "Toggle Header";
-  ot->description = "Toggle header display";
-  ot->idname = "SCREEN_OT_header";
-
-  /* api callbacks */
-  ot->exec = header_exec;
-}
-
-/** \} */
-
 /* -------------------------------------------------------------------- */
 /** \name Header Toggle Menu Operator
  * \{ */
@@ -3830,7 +3796,9 @@ void ED_screens_header_tools_menu_create(bContext *C, uiLayout *layout, void *UN
                                                                 IFACE_("Flip to Top");
 
   if (!ELEM(sa->spacetype, SPACE_TOPBAR)) {
-    uiItemO(layout, IFACE_("Toggle Header"), ICON_NONE, "SCREEN_OT_header");
+    PointerRNA ptr;
+    RNA_pointer_create((ID *)CTX_wm_screen(C), &RNA_Space, sa->spacedata.first, &ptr);
+    uiItemR(layout, &ptr, "show_region_header", 0, IFACE_("Show Header"), ICON_NONE);
   }
 
   /* default is WM_OP_INVOKE_REGION_WIN, which we don't want here. */
@@ -5110,7 +5078,6 @@ void ED_operatortypes_screen(void)
   WM_operatortype_append(SCREEN_OT_region_quadview);
   WM_operatortype_append(SCREEN_OT_region_scale);
   WM_operatortype_append(SCREEN_OT_region_flip);
-  WM_operatortype_append(SCREEN_OT_header);
   WM_operatortype_append(SCREEN_OT_header_toggle_menus);
   WM_operatortype_append(SCREEN_OT_header_context_menu);
   WM_operatortype_append(SCREEN_OT_footer);
index ffbea29..04032d0 100644 (file)
@@ -614,6 +614,20 @@ static void rna_Space_bool_from_region_flag_update_by_type(bContext *C,
 /** \name Region Flag Access (Typed Callbacks)
  * \{ */
 
+/* Header Region. */
+static bool rna_Space_show_region_header_get(PointerRNA *ptr)
+{
+  return !rna_Space_bool_from_region_flag_get_by_type(ptr, RGN_TYPE_HEADER, RGN_FLAG_HIDDEN);
+}
+static void rna_Space_show_region_header_set(PointerRNA *ptr, bool value)
+{
+  rna_Space_bool_from_region_flag_set_by_type(ptr, RGN_TYPE_HEADER, RGN_FLAG_HIDDEN, !value);
+}
+static void rna_Space_show_region_header_update(bContext *C, PointerRNA *ptr)
+{
+  rna_Space_bool_from_region_flag_update_by_type(C, ptr, RGN_TYPE_HEADER, RGN_FLAG_HIDDEN);
+}
+
 /* Tools Region. */
 static bool rna_Space_show_region_toolbar_get(PointerRNA *ptr)
 {
@@ -2392,30 +2406,6 @@ static const EnumPropertyItem dt_uv_items[] = {
     {0, NULL, 0, NULL, NULL},
 };
 
-static void rna_def_space(BlenderRNA *brna)
-{
-  StructRNA *srna;
-  PropertyRNA *prop;
-
-  srna = RNA_def_struct(brna, "Space", NULL);
-  RNA_def_struct_sdna(srna, "SpaceLink");
-  RNA_def_struct_ui_text(srna, "Space", "Space data for a screen area");
-  RNA_def_struct_refine_func(srna, "rna_Space_refine");
-
-  prop = RNA_def_property(srna, "type", PROP_ENUM, PROP_NONE);
-  RNA_def_property_enum_sdna(prop, NULL, "spacetype");
-  RNA_def_property_enum_items(prop, rna_enum_space_type_items);
-  /* When making this editable, take care for the special case of global areas (see rna_Area_type_set). */
-  RNA_def_property_clear_flag(prop, PROP_EDITABLE);
-  RNA_def_property_ui_text(prop, "Type", "Space data type");
-
-  /* access to V2D_VIEWSYNC_SCREEN_TIME */
-  prop = RNA_def_property(srna, "show_locked_time", PROP_BOOLEAN, PROP_NONE);
-  RNA_def_property_boolean_funcs(prop, "rna_Space_view2d_sync_get", "rna_Space_view2d_sync_set");
-  RNA_def_property_ui_text(prop, "Lock Time to Other Windows", "");
-  RNA_def_property_update(prop, NC_SPACE | ND_SPACE_TIME, "rna_Space_view2d_sync_update");
-}
-
 static void rna_def_space_generic_show_region_toggles(StructRNA *srna, int region_type_mask)
 {
   PropertyRNA *prop;
@@ -2432,6 +2422,10 @@ static void rna_def_space_generic_show_region_toggles(StructRNA *srna, int regio
     } \
     ((void)0)
 
+  if (region_type_mask & (1 << RGN_TYPE_HEADER)) {
+    region_type_mask &= ~(1 << RGN_TYPE_HEADER);
+    DEF_SHOW_REGION_PROPERTY(show_region_header, "Header", "");
+  }
   if (region_type_mask & (1 << RGN_TYPE_TOOLS)) {
     region_type_mask &= ~(1 << RGN_TYPE_TOOLS);
     DEF_SHOW_REGION_PROPERTY(show_region_toolbar, "Toolbar", "");
@@ -2447,6 +2441,32 @@ static void rna_def_space_generic_show_region_toggles(StructRNA *srna, int regio
   BLI_assert(region_type_mask == 0);
 }
 
+static void rna_def_space(BlenderRNA *brna)
+{
+  StructRNA *srna;
+  PropertyRNA *prop;
+
+  srna = RNA_def_struct(brna, "Space", NULL);
+  RNA_def_struct_sdna(srna, "SpaceLink");
+  RNA_def_struct_ui_text(srna, "Space", "Space data for a screen area");
+  RNA_def_struct_refine_func(srna, "rna_Space_refine");
+
+  prop = RNA_def_property(srna, "type", PROP_ENUM, PROP_NONE);
+  RNA_def_property_enum_sdna(prop, NULL, "spacetype");
+  RNA_def_property_enum_items(prop, rna_enum_space_type_items);
+  /* When making this editable, take care for the special case of global areas (see rna_Area_type_set). */
+  RNA_def_property_clear_flag(prop, PROP_EDITABLE);
+  RNA_def_property_ui_text(prop, "Type", "Space data type");
+
+  /* access to V2D_VIEWSYNC_SCREEN_TIME */
+  prop = RNA_def_property(srna, "show_locked_time", PROP_BOOLEAN, PROP_NONE);
+  RNA_def_property_boolean_funcs(prop, "rna_Space_view2d_sync_get", "rna_Space_view2d_sync_set");
+  RNA_def_property_ui_text(prop, "Lock Time to Other Windows", "");
+  RNA_def_property_update(prop, NC_SPACE | ND_SPACE_TIME, "rna_Space_view2d_sync_update");
+
+  rna_def_space_generic_show_region_toggles(srna, (1 << RGN_TYPE_HEADER));
+}
+
 /* for all spaces that use a mask */
 static void rna_def_space_mask_info(StructRNA *srna, int noteflag, const char *mask_set_func)
 {