Commit: 764a87893888db07f508f41dff7f7766ab4b4b8e
Author: Julian Eisel
Date:   Thu Mar 10 03:58:09 2016 +0100
Branches: HMD_viewport
https://developer.blender.org/rB764a87893888db07f508f41dff7f7766ab4b4b8e

Get operator to open HMD window to work

===================================================================

M       source/blender/windowmanager/intern/wm_operators.c

===================================================================

diff --git a/source/blender/windowmanager/intern/wm_operators.c 
b/source/blender/windowmanager/intern/wm_operators.c
index ee8672f..8852857 100644
--- a/source/blender/windowmanager/intern/wm_operators.c
+++ b/source/blender/windowmanager/intern/wm_operators.c
@@ -5099,19 +5099,51 @@ static void WM_OT_stereo3d_set(wmOperatorType *ot)
 
 static int wm_md_view_open_invoke(bContext *C, wmOperator *UNUSED(op), const 
wmEvent *UNUSED(event))
 {
-       wmWindow *win_old = CTX_wm_window(C);
-       wm_window_copy_test(C, win_old);
-       return OPERATOR_FINISHED;
+       wmWindow *win = wm_window_copy_test(C, CTX_wm_window(C));
+       ScrArea *sa;
+
+       /* XXX this is assuming there's already a 3d view, we should create a 
new one instead */
+       for (sa = win->screen->areabase.first; sa; sa = sa->next) {
+               if (sa->spacetype == SPACE_VIEW3D) {
+                       break;
+               }
+       }
+
+       if (!sa) {
+               BLI_assert(0);
+               return (OPERATOR_CANCELLED | OPERATOR_PASS_THROUGH);
+       }
+       wmWindow *prevwin = CTX_wm_window(C);
+       ScrArea *prevsa = CTX_wm_area(C);
+       ARegion *prevar = CTX_wm_region(C);
+
+       CTX_wm_window_set(C, win);
+       CTX_wm_area_set(C, sa);
+       CTX_wm_region_set(C, NULL);
+       ED_screen_state_toggle(C, win, sa, SCREENFULL);
+
+       ED_area_tag_redraw(sa);
+
+       /* It is possible that new layers becomes visible. */
+       if (sa->spacetype == SPACE_VIEW3D) {
+               DAG_on_visible_update(CTX_data_main(C), false);
+       }
+
+       CTX_wm_window_set(C, prevwin);
+       CTX_wm_area_set(C, prevsa);
+       CTX_wm_region_set(C, prevar);
+
+       return OPERATOR_FINISHED;
 }
 
 static void WM_OT_hmd_view_open(wmOperatorType *ot)
 {
-       ot->name = "Open HMD View Window";
-       ot->idname = "WM_OT_hmd_view_open";
-       ot->description = "Open a separate window for display on a head mounted 
display";
+       ot->name = "Open HMD View Window";
+       ot->idname = "WM_OT_hmd_view_open";
+       ot->description = "Open a separate window for display on a head mounted 
display";
 
-       ot->invoke = wm_md_view_open_invoke;
-       ot->poll = WM_operator_winactive;
+       ot->invoke = wm_md_view_open_invoke;
+       ot->poll = WM_operator_winactive;
 }
 
 /* ******************************************************* */

_______________________________________________
Bf-blender-cvs mailing list
[email protected]
http://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to