From 4f29bc25948d7f412ccf7c3944bd3550d87bc9a5 Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Wed, 30 Mar 2011 15:28:38 +0000 Subject: [PATCH] fix [#26685] Cannot exit from "edit mode" this does not fix the underlying problem that once in this state you cant exit editmode, only that the layer key bindings dont let the state come about. Looked into fixing properly but its not so simple since currently object mode operators all use "active_object" which is supposed not to be set when in a hidden layer. --- .../editors/space_view3d/view3d_header.c | 35 ++++++++++++------- 1 file 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<lay |= 1<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<lay = (1<obedit && (scene->obedit->lay & v3d->lay)==0) { - for(bit=0; bit<32; bit++) { - if(scene->obedit->lay & (1<lay |= 1<lay & (1<layact= 1<