[Bf-blender-cvs] [4705682151b] blender2.8: Merge branch 'master' into blender2.8

Campbell Barton noreply at git.blender.org
Fri Jul 13 12:52:31 CEST 2018


Commit: 4705682151b19fbaa5cccd85cbc8b0d00f743e30
Author: Campbell Barton
Date:   Fri Jul 13 12:52:10 2018 +0200
Branches: blender2.8
https://developer.blender.org/rB4705682151b19fbaa5cccd85cbc8b0d00f743e30

Merge branch 'master' into blender2.8

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



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

diff --cc source/blender/windowmanager/WM_api.h
index ccbed11e6e8,2ae2a65e2c9..68cbc3828fc
--- a/source/blender/windowmanager/WM_api.h
+++ b/source/blender/windowmanager/WM_api.h
@@@ -424,9 -353,22 +403,30 @@@ char		*WM_prop_pystring_assign(struct b
  void		WM_operator_bl_idname(char *to, const char *from);
  void		WM_operator_py_idname(char *to, const char *from);
  bool        WM_operator_py_idname_ok_or_report(struct ReportList *reports, const char *classname, const char *idname);
 -
 +const char *WM_context_member_from_ptr(struct bContext *C, const struct PointerRNA *ptr);
  
- /* *************** uilist types ******************** */
+ /* wm_operator_type.c */
+ struct wmOperatorType *WM_operatortype_find(const char *idname, bool quiet);
+ void WM_operatortype_iter(struct GHashIterator *ghi);
+ void WM_operatortype_append(void (*opfunc)(struct wmOperatorType *));
+ void WM_operatortype_append_ptr(void (*opfunc)(struct wmOperatorType *, void *), void *userdata);
+ void WM_operatortype_append_macro_ptr(void (*opfunc)(struct wmOperatorType *, void *), void *userdata);
+ void WM_operatortype_remove_ptr(struct wmOperatorType *ot);
+ bool WM_operatortype_remove(const char *idname);
+ void WM_operatortype_last_properties_clear_all(void);
++void WM_operatortype_props_advanced_begin(struct wmOperatorType *ot);
++void WM_operatortype_props_advanced_end(struct wmOperatorType *ot);
++
++#define WM_operatortype_prop_tag(property, tags) \
++	{ \
++		CHECK_TYPE(tags, eOperatorPropTags); \
++		RNA_def_property_tags(prop, tags); \
++	} (void)0
+ 
+ struct wmOperatorType *WM_operatortype_append_macro(const char *idname, const char *name, const char *description, int flag);
+ struct wmOperatorTypeMacro *WM_operatortype_macro_define(struct wmOperatorType *ot, const char *idname);
+ 
+ /* wm_uilist_type.c */
  void                WM_uilisttype_init(void);
  struct uiListType  *WM_uilisttype_find(const char *idname, bool quiet);
  bool                WM_uilisttype_add(struct uiListType *ult);
diff --cc source/blender/windowmanager/intern/wm_operator_type.c
index e0d3c4a6727,62b378e0866..89421ac0ab0
--- a/source/blender/windowmanager/intern/wm_operator_type.c
+++ b/source/blender/windowmanager/intern/wm_operator_type.c
@@@ -213,55 -199,27 +213,76 @@@ void wm_operatortype_free(void
  	global_ops_hash = NULL;
  }
  
 +/**
 + * Tag all operator-properties of \a ot defined after calling this, until
 + * the next #WM_operatortype_props_advanced_end call (if available), with
 + * #OP_PROP_TAG_ADVANCED. Previously defined ones properties not touched.
 + *
 + * Calling this multiple times without a call to #WM_operatortype_props_advanced_end,
 + * all calls after the first one are ignored. Meaning all propereties defined after the
 + * first call are tagged as advanced.
 + *
 + * This doesn't do the actual tagging, #WM_operatortype_props_advanced_end does which is
 + * called for all operators during registration (see #wm_operatortype_append__end).
 + */
 +void WM_operatortype_props_advanced_begin(wmOperatorType *ot)
 +{
 +	if (ot_prop_basic_count == -1) { /* Don't do anything if _begin was called before, but not _end  */
 +		ot_prop_basic_count = RNA_struct_count_properties(ot->srna);
 +	}
 +}
 +
 +/**
 + * Tags all operator-properties of \ot defined since the first #WM_operatortype_props_advanced_begin
 + * call, or the last #WM_operatortype_props_advanced_end call, with #OP_PROP_TAG_ADVANCED.
 + * Note that this is called for all operators during registration (see #wm_operatortype_append__end).
 + * So it does not need to be explicitly called in operator-type definition.
 + */
 +void WM_operatortype_props_advanced_end(wmOperatorType *ot)
 +{
 +	PointerRNA struct_ptr;
 +	int counter = 0;
 +
 +	if (ot_prop_basic_count == -1) {
 +		/* WM_operatortype_props_advanced_begin was not called. Don't do anything. */
 +		return;
 +	}
 +
 +	RNA_pointer_create(NULL, ot->srna, NULL, &struct_ptr);
 +
 +	RNA_STRUCT_BEGIN (&struct_ptr, prop)
 +	{
 +		counter++;
 +		if (counter > ot_prop_basic_count) {
 +			WM_operatortype_prop_tag(prop, OP_PROP_TAG_ADVANCED);
 +		}
 +	}
 +	RNA_STRUCT_END;
 +
 +	ot_prop_basic_count = -1;
 +}
 +
+ /**
+  * Remove memory of all previously executed tools.
+  */
+ void WM_operatortype_last_properties_clear_all(void)
+ {
+ 	GHashIterator iter;
+ 
+ 	for (WM_operatortype_iter(&iter);
+ 	     (!BLI_ghashIterator_done(&iter));
+ 	     (BLI_ghashIterator_step(&iter)))
+ 	{
+ 		wmOperatorType *ot = BLI_ghashIterator_getValue(&iter);
+ 
+ 		if (ot->last_properties) {
+ 			IDP_FreeProperty(ot->last_properties);
+ 			MEM_freeN(ot->last_properties);
+ 			ot->last_properties = NULL;
+ 		}
+ 	}
+ }
+ 
  /** \} */
  
  /* -------------------------------------------------------------------- */



More information about the Bf-blender-cvs mailing list