[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [18753] branches/blender2.5/blender/source /blender: 2.5: Fix for windows editmode tab crashes.

Brecht Van Lommel brecht at blender.org
Fri Jan 30 17:45:25 CET 2009


Revision: 18753
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=18753
Author:   blendix
Date:     2009-01-30 17:45:25 +0100 (Fri, 30 Jan 2009)

Log Message:
-----------
2.5: Fix for windows editmode tab crashes. This was due to
use of function pointers in the context callbacks. Apparently
MSVC decides that some of these functions are the same and
makes them into a single function with the same address. I
couldn't figure out if this was a compiler bug or according
to the C spec. Regardless, that means this method can't be
used, so now it uses separate CTX_DATA_DEFINES.

Modified Paths:
--------------
    branches/blender2.5/blender/source/blender/blenkernel/BKE_context.h
    branches/blender2.5/blender/source/blender/blenkernel/BKE_screen.h
    branches/blender2.5/blender/source/blender/blenkernel/intern/context.c
    branches/blender2.5/blender/source/blender/editors/screen/screen_context.c
    branches/blender2.5/blender/source/blender/editors/screen/screen_intern.h
    branches/blender2.5/blender/source/blender/editors/space_image/space_image.c
    branches/blender2.5/blender/source/blender/editors/space_node/space_node.c
    branches/blender2.5/blender/source/blender/editors/space_view3d/space_view3d.c
    branches/blender2.5/blender/source/blender/editors/space_view3d/view3d_ops.c

Modified: branches/blender2.5/blender/source/blender/blenkernel/BKE_context.h
===================================================================
--- branches/blender2.5/blender/source/blender/blenkernel/BKE_context.h	2009-01-30 15:48:38 UTC (rev 18752)
+++ branches/blender2.5/blender/source/blender/blenkernel/BKE_context.h	2009-01-30 16:45:25 UTC (rev 18753)
@@ -59,13 +59,35 @@
 struct bContext;
 typedef struct bContext bContext;
 
-typedef void bContextDataMember;
-
 struct bContextDataResult;
 typedef struct bContextDataResult bContextDataResult;
 
+enum {
+	CTX_DATA_MAIN,
+	CTX_DATA_SCENE,
+	CTX_DATA_TOOL_SETTINGS,
+
+	CTX_DATA_SELECTED_OBJECTS,
+	CTX_DATA_SELECTED_BASES,
+	CTX_DATA_SELECTED_EDITABLE_OBJECTS,
+	CTX_DATA_SELECTED_EDITABLE_BASES,
+	CTX_DATA_VISIBLE_OBJECTS,
+	CTX_DATA_VISIBLE_BASES,
+
+	CTX_DATA_ACTIVE_OBJECT,
+	CTX_DATA_ACTIVE_BASE,
+	CTX_DATA_EDIT_OBJECT,
+
+	CTX_DATA_EDIT_IMAGE,
+	CTX_DATA_EDIT_IMAGE_BUFFER,
+
+	CTX_DATA_SELECTED_NODES
+};
+
+typedef int bContextDataMember;
+
 typedef int (*bContextDataCallback)(const bContext *C,
-	const bContextDataMember *member, bContextDataResult *result);
+	bContextDataMember member, bContextDataResult *result);
 
 /* Context */
 

Modified: branches/blender2.5/blender/source/blender/blenkernel/BKE_screen.h
===================================================================
--- branches/blender2.5/blender/source/blender/blenkernel/BKE_screen.h	2009-01-30 15:48:38 UTC (rev 18752)
+++ branches/blender2.5/blender/source/blender/blenkernel/BKE_screen.h	2009-01-30 16:45:25 UTC (rev 18753)
@@ -77,7 +77,7 @@
 	void		(*keymap)(struct wmWindowManager *);
 
 	/* return context data */
-	int			(*context)(const struct bContext *, const void *, struct bContextDataResult *);
+	int			(*context)(const struct bContext *, int, struct bContextDataResult *);
 
 	/* region type definitions */
 	ListBase	regiontypes;
@@ -117,7 +117,7 @@
 	void		(*cursor)(struct wmWindow *, struct ScrArea *, struct ARegion *ar);
 
 	/* return context data */
-	int			(*context)(const struct bContext *, const void *, struct bContextDataResult *);
+	int			(*context)(const struct bContext *, int, struct bContextDataResult *);
 
 	/* custom drawing callbacks */
 	ListBase	drawcalls;

Modified: branches/blender2.5/blender/source/blender/blenkernel/intern/context.c
===================================================================
--- branches/blender2.5/blender/source/blender/blenkernel/intern/context.c	2009-01-30 15:48:38 UTC (rev 18752)
+++ branches/blender2.5/blender/source/blender/blenkernel/intern/context.c	2009-01-30 16:45:25 UTC (rev 18753)
@@ -239,18 +239,12 @@
 
 /* data context utility functions */
 
-struct bContextDataMember {
-	StructRNA *rna;
-	const char *name;
-	int collection;
-};
-
 struct bContextDataResult {
 	void *pointer;
 	ListBase list;
 };
 
-static int ctx_data_get(bContext *C, const bContextDataMember *member, bContextDataResult *result)
+static int ctx_data_get(bContext *C, bContextDataMember member, bContextDataResult *result)
 {
 	int done= 0, recursion= C->data.recursion;
 
@@ -284,7 +278,7 @@
 	return done;
 }
 
-static void *ctx_data_pointer_get(const bContext *C, const bContextDataMember *member)
+static void *ctx_data_pointer_get(const bContext *C, bContextDataMember member)
 {
 	bContextDataResult result;
 
@@ -294,7 +288,7 @@
 	return NULL;
 }
 
-static int ctx_data_pointer_verify(const bContext *C, const bContextDataMember *member, void **pointer)
+static int ctx_data_pointer_verify(const bContext *C, bContextDataMember member, void **pointer)
 {
 	bContextDataResult result;
 
@@ -308,7 +302,7 @@
 	}
 }
 
-static int ctx_data_collection_get(const bContext *C, const bContextDataMember *member, ListBase *list)
+static int ctx_data_collection_get(const bContext *C, bContextDataMember member, ListBase *list)
 {
 	bContextDataResult result;
 
@@ -351,7 +345,7 @@
 {
 	Main *bmain;
 
-	if(ctx_data_pointer_verify(C, CTX_data_main, (void*)&bmain))
+	if(ctx_data_pointer_verify(C, CTX_DATA_MAIN, (void*)&bmain))
 		return bmain;
 	else
 		return C->data.main;
@@ -366,7 +360,7 @@
 {
 	Scene *scene;
 
-	if(ctx_data_pointer_verify(C, CTX_data_scene, (void*)&scene))
+	if(ctx_data_pointer_verify(C, CTX_DATA_SCENE, (void*)&scene))
 		return scene;
 	else
 		return C->data.scene;
@@ -389,62 +383,62 @@
 
 int CTX_data_selected_nodes(const bContext *C, ListBase *list)
 {
-	return ctx_data_collection_get(C, CTX_data_selected_nodes, list);
+	return ctx_data_collection_get(C, CTX_DATA_SELECTED_NODES, list);
 }
 
 int CTX_data_selected_editable_objects(const bContext *C, ListBase *list)
 {
-	return ctx_data_collection_get(C, CTX_data_selected_editable_objects, list);
+	return ctx_data_collection_get(C, CTX_DATA_SELECTED_EDITABLE_OBJECTS, list);
 }
 
 int CTX_data_selected_editable_bases(const bContext *C, ListBase *list)
 {
-	return ctx_data_collection_get(C, CTX_data_selected_editable_bases, list);
+	return ctx_data_collection_get(C, CTX_DATA_SELECTED_EDITABLE_BASES, list);
 }
 
 int CTX_data_selected_objects(const bContext *C, ListBase *list)
 {
-	return ctx_data_collection_get(C, CTX_data_selected_objects, list);
+	return ctx_data_collection_get(C, CTX_DATA_SELECTED_OBJECTS, list);
 }
 
 int CTX_data_selected_bases(const bContext *C, ListBase *list)
 {
-	return ctx_data_collection_get(C, CTX_data_selected_bases, list);
+	return ctx_data_collection_get(C, CTX_DATA_SELECTED_BASES, list);
 }
 
 int CTX_data_visible_objects(const bContext *C, ListBase *list)
 {
-	return ctx_data_collection_get(C, CTX_data_visible_objects, list);
+	return ctx_data_collection_get(C, CTX_DATA_VISIBLE_OBJECTS, list);
 }
 
 int CTX_data_visible_bases(const bContext *C, ListBase *list)
 {
-	return ctx_data_collection_get(C, CTX_data_visible_bases, list);
+	return ctx_data_collection_get(C, CTX_DATA_VISIBLE_BASES, list);
 }
 
 struct Object *CTX_data_active_object(const bContext *C)
 {
-	return ctx_data_pointer_get(C, CTX_data_active_object);
+	return ctx_data_pointer_get(C, CTX_DATA_ACTIVE_OBJECT);
 }
 
 struct Base *CTX_data_active_base(const bContext *C)
 {
-	return ctx_data_pointer_get(C, CTX_data_active_base);
+	return ctx_data_pointer_get(C, CTX_DATA_ACTIVE_BASE);
 }
 
 struct Object *CTX_data_edit_object(const bContext *C)
 {
-	return ctx_data_pointer_get(C, CTX_data_edit_object);
+	return ctx_data_pointer_get(C, CTX_DATA_EDIT_OBJECT);
 }
 
 struct Image *CTX_data_edit_image(const bContext *C)
 {
-	return ctx_data_pointer_get(C, CTX_data_edit_image);
+	return ctx_data_pointer_get(C, CTX_DATA_EDIT_IMAGE);
 }
 
 struct ImBuf *CTX_data_edit_image_buffer(const bContext *C)
 {
-	return ctx_data_pointer_get(C, CTX_data_edit_image_buffer);
+	return ctx_data_pointer_get(C, CTX_DATA_EDIT_IMAGE_BUFFER);
 }
 
 /* data evaluation */

Modified: branches/blender2.5/blender/source/blender/editors/screen/screen_context.c
===================================================================
--- branches/blender2.5/blender/source/blender/editors/screen/screen_context.c	2009-01-30 15:48:38 UTC (rev 18752)
+++ branches/blender2.5/blender/source/blender/editors/screen/screen_context.c	2009-01-30 16:45:25 UTC (rev 18753)
@@ -33,20 +33,20 @@
 #include "BKE_context.h"
 #include "BKE_utildefines.h"
 
-int ed_screen_context(const bContext *C, const bContextDataMember *member, bContextDataResult *result)
+int ed_screen_context(const bContext *C, bContextDataMember member, bContextDataResult *result)
 {
 	bScreen *sc= CTX_wm_screen(C);
 	Scene *scene= sc->scene;
 	Base *base;
 
-	if(member == CTX_data_scene) {
+	if(member == CTX_DATA_SCENE) {
 		CTX_data_pointer_set(result, scene);
 		return 1;
 	}
-	else if(ELEM(member, CTX_data_selected_objects, &CTX_data_selected_bases)) {
+	else if(ELEM(member, CTX_DATA_SELECTED_OBJECTS, CTX_DATA_SELECTED_BASES)) {
 		for(base=scene->base.first; base; base=base->next) {
 			if((base->flag & SELECT) && (base->lay & scene->lay)) {
-				if(member == CTX_data_selected_objects)
+				if(member == CTX_DATA_SELECTED_OBJECTS)
 					CTX_data_list_add(result, base->object);
 				else
 					CTX_data_list_add(result, base);
@@ -55,19 +55,19 @@
 
 		return 1;
 	}
-	else if(member == CTX_data_active_base) {
+	else if(member == CTX_DATA_ACTIVE_BASE) {
 		if(scene->basact)
 			CTX_data_pointer_set(result, scene->basact);
 
 		return 1;
 	}
-	else if(member == CTX_data_active_object) {
+	else if(member == CTX_DATA_ACTIVE_OBJECT) {
 		if(scene->basact)
 			CTX_data_pointer_set(result, scene->basact->object);
 
 		return 1;
 	}
-	else if(member == CTX_data_edit_object) {
+	else if(member == CTX_DATA_EDIT_OBJECT) {
 		/* convenience for now, 1 object per scene in editmode */
 		if(scene->obedit)
 			CTX_data_pointer_set(result, scene->obedit);

Modified: branches/blender2.5/blender/source/blender/editors/screen/screen_intern.h
===================================================================
--- branches/blender2.5/blender/source/blender/editors/screen/screen_intern.h	2009-01-30 15:48:38 UTC (rev 18752)
+++ branches/blender2.5/blender/source/blender/editors/screen/screen_intern.h	2009-01-30 16:45:25 UTC (rev 18753)
@@ -56,7 +56,7 @@
 void		ed_screen_fullarea(bContext *C);
 
 /* screen_context.c */
-void ed_screen_context(const bContext *C, const bContextDataMember *member, bContextDataResult *result);
+void ed_screen_context(const bContext *C, bContextDataMember member, bContextDataResult *result);
 
 #endif /* ED_SCREEN_INTERN_H */
 

Modified: branches/blender2.5/blender/source/blender/editors/space_image/space_image.c
===================================================================
--- branches/blender2.5/blender/source/blender/editors/space_image/space_image.c	2009-01-30 15:48:38 UTC (rev 18752)
+++ branches/blender2.5/blender/source/blender/editors/space_image/space_image.c	2009-01-30 16:45:25 UTC (rev 18753)
@@ -230,15 +230,15 @@
 	}
 }
 
-static int image_context(const bContext *C, const bContextDataMember *member, bContextDataResult *result)
+static int image_context(const bContext *C, bContextDataMember member, bContextDataResult *result)
 {
 	SpaceImage *sima= (SpaceImage*)CTX_wm_space_data(C);
 
-	if(member == CTX_data_edit_image) {
+	if(member == CTX_DATA_EDIT_IMAGE) {
 		CTX_data_pointer_set(result, get_space_image(sima));
 		return 1;
 	}
-	else if(member == CTX_data_edit_image_buffer) {
+	else if(member == CTX_DATA_EDIT_IMAGE_BUFFER) {
 		CTX_data_pointer_set(result, get_space_image_buffer(sima));
 		return 1;
 	}

Modified: branches/blender2.5/blender/source/blender/editors/space_node/space_node.c

@@ Diff output truncated at 10240 characters. @@




More information about the Bf-blender-cvs mailing list