diff --git a/Source/Android/jni/MainAndroid.cpp b/Source/Android/jni/MainAndroid.cpp index 350b78b361..b2f6ca467f 100644 --- a/Source/Android/jni/MainAndroid.cpp +++ b/Source/Android/jni/MainAndroid.cpp @@ -125,7 +125,7 @@ void Host_SetStartupDebuggingParameters() { } -bool Host_UIHasFocus() +bool Host_UINeedsControllerState() { return true; } diff --git a/Source/Core/Core/Host.h b/Source/Core/Core/Host.h index dc63e762ec..3fa68c9df9 100644 --- a/Source/Core/Core/Host.h +++ b/Source/Core/Core/Host.h @@ -23,7 +23,7 @@ // The host can be just a command line app that opens a window, or a full blown debugger // interface. -bool Host_UIHasFocus(); +bool Host_UINeedsControllerState(); bool Host_RendererHasFocus(); bool Host_RendererIsFullscreen(); void Host_ConnectWiimote(int wm_idx, bool connect); diff --git a/Source/Core/DolphinNoGUI/MainNoGUI.cpp b/Source/Core/DolphinNoGUI/MainNoGUI.cpp index 56671c72a1..b62cf0e22c 100644 --- a/Source/Core/DolphinNoGUI/MainNoGUI.cpp +++ b/Source/Core/DolphinNoGUI/MainNoGUI.cpp @@ -116,7 +116,7 @@ void Host_RequestRenderWindowSize(int width, int height) { } -bool Host_UIHasFocus() +bool Host_UINeedsControllerState() { return false; } diff --git a/Source/Core/DolphinQt2/Host.cpp b/Source/Core/DolphinQt2/Host.cpp index fdd3b5aecd..79a48d3e5d 100644 --- a/Source/Core/DolphinQt2/Host.cpp +++ b/Source/Core/DolphinQt2/Host.cpp @@ -103,7 +103,7 @@ void Host_UpdateMainFrame() void Host_RequestRenderWindowSize(int w, int h) { } -bool Host_UIHasFocus() +bool Host_UINeedsControllerState() { return false; } diff --git a/Source/Core/DolphinWX/CMakeLists.txt b/Source/Core/DolphinWX/CMakeLists.txt index 843ef69258..505d11268f 100644 --- a/Source/Core/DolphinWX/CMakeLists.txt +++ b/Source/Core/DolphinWX/CMakeLists.txt @@ -78,6 +78,7 @@ set(SRCS PostProcessingConfigDiag.cpp SoftwareVideoConfigDialog.cpp TASInputDlg.cpp + UINeedsControllerState.cpp VideoConfigDiag.cpp WxEventUtils.cpp WxUtils.cpp diff --git a/Source/Core/DolphinWX/DolphinWX.vcxproj b/Source/Core/DolphinWX/DolphinWX.vcxproj index c8ff9f30dd..1904e297ff 100644 --- a/Source/Core/DolphinWX/DolphinWX.vcxproj +++ b/Source/Core/DolphinWX/DolphinWX.vcxproj @@ -125,6 +125,7 @@ + @@ -203,6 +204,7 @@ + diff --git a/Source/Core/DolphinWX/DolphinWX.vcxproj.filters b/Source/Core/DolphinWX/DolphinWX.vcxproj.filters index aaedfc7269..5555786156 100644 --- a/Source/Core/DolphinWX/DolphinWX.vcxproj.filters +++ b/Source/Core/DolphinWX/DolphinWX.vcxproj.filters @@ -196,6 +196,9 @@ GUI + + GUI + GUI\Video @@ -420,6 +423,9 @@ GUI + + GUI + GUI\Video diff --git a/Source/Core/DolphinWX/Input/InputConfigDiag.cpp b/Source/Core/DolphinWX/Input/InputConfigDiag.cpp index b0e5c96371..15c213ac94 100644 --- a/Source/Core/DolphinWX/Input/InputConfigDiag.cpp +++ b/Source/Core/DolphinWX/Input/InputConfigDiag.cpp @@ -55,6 +55,7 @@ #include "DolphinWX/Input/GuitarInputConfigDiag.h" #include "DolphinWX/Input/NunchukInputConfigDiag.h" #include "DolphinWX/Input/TurntableInputConfigDiag.h" +#include "DolphinWX/UINeedsControllerState.h" #include "DolphinWX/WxUtils.h" #include "InputCommon/ControlReference/ControlReference.h" @@ -1259,6 +1260,7 @@ InputConfigDialog::InputConfigDialog(wxWindow* const parent, InputConfig& config { Bind(wxEVT_CLOSE_WINDOW, &InputConfigDialog::OnClose, this); Bind(wxEVT_BUTTON, &InputConfigDialog::OnCloseButton, this, wxID_CLOSE); + Bind(wxEVT_ACTIVATE, &InputConfigDialog::OnActivate, this); SetLayoutAdaptationMode(wxDIALOG_ADAPTATION_MODE_ENABLED); SetLayoutAdaptationLevel(wxDIALOG_ADAPTATION_STANDARD_SIZER); @@ -1269,6 +1271,12 @@ InputConfigDialog::InputConfigDialog(wxWindow* const parent, InputConfig& config m_update_timer.Start(PREVIEW_UPDATE_TIME, wxTIMER_CONTINUOUS); } +void InputConfigDialog::OnActivate(wxActivateEvent& event) +{ + // Needed for input bitmaps + SetUINeedsControllerState(event.GetActive()); +} + InputEventFilter::InputEventFilter() { wxEvtHandler::AddFilter(this); diff --git a/Source/Core/DolphinWX/Input/InputConfigDiag.h b/Source/Core/DolphinWX/Input/InputConfigDiag.h index 81dbb1760f..f1aa037bab 100644 --- a/Source/Core/DolphinWX/Input/InputConfigDiag.h +++ b/Source/Core/DolphinWX/Input/InputConfigDiag.h @@ -191,6 +191,7 @@ public: const int port_num = 0); virtual ~InputConfigDialog() = default; + void OnActivate(wxActivateEvent& event); void OnClose(wxCloseEvent& event); void OnCloseButton(wxCommandEvent& event); diff --git a/Source/Core/DolphinWX/Main.cpp b/Source/Core/DolphinWX/Main.cpp index 70f34ab482..19da6231e4 100644 --- a/Source/Core/DolphinWX/Main.cpp +++ b/Source/Core/DolphinWX/Main.cpp @@ -47,6 +47,7 @@ #include "DolphinWX/Main.h" #include "DolphinWX/NetPlay/NetWindow.h" #include "DolphinWX/SoftwareVideoConfigDialog.h" +#include "DolphinWX/UINeedsControllerState.h" #include "DolphinWX/VideoConfigDiag.h" #include "DolphinWX/WxUtils.h" @@ -486,9 +487,9 @@ void Host_SetWiiMoteConnectionState(int _State) main_frame->GetEventHandler()->AddPendingEvent(event); } -bool Host_UIHasFocus() +bool Host_UINeedsControllerState() { - return wxGetApp().IsActiveThreadsafe(); + return wxGetApp().IsActiveThreadsafe() && GetUINeedsControllerState(); } bool Host_RendererHasFocus() diff --git a/Source/Core/DolphinWX/UINeedsControllerState.cpp b/Source/Core/DolphinWX/UINeedsControllerState.cpp new file mode 100644 index 0000000000..bffeef1b59 --- /dev/null +++ b/Source/Core/DolphinWX/UINeedsControllerState.cpp @@ -0,0 +1,17 @@ +// Copyright 2017 Dolphin Emulator Project +// Licensed under GPLv2+ +// Refer to the license.txt file included. + +#include + +static std::atomic s_needs_controller_state{false}; + +void SetUINeedsControllerState(bool needs_controller_state) +{ + s_needs_controller_state = needs_controller_state; +} + +bool GetUINeedsControllerState() +{ + return s_needs_controller_state; +} diff --git a/Source/Core/DolphinWX/UINeedsControllerState.h b/Source/Core/DolphinWX/UINeedsControllerState.h new file mode 100644 index 0000000000..3548abc9f6 --- /dev/null +++ b/Source/Core/DolphinWX/UINeedsControllerState.h @@ -0,0 +1,8 @@ +// Copyright 2017 Dolphin Emulator Project +// Licensed under GPLv2+ +// Refer to the license.txt file included. + +#pragma once + +void SetUINeedsControllerState(bool needs_controller_state); +bool GetUINeedsControllerState(); diff --git a/Source/Core/InputCommon/ControlReference/ControlReference.cpp b/Source/Core/InputCommon/ControlReference/ControlReference.cpp index c92d3601ed..e4162e22a7 100644 --- a/Source/Core/InputCommon/ControlReference/ControlReference.cpp +++ b/Source/Core/InputCommon/ControlReference/ControlReference.cpp @@ -17,7 +17,8 @@ constexpr ControlState INPUT_DETECT_THRESHOLD = 0.55; bool ControlReference::InputGateOn() { - return SConfig::GetInstance().m_BackgroundInput || Host_RendererHasFocus(); + return SConfig::GetInstance().m_BackgroundInput || Host_RendererHasFocus() || + Host_UINeedsControllerState(); } // diff --git a/Source/UnitTests/StubHost.cpp b/Source/UnitTests/StubHost.cpp index 1519af27a6..019833650c 100644 --- a/Source/UnitTests/StubHost.cpp +++ b/Source/UnitTests/StubHost.cpp @@ -39,7 +39,7 @@ void Host_RequestRenderWindowSize(int, int) void Host_SetStartupDebuggingParameters() { } -bool Host_UIHasFocus() +bool Host_UINeedsControllerState() { return false; }