diff options
Diffstat (limited to 'source/blender/editors/space_view3d/view3d_header.c')
-rw-r--r-- | source/blender/editors/space_view3d/view3d_header.c | 35 |
1 files changed, 22 insertions, 13 deletions
diff --git a/source/blender/editors/space_view3d/view3d_header.c b/source/blender/editors/space_view3d/view3d_header.c index 3b6b7257c9c..246ed853cc8 100644 --- a/source/blender/editors/space_view3d/view3d_header.c +++ b/source/blender/editors/space_view3d/view3d_header.c @@ -147,6 +147,21 @@ static void handle_view3d_lock(bContext *C) - uiTemplateLayers in interface/ code for buttons - ED_view3d_scene_layer_set for RNA */ +static void view3d_layers_editmode_ensure(Scene *scene, View3D *v3d) +{ + /* sanity check - when in editmode disallow switching the editmode layer off since its confusing + * an alternative would be to always draw the editmode object. */ + if(scene->obedit && (scene->obedit->lay & v3d->lay)==0) { + int bit; + for(bit=0; bit<32; bit++) { + if(scene->obedit->lay & (1<<bit)) { + v3d->lay |= 1<<bit; + break; + } + } + } +} + static int view3d_layers_exec(bContext *C, wmOperator *op) { Scene *scene= CTX_data_scene(C); @@ -166,7 +181,10 @@ static int view3d_layers_exec(bContext *C, wmOperator *op) if (toggle && v3d->lay == ((1<<20)-1)) { /* return to active layer only */ v3d->lay = v3d->layact; - } else { + + view3d_layers_editmode_ensure(scene, v3d); + } + else { v3d->lay |= (1<<20)-1; } } @@ -181,19 +199,10 @@ static int view3d_layers_exec(bContext *C, wmOperator *op) v3d->lay |= (1<<nr); } else { v3d->lay = (1<<nr); - - /* sanity check - when in editmode disallow switching the editmode layer off since its confusing - * an alternative would be to always draw the editmode object. */ - if(scene->obedit && (scene->obedit->lay & v3d->lay)==0) { - for(bit=0; bit<32; bit++) { - if(scene->obedit->lay & (1<<bit)) { - v3d->lay |= 1<<bit; - break; - } - } - } } - + + view3d_layers_editmode_ensure(scene, v3d); + /* set active layer, ensure to always have one */ if(v3d->lay & (1<<nr)) v3d->layact= 1<<nr; |