Merge pull request #633 from magcius/wip/input-focus-fix

Fix input focus issues
This commit is contained in:
Pierre Bourdon 2014-07-17 01:21:31 +02:00
commit 8cf21cdcdb
7 changed files with 41 additions and 2 deletions

View File

@ -23,6 +23,7 @@
// The host can be just a command line app that opens a window, or a full blown debugger // The host can be just a command line app that opens a window, or a full blown debugger
// interface. // interface.
bool Host_UIHasFocus();
bool Host_RendererHasFocus(); bool Host_RendererHasFocus();
void Host_ConnectWiimote(int wm_idx, bool connect); void Host_ConnectWiimote(int wm_idx, bool connect);
void Host_GetRenderWindowSize(int& x, int& y, int& width, int& height); void Host_GetRenderWindowSize(int& x, int& y, int& width, int& height);

View File

@ -753,7 +753,29 @@ void CFrame::OnRenderWindowSizeRequest(int width, int height)
bool CFrame::RendererHasFocus() bool CFrame::RendererHasFocus()
{ {
// RendererHasFocus should return true any time any one of our if (m_RenderParent == nullptr)
return false;
#ifdef _WIN32
if (m_RenderParent->GetParent()->GetHWND() == GetForegroundWindow())
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;
}
bool CFrame::UIHasFocus()
{
// UIHasFocus should return true any time any one of our UI
// windows has the focus, including any dialogs or other windows. // windows has the focus, including any dialogs or other windows.
// //
// wxGetActiveWindow() returns the current wxWindow which has // wxGetActiveWindow() returns the current wxWindow which has

View File

@ -138,6 +138,7 @@ public:
void OnRenderParentClose(wxCloseEvent& event); void OnRenderParentClose(wxCloseEvent& event);
void OnRenderParentMove(wxMoveEvent& event); void OnRenderParentMove(wxMoveEvent& event);
bool RendererHasFocus(); bool RendererHasFocus();
bool UIHasFocus();
void DoFullscreen(bool bF); void DoFullscreen(bool bF);
void ToggleDisplayMode (bool bFullscreen); void ToggleDisplayMode (bool bFullscreen);
void UpdateWiiMenuChoice(wxMenuItem *WiiMenuItem=nullptr); void UpdateWiiMenuChoice(wxMenuItem *WiiMenuItem=nullptr);

View File

@ -678,6 +678,11 @@ void Host_SetWiiMoteConnectionState(int _State)
main_frame->GetEventHandler()->AddPendingEvent(event); main_frame->GetEventHandler()->AddPendingEvent(event);
} }
bool Host_UIHasFocus()
{
return main_frame->UIHasFocus();
}
bool Host_RendererHasFocus() bool Host_RendererHasFocus()
{ {
return main_frame->RendererHasFocus(); return main_frame->RendererHasFocus();

View File

@ -98,6 +98,11 @@ void Host_SetStartupDebuggingParameters()
{ {
} }
bool Host_UIHasFocus()
{
return true;
}
bool Host_RendererHasFocus() bool Host_RendererHasFocus()
{ {
return true; return true;

View File

@ -95,6 +95,11 @@ void Host_SetStartupDebuggingParameters()
StartUp.bBootToPause = false; StartUp.bBootToPause = false;
} }
bool Host_UIHasFocus()
{
return false;
}
bool Host_RendererHasFocus() bool Host_RendererHasFocus()
{ {
return rendererHasFocus; return rendererHasFocus;

View File

@ -84,7 +84,7 @@ bool Device::Control::InputGateOn()
{ {
if (SConfig::GetInstance().m_BackgroundInput) if (SConfig::GetInstance().m_BackgroundInput)
return true; return true;
else if (Host_RendererHasFocus()) else if (Host_RendererHasFocus() || Host_UIHasFocus())
return true; return true;
else else
return false; return false;