Index: /home/theeth/bf-blender/blender/source/blender/src/header_view3d.c =================================================================== --- /home/theeth/bf-blender/blender/source/blender/src/header_view3d.c (revision 15043) +++ /home/theeth/bf-blender/blender/source/blender/src/header_view3d.c (working copy) @@ -5306,8 +5306,23 @@ allqueue(REDRAWVIEW3D, 1); break; case B_MAN_MODE: - allqueue(REDRAWVIEW3D, 1); - break; + { + int mode = V3D_MANIP_CUSTOM + BIF_countTransformOrientation(); + if (G.vd->twmode > mode) + { + mode = G.vd->twmode - mode; + if (mode == 2) + { + BIF_manageTransformOrientation(1, 1); + } + else if (mode == 1) + { + BIF_clearTransformOrientation(); + } + } + allqueue(REDRAWVIEW3D, 1); + break; + } default: Index: /home/theeth/bf-blender/blender/source/blender/src/transform_orientations.c =================================================================== --- /home/theeth/bf-blender/blender/source/blender/src/transform_orientations.c (revision 15050) +++ /home/theeth/bf-blender/blender/source/blender/src/transform_orientations.c (working copy) @@ -346,8 +346,10 @@ char * BIF_menustringTransformOrientation(char *title) { char menu[] = "%t|Global%x0|Local%x1|Normal%x2|View%x3"; + char actions[] = "|%%l|Clear All%%x%d|Add New%%x%d"; ListBase *transform_spaces = &G.scene->transform_spaces; TransformOrientation *ts; + /*int has_CTO = transform_spaces->first != NULL;*/ int i = V3D_MANIP_CUSTOM; char *str_menu, *p; @@ -352,7 +354,7 @@ char *str_menu, *p; - str_menu = MEM_callocN(strlen(menu) + strlen(title) + 40 * BIF_countTransformOrientation(), "UserTransSpace from matrix"); + str_menu = MEM_callocN(strlen(menu) + strlen(title) + strlen(actions) + 40 * BIF_countTransformOrientation(), "UserTransSpace from matrix"); p = str_menu; p += sprintf(str_menu, "%s", title); @@ -357,6 +359,13 @@ p += sprintf(str_menu, "%s", title); p += sprintf(p, "%s", menu); + +/* Separator is too big, so no need for another one + if (has_CTO) + { + p += sprintf(p, "|%%l"); + } +*/ for (ts = transform_spaces->first; ts; ts = ts->next) { p += sprintf(p, "|%s%%x%d", ts->name, i++); @@ -362,6 +371,8 @@ p += sprintf(p, "|%s%%x%d", ts->name, i++); } + p += sprintf(p, actions, i + 1, i + 2); + return str_menu; }