Commit: 5ff399d69a65217ea73e5a0f15cdfa371c36a56f
Author: Julian Eisel
Date:   Fri Mar 11 18:10:18 2016 +0100
Branches: HMD_viewport
https://developer.blender.org/rB5ff399d69a65217ea73e5a0f15cdfa371c36a56f

Let button to open HMD window close the win if it's already opened

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

M       release/scripts/startup/bl_ui/properties_render_layer.py
M       source/blender/editors/space_view3d/view3d_edit.c
M       source/blender/makesrna/intern/rna_wm.c
M       source/blender/windowmanager/intern/wm_operators.c

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

diff --git a/release/scripts/startup/bl_ui/properties_render_layer.py 
b/release/scripts/startup/bl_ui/properties_render_layer.py
index d51a5d7..2ac0913 100644
--- a/release/scripts/startup/bl_ui/properties_render_layer.py
+++ b/release/scripts/startup/bl_ui/properties_render_layer.py
@@ -225,14 +225,17 @@ class RENDERLAYER_PT_views(RenderLayerButtonsPanel, 
Panel):
             row.label(text="Camera Suffix:")
             row.prop(rv, "camera_suffix", text="")
         else:
+            wm = context.window_manager
+
             running = scene.hmd_running
+            text_win = "Close HMD Window" if wm.has_hmd_window else "Open HMD 
Window"
             text_run = "Stop Session" if running else "Start Session"
             icon = 'PAUSE' if running else 'PLAY'
 
             col = layout.column()
 
             row = col.row(align=True)
-            row.operator("wm.hmd_view_open", text="Open HMD Window")
+            row.operator("wm.hmd_view_open", text=text_win)
             row.operator("view3d.hmd_session_run", text=text_run, icon=icon)
 
             col.prop(rd, "hmd_camlock")
diff --git a/source/blender/editors/space_view3d/view3d_edit.c 
b/source/blender/editors/space_view3d/view3d_edit.c
index 5c1fc5f..f21d8d7 100644
--- a/source/blender/editors/space_view3d/view3d_edit.c
+++ b/source/blender/editors/space_view3d/view3d_edit.c
@@ -4810,6 +4810,10 @@ static void hmd_session_refresh(bContext *C, wmWindow 
*hmd_win, Scene *scene, HM
 {
        if (scene->r.scemode & R_HMD_IGNORE_ROT)
                return;
+       if (!hmd_win) {
+               scene->flag &= ~SCE_HMD_RUNNING;
+               return;
+       }
 
        View3D *v3d = CTX_wm_view3d(C);
        Object *camera_ob = v3d ? v3d->camera : scene->camera;
diff --git a/source/blender/makesrna/intern/rna_wm.c 
b/source/blender/makesrna/intern/rna_wm.c
index 51c410e..d5cda2c 100644
--- a/source/blender/makesrna/intern/rna_wm.c
+++ b/source/blender/makesrna/intern/rna_wm.c
@@ -934,6 +934,12 @@ static void rna_wmClipboard_set(PointerRNA *UNUSED(ptr), 
const char *value)
        WM_clipboard_text_set((void *) value, false);
 }
 
+static int rna_has_hmd_window_get(PointerRNA *ptr)
+{
+       wmWindowManager *wm = ptr->data;
+       return (wm->win_hmd != NULL);
+}
+
 #ifdef WITH_PYTHON
 static void rna_Operator_unregister(struct Main *bmain, StructRNA *type)
 {
@@ -1974,6 +1980,10 @@ static void rna_def_windowmanager(BlenderRNA *brna)
        RNA_def_property_string_funcs(prop, "rna_wmClipboard_get", 
"rna_wmClipboard_length", "rna_wmClipboard_set");
        RNA_def_property_ui_text(prop, "Text Clipboard", "");
 
+       prop = RNA_def_property(srna, "has_hmd_window", PROP_BOOLEAN, 
PROP_NONE);
+       RNA_def_property_clear_flag(prop, PROP_EDITABLE);
+       RNA_def_property_boolean_funcs(prop, "rna_has_hmd_window_get", NULL);
+
        RNA_api_wm(srna);
 }
 
diff --git a/source/blender/windowmanager/intern/wm_operators.c 
b/source/blender/windowmanager/intern/wm_operators.c
index b8fe153..8ab02d4 100644
--- a/source/blender/windowmanager/intern/wm_operators.c
+++ b/source/blender/windowmanager/intern/wm_operators.c
@@ -5097,51 +5097,57 @@ static void WM_OT_stereo3d_set(wmOperatorType *ot)
        RNA_def_property_flag(prop, PROP_SKIP_SAVE);
 }
 
-static int wm_hmd_view_open_poll(bContext *C)
-{
-       return (CTX_wm_manager(C)->win_hmd == NULL);
-}
-
 static int wm_hmd_view_open_invoke(bContext *C, wmOperator *UNUSED(op), const 
wmEvent *UNUSED(event))
 {
        wmWindowManager *wm = CTX_wm_manager(C);
-       wmWindow *win = wm_window_copy_test(C, CTX_wm_window(C));
-       ScrArea *sa;
+       wmWindow *win;
 
-       /* 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;
-               }
+       /* close */
+       if ((win = wm->win_hmd)) {
+               wm_window_close(C, wm, win);
+               wm->win_hmd = NULL;
        }
+       /* open */
+       else {
+               ScrArea *sa;
 
-       if (!sa) {
-               BLI_assert(0);
-               return (OPERATOR_CANCELLED | OPERATOR_PASS_THROUGH);
-       }
+               win = wm_window_copy_test(C, CTX_wm_window(C));
+
+               /* 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;
+                       }
+               }
 
-       wm->win_hmd = win;
-       wm_window_title(wm, win, "Blender HMD View");
+               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);
+               wm->win_hmd = win;
+               wm_window_title(wm, win, "Blender HMD View");
 
-       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);
+               wmWindow *prevwin = CTX_wm_window(C);
+               ScrArea *prevsa = CTX_wm_area(C);
+               ARegion *prevar = CTX_wm_region(C);
 
-       ED_area_tag_redraw(sa);
+               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);
 
-       /* It is possible that new layers becomes visible. */
-       if (sa->spacetype == SPACE_VIEW3D) {
-               DAG_on_visible_update(CTX_data_main(C), false);
-       }
+               ED_area_tag_redraw(sa);
 
-       CTX_wm_window_set(C, prevwin);
-       CTX_wm_area_set(C, prevsa);
-       CTX_wm_region_set(C, prevar);
+               /* 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;
 }
@@ -5153,7 +5159,6 @@ static void WM_OT_hmd_view_open(wmOperatorType *ot)
        ot->description = "Open a separate window for a head mounted display";
 
        ot->invoke = wm_hmd_view_open_invoke;
-       ot->poll = wm_hmd_view_open_poll;
 }
 
 /* ******************************************************* */

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

Reply via email to