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:
authorTon Roosendaal <ton@blender.org>2011-02-16 21:04:03 +0300
committerTon Roosendaal <ton@blender.org>2011-02-16 21:04:03 +0300
commit9d168f733719c3abeba245a92cb37530db2a98f4 (patch)
tree80c84aba556fa6b9ad030acdfd992e30a2215c16 /source/blender/editors/space_view3d
parentaed7eaf0d9171c4bfa7814e141afad773cb31441 (diff)
Bugfix #26096
Switching layers reveiled hidden objects in wrong positions, changes are currently not being handled for hidden objects. Only way to fix it is by completely update newly visible objects... (Also fixed a typo and a compile warning)
Diffstat (limited to 'source/blender/editors/space_view3d')
-rw-r--r--source/blender/editors/space_view3d/view3d_header.c13
1 files changed, 10 insertions, 3 deletions
diff --git a/source/blender/editors/space_view3d/view3d_header.c b/source/blender/editors/space_view3d/view3d_header.c
index 2ee4f7a9e55..2656127d73c 100644
--- a/source/blender/editors/space_view3d/view3d_header.c
+++ b/source/blender/editors/space_view3d/view3d_header.c
@@ -139,10 +139,11 @@ static void handle_view3d_lock(bContext *C)
static int view3d_layers_exec(bContext *C, wmOperator *op)
{
- Main *bmain= CTX_data_main(C);
Scene *scene= CTX_data_scene(C);
ScrArea *sa= CTX_wm_area(C);
View3D *v3d= sa->spacedata.first;
+ Base *base;
+ int oldlay= v3d->lay;
int nr= RNA_int_get(op->ptr, "nr");
int toggle= RNA_boolean_get(op->ptr, "toggle");
@@ -200,8 +201,14 @@ static int view3d_layers_exec(bContext *C, wmOperator *op)
if(v3d->scenelock) handle_view3d_lock(C);
- /* new layers might need unflushed events events */
- DAG_scene_update_flags(bmain, scene, v3d->lay, FALSE); /* tags all that moves and flushes */
+ /* XXX new layers might need updates, there is no provision yet to detect if that's needed */
+ oldlay= ~oldlay & v3d->lay;
+ for (base= scene->base.first; base; base= base->next) {
+ if(base->lay & oldlay)
+ base->object->recalc= OB_RECALC_OB|OB_RECALC_DATA;
+ if(base->lay & oldlay)
+ printf("recalc %s\n", base->object->id.name+2);
+ }
ED_area_tag_redraw(sa);