[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [35902] trunk/blender/source/blender/ editors/space_view3d/view3d_header.c: fix [#26685] Cannot exit from " edit mode"

Campbell Barton ideasman42 at gmail.com
Wed Mar 30 17:28:38 CEST 2011


Revision: 35902
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=35902
Author:   campbellbarton
Date:     2011-03-30 15:28:38 +0000 (Wed, 30 Mar 2011)
Log Message:
-----------
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.

Modified Paths:
--------------
    trunk/blender/source/blender/editors/space_view3d/view3d_header.c

Modified: trunk/blender/source/blender/editors/space_view3d/view3d_header.c
===================================================================
--- trunk/blender/source/blender/editors/space_view3d/view3d_header.c	2011-03-30 15:02:02 UTC (rev 35901)
+++ trunk/blender/source/blender/editors/space_view3d/view3d_header.c	2011-03-30 15:28:38 UTC (rev 35902)
@@ -147,6 +147,21 @@
 - 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 @@
 		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 @@
 				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;




More information about the Bf-blender-cvs mailing list