diff --git a/interface/src/Application.cpp b/interface/src/Application.cpp index 280f2c5d1f..9f43afc476 100644 --- a/interface/src/Application.cpp +++ b/interface/src/Application.cpp @@ -2152,10 +2152,32 @@ void Application::keyPressEvent(QKeyEvent* event) { if (isShifted) { Menu::getInstance()->triggerOption(MenuOption::MiniMirror); } else { + // whenever switching to/from full screen mirror from the keyboard, remember + // the state you were in before full screen mirror, and return to that. + auto previousMode = _myCamera.getMode(); + if (previousMode != CAMERA_MODE_MIRROR) { + switch (previousMode) { + case CAMERA_MODE_FIRST_PERSON: + _returnFromFullScreenMirrorTo = MenuOption::FirstPerson; + break; + case CAMERA_MODE_THIRD_PERSON: + _returnFromFullScreenMirrorTo = MenuOption::ThirdPerson; + break; + + // FIXME - it's not clear that these modes make sense to return to... + case CAMERA_MODE_INDEPENDENT: + _returnFromFullScreenMirrorTo = MenuOption::IndependentMode; + break; + case CAMERA_MODE_ENTITY: + _returnFromFullScreenMirrorTo = MenuOption::CameraEntityMode; + break; + } + } + bool isMirrorChecked = Menu::getInstance()->isOptionChecked(MenuOption::FullscreenMirror); Menu::getInstance()->setIsOptionChecked(MenuOption::FullscreenMirror, !isMirrorChecked); if (isMirrorChecked) { - Menu::getInstance()->setIsOptionChecked(MenuOption::ThirdPerson, true); + Menu::getInstance()->setIsOptionChecked(_returnFromFullScreenMirrorTo, true); } cameraMenuChanged(); } diff --git a/interface/src/Application.h b/interface/src/Application.h index 116d2b2137..5998cb00b2 100644 --- a/interface/src/Application.h +++ b/interface/src/Application.h @@ -522,6 +522,8 @@ private: bool _keyboardDeviceHasFocus { true }; bool _recentlyClearedDomain { false }; + + QString _returnFromFullScreenMirrorTo; }; #endif // hifi_Application_h