diff --git a/Source/Core/DolphinWX/Frame.cpp b/Source/Core/DolphinWX/Frame.cpp index 5978dfc49d..c0e09ebdfb 100644 --- a/Source/Core/DolphinWX/Frame.cpp +++ b/Source/Core/DolphinWX/Frame.cpp @@ -504,18 +504,25 @@ void CFrame::OnQuit(wxCommandEvent& WXUNUSED(event)) // Events void CFrame::OnActive(wxActivateEvent& event) { + m_bHasFocus = (event.GetActive() && event.GetEventObject() == m_RenderFrame); if (Core::GetState() == Core::CORE_RUN || Core::GetState() == Core::CORE_PAUSE) { - if (event.GetActive() && event.GetEventObject() == m_RenderFrame) + if (m_bHasFocus) { if (SConfig::GetInstance().bRenderToMain) m_RenderParent->SetFocus(); + if (SConfig::GetInstance().m_PauseOnFocusLost && Core::GetState() == Core::CORE_PAUSE) + DoPause(); + if (SConfig::GetInstance().bHideCursor && Core::GetState() == Core::CORE_RUN) m_RenderParent->SetCursor(wxCURSOR_BLANK); } else { + if (SConfig::GetInstance().m_PauseOnFocusLost && Core::GetState() == Core::CORE_RUN) + DoPause(); + if (SConfig::GetInstance().bHideCursor) m_RenderParent->SetCursor(wxNullCursor); } @@ -769,27 +776,11 @@ bool CFrame::RendererHasFocus() { if (m_RenderParent == nullptr) return false; -#ifdef _WIN32 - HWND window = GetForegroundWindow(); - if (window == nullptr) - return false; - - if (m_RenderFrame->GetHWND() == window) - return true; -#else - wxWindow* window = wxWindow::FindFocus(); - if (window == nullptr) - return false; - // Why these different cases? - if (m_RenderParent == window || m_RenderParent == window->GetParent() || - m_RenderParent->GetParent() == window->GetParent()) - { - return true; - } -#endif - return false; + return m_bRendererHasFocus; } +// Returns true any time any one of our UI windows +// has the focus, including any dialogs or other windows. bool CFrame::UIHasFocus() { // UIHasFocus should return true any time any one of our UI @@ -799,8 +790,7 @@ bool CFrame::UIHasFocus() // focus. If it's not one of our windows, then it will return // null. - wxWindow* focusWindow = wxWindow::FindFocus(); - return (focusWindow != nullptr); + return m_bHasFocus; } void CFrame::OnGameListCtrlItemActivated(wxListEvent& WXUNUSED(event)) @@ -1139,35 +1129,6 @@ void CFrame::OnMouse(wxMouseEvent& event) event.Skip(); } -void CFrame::OnFocusChange(wxFocusEvent& event) -{ - if (SConfig::GetInstance().m_PauseOnFocusLost && Core::IsRunningAndStarted()) - { - if (RendererHasFocus()) - { - if (Core::GetState() == Core::CORE_PAUSE) - { - Core::SetState(Core::CORE_RUN); - if (SConfig::GetInstance().bHideCursor) - m_RenderParent->SetCursor(wxCURSOR_BLANK); - } - } - else - { - if (Core::GetState() == Core::CORE_RUN) - { - Core::SetState(Core::CORE_PAUSE); - if (SConfig::GetInstance().bHideCursor) - m_RenderParent->SetCursor(wxNullCursor); - Core::UpdateTitle(); - } - } - UpdateGUI(); - } - - event.Skip(); -} - void CFrame::DoFullscreen(bool enable_fullscreen) { if (g_Config.bExclusiveMode && Core::GetState() == Core::CORE_PAUSE) diff --git a/Source/Core/DolphinWX/Frame.h b/Source/Core/DolphinWX/Frame.h index 883b2db9f4..8bf27c1620 100644 --- a/Source/Core/DolphinWX/Frame.h +++ b/Source/Core/DolphinWX/Frame.h @@ -158,6 +158,7 @@ private: bool m_bNoDocking = false; bool m_bGameLoading = false; bool m_bClosing = false; + bool m_bHasFocus = false; bool m_confirmStop = false; bool m_tried_graceful_shutdown = false; int m_saveSlot = 1; @@ -306,8 +307,6 @@ private: void OnKeyDown(wxKeyEvent& event); // Keyboard void OnMouse(wxMouseEvent& event); // Mouse - void OnFocusChange(wxFocusEvent& event); - void OnHostMessage(wxCommandEvent& event); void OnMemcard(wxCommandEvent& event); // Misc diff --git a/Source/Core/DolphinWX/FrameTools.cpp b/Source/Core/DolphinWX/FrameTools.cpp index a4e3a0ae52..fb85d22cc4 100644 --- a/Source/Core/DolphinWX/FrameTools.cpp +++ b/Source/Core/DolphinWX/FrameTools.cpp @@ -733,8 +733,6 @@ void CFrame::StartGame(const std::string& filename) wxTheApp->Bind(wxEVT_MIDDLE_DOWN, &CFrame::OnMouse, this); wxTheApp->Bind(wxEVT_MIDDLE_UP, &CFrame::OnMouse, this); wxTheApp->Bind(wxEVT_MOTION, &CFrame::OnMouse, this); - wxTheApp->Bind(wxEVT_SET_FOCUS, &CFrame::OnFocusChange, this); - wxTheApp->Bind(wxEVT_KILL_FOCUS, &CFrame::OnFocusChange, this); m_RenderParent->Bind(wxEVT_SIZE, &CFrame::OnRenderParentResize, this); } } @@ -926,6 +924,8 @@ void CFrame::OnStopped() m_RenderFrame->SetWindowStyle(m_RenderFrame->GetWindowStyle() & ~wxSTAY_ON_TOP); } m_RenderParent = nullptr; + m_bRendererHasFocus = false; + m_RenderFrame = nullptr; // Clean framerate indications from the status bar. GetStatusBar()->SetStatusText(" ", 0);