[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [27886] trunk/blender/source/blender/ editors: Fix [#21832] Add Modifier, Pinned Context

Matt Ebb matt at mke3.net
Wed Mar 31 02:55:01 CEST 2010


Revision: 27886
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=27886
Author:   broken
Date:     2010-03-31 02:55:01 +0200 (Wed, 31 Mar 2010)

Log Message:
-----------
Fix [#21832] Add Modifier, Pinned Context

Added convenience function ED_object_active_context(C) to get either the
object in the data context, or if not, the active object.

Modified Paths:
--------------
    trunk/blender/source/blender/editors/include/ED_object.h
    trunk/blender/source/blender/editors/object/object_constraint.c
    trunk/blender/source/blender/editors/object/object_edit.c
    trunk/blender/source/blender/editors/object/object_modifier.c
    trunk/blender/source/blender/editors/screen/screen_ops.c

Modified: trunk/blender/source/blender/editors/include/ED_object.h
===================================================================
--- trunk/blender/source/blender/editors/include/ED_object.h	2010-03-30 23:32:16 UTC (rev 27885)
+++ trunk/blender/source/blender/editors/include/ED_object.h	2010-03-31 00:55:01 UTC (rev 27886)
@@ -48,6 +48,9 @@
 struct wmEvent;
 
 /* object_edit.c */
+struct Object *ED_object_active_context(struct bContext *C);
+
+/* object_ops.c */
 void ED_operatortypes_object(void);
 void ED_operatormacros_object(void);
 void ED_keymap_object(struct wmKeyConfig *keyconf);

Modified: trunk/blender/source/blender/editors/object/object_constraint.c
===================================================================
--- trunk/blender/source/blender/editors/object/object_constraint.c	2010-03-30 23:32:16 UTC (rev 27885)
+++ trunk/blender/source/blender/editors/object/object_constraint.c	2010-03-31 00:55:01 UTC (rev 27886)
@@ -64,6 +64,7 @@
 #include "RNA_define.h"
 #include "RNA_enum_types.h"
 
+#include "ED_object.h"
 #include "ED_screen.h"
 
 #include "UI_interface.h"
@@ -801,7 +802,7 @@
 
 static int object_constraints_clear_exec(bContext *C, wmOperator *op)
 {
-	Object *ob= CTX_data_active_object(C);
+	Object *ob= ED_object_active_context(C);
 	Scene *scene= CTX_data_scene(C);
 	
 	/* do freeing */
@@ -835,7 +836,7 @@
 /* get the Object and/or PoseChannel to use as target */
 static short get_new_constraint_target(bContext *C, int con_type, Object **tar_ob, bPoseChannel **tar_pchan, short add)
 {
-	Object *obact= CTX_data_active_object(C);
+	Object *obact= ED_object_active_context(C);
 	bPoseChannel *pchanact= get_active_posechannel(obact);
 	short only_curve= 0, only_mesh= 0, only_ob= 0;
 	short found= 0;
@@ -1090,17 +1091,10 @@
 /* dummy operator callback */
 static int object_constraint_add_exec(bContext *C, wmOperator *op)
 {
-	ScrArea *sa= CTX_wm_area(C);
-	Object *ob;
+	Object *ob=ED_object_active_context(C);
 	int type= RNA_enum_get(op->ptr, "type");
 	short with_targets= 0;
 	
-	/* get active object from context */
-	if (sa->spacetype == SPACE_BUTS)
-		ob= CTX_data_pointer_get_type(C, "object", &RNA_Object).data;
-	else
-		ob= CTX_data_active_object(C);
-	
 	if (!ob) {
 		BKE_report(op->reports, RPT_ERROR, "No active object to add constraint to.");
 		return OPERATOR_CANCELLED;
@@ -1118,17 +1112,10 @@
 /* dummy operator callback */
 static int pose_constraint_add_exec(bContext *C, wmOperator *op)
 {
-	ScrArea *sa= CTX_wm_area(C);
-	Object *ob;
+	Object *ob= ED_object_active_context(C);
 	int type= RNA_enum_get(op->ptr, "type");
 	short with_targets= 0;
 	
-	/* get active object from context */
-	if (sa->spacetype == SPACE_BUTS)
-		ob= CTX_data_pointer_get_type(C, "object", &RNA_Object).data;
-	else
-		ob= CTX_data_active_object(C);
-	
 	if (!ob) {
 		BKE_report(op->reports, RPT_ERROR, "No active object to add constraint to.");
 		return OPERATOR_CANCELLED;

Modified: trunk/blender/source/blender/editors/object/object_edit.c
===================================================================
--- trunk/blender/source/blender/editors/object/object_edit.c	2010-03-30 23:32:16 UTC (rev 27885)
+++ trunk/blender/source/blender/editors/object/object_edit.c	2010-03-31 00:55:01 UTC (rev 27886)
@@ -120,6 +120,16 @@
 static bContext *C;
 static void error_libdata() {}
 
+
+/* find the correct active object per context */
+Object *ED_object_active_context(bContext *C)
+{
+	Object *ob= CTX_data_pointer_get_type(C, "object", &RNA_Object).data;
+	if (!ob) ob= CTX_data_active_object(C);
+	return ob;
+}
+
+
 /* ********* clear/set restrict view *********/
 static int object_restrictview_clear_exec(bContext *C, wmOperator *op)
 {

Modified: trunk/blender/source/blender/editors/object/object_modifier.c
===================================================================
--- trunk/blender/source/blender/editors/object/object_modifier.c	2010-03-30 23:32:16 UTC (rev 27885)
+++ trunk/blender/source/blender/editors/object/object_modifier.c	2010-03-31 00:55:01 UTC (rev 27886)
@@ -499,7 +499,7 @@
 static int modifier_add_exec(bContext *C, wmOperator *op)
 {
 	Scene *scene= CTX_data_scene(C);
-	Object *ob = CTX_data_active_object(C);
+	Object *ob = ED_object_active_context(C);
 	int type= RNA_enum_get(op->ptr, "type");
 
 	if(!ED_object_modifier_add(op->reports, scene, ob, NULL, type))
@@ -512,7 +512,7 @@
 
 static EnumPropertyItem *modifier_add_itemf(bContext *C, PointerRNA *ptr, int *free)
 {	
-	Object *ob= CTX_data_active_object(C);
+	Object *ob= ED_object_active_context(C);
 	EnumPropertyItem *item= NULL, *md_item;
 	ModifierTypeInfo *mti;
 	int totitem= 0, a;

Modified: trunk/blender/source/blender/editors/screen/screen_ops.c
===================================================================
--- trunk/blender/source/blender/editors/screen/screen_ops.c	2010-03-30 23:32:16 UTC (rev 27885)
+++ trunk/blender/source/blender/editors/screen/screen_ops.c	2010-03-31 00:55:01 UTC (rev 27886)
@@ -199,12 +199,12 @@
 
 int ED_operator_object_active(bContext *C)
 {
-	return NULL != CTX_data_active_object(C);
+	return NULL != ED_object_active_context(C);
 }
 
 int ED_operator_object_active_editable(bContext *C)
 {
-	Object *ob=CTX_data_active_object(C);
+	Object *ob = ED_object_active_context(C);
 	return ((ob != NULL) && !(ob->id.lib));
 }
 





More information about the Bf-blender-cvs mailing list