diff options
author | Campbell Barton <ideasman42@gmail.com> | 2014-04-25 21:18:18 +0400 |
---|---|---|
committer | Campbell Barton <ideasman42@gmail.com> | 2014-04-25 21:18:18 +0400 |
commit | d0533b6c07f525b103bed1003c5a89b0c83fe241 (patch) | |
tree | af8c09e983cb32e323bd963ba24abebef8384c80 /source/blender | |
parent | a66ae2b4ae433636b6d5fdd0aaf126b595b5faba (diff) |
Fix T39896: lock view rotation, behavior not consistent
Diffstat (limited to 'source/blender')
-rw-r--r-- | source/blender/editors/screen/screen_ops.c | 19 |
1 files changed, 16 insertions, 3 deletions
diff --git a/source/blender/editors/screen/screen_ops.c b/source/blender/editors/screen/screen_ops.c index 91d99e32559..666ba003948 100644 --- a/source/blender/editors/screen/screen_ops.c +++ b/source/blender/editors/screen/screen_ops.c @@ -2869,9 +2869,11 @@ static int region_quadview_exec(bContext *C, wmOperator *op) ARegion *ar = CTX_wm_region(C); /* some rules... */ - if (ar->regiontype != RGN_TYPE_WINDOW) + if (ar->regiontype != RGN_TYPE_WINDOW) { BKE_report(op->reports, RPT_ERROR, "Only window region can be 4-splitted"); + } else if (ar->alignment == RGN_ALIGN_QSPLIT) { + /* Exit quad-view */ ScrArea *sa = CTX_wm_area(C); ARegion *arn; @@ -2879,10 +2881,19 @@ static int region_quadview_exec(bContext *C, wmOperator *op) ar->alignment = 0; if (sa->spacetype == SPACE_VIEW3D) { + ARegion *ar_iter; RegionView3D *rv3d = ar->regiondata; - rv3d->viewlock_quad = rv3d->viewlock | RV3D_VIEWLOCK_INIT; + rv3d->viewlock_quad = RV3D_VIEWLOCK_INIT; rv3d->viewlock = 0; rv3d->rflag &= ~RV3D_CLIPPING; + + /* accumulate locks, incase they're mixed */ + for (ar_iter = sa->regionbase.first; ar_iter; ar_iter = ar_iter->next) { + if (ar_iter->regiontype == RGN_TYPE_WINDOW) { + RegionView3D *rv3d_iter = ar_iter->regiondata; + rv3d->viewlock_quad |= rv3d_iter->viewlock; + } + } } for (ar = sa->regionbase.first; ar; ar = arn) { @@ -2897,9 +2908,11 @@ static int region_quadview_exec(bContext *C, wmOperator *op) ED_area_tag_redraw(sa); WM_event_add_notifier(C, NC_SCREEN | NA_EDITED, NULL); } - else if (ar->next) + else if (ar->next) { BKE_report(op->reports, RPT_ERROR, "Only last region can be 4-splitted"); + } else { + /* Enter quad-view */ ScrArea *sa = CTX_wm_area(C); ARegion *newar; int count; |