From 82fd06476e05814f772d131a0da953797a4e900d Mon Sep 17 00:00:00 2001 From: Jean-Philip Desjardins Date: Fri, 19 Aug 2016 10:36:20 -0400 Subject: [PATCH] Use focus window system. --- Source/ui_win32/PH_DirectInput.cpp | 5 ++--- Source/ui_win32/PH_DirectInput.h | 6 +----- .../PH_DirectInput/ControllerSettingsWnd.cpp | 5 ++++- .../InputBindingSelectionWindow.cpp | 2 ++ .../ui_win32/PH_DirectInput/InputManager.cpp | 18 +++++++++++++++--- Source/ui_win32/PH_DirectInput/InputManager.h | 6 +++++- 6 files changed, 29 insertions(+), 13 deletions(-) diff --git a/Source/ui_win32/PH_DirectInput.cpp b/Source/ui_win32/PH_DirectInput.cpp index 005dfb86..40a6c0c6 100644 --- a/Source/ui_win32/PH_DirectInput.cpp +++ b/Source/ui_win32/PH_DirectInput.cpp @@ -3,10 +3,9 @@ #include "../AppConfig.h" CPH_DirectInput::CPH_DirectInput(HWND hWnd) -: m_hWnd(hWnd) -, m_inputManager(hWnd, CAppConfig::GetInstance()) +: m_inputManager(CAppConfig::GetInstance()) { - + m_inputManager.PushFocusWindow(hWnd); } CPH_DirectInput::~CPH_DirectInput() diff --git a/Source/ui_win32/PH_DirectInput.h b/Source/ui_win32/PH_DirectInput.h index fb7d5869..9408dcf6 100644 --- a/Source/ui_win32/PH_DirectInput.h +++ b/Source/ui_win32/PH_DirectInput.h @@ -1,5 +1,4 @@ -#ifndef _PH_DIRECTINPUT_H_ -#define _PH_DIRECTINPUT_H_ +#pragma once #include "Types.h" #include "SettingsDialogProvider.h" @@ -24,7 +23,4 @@ private: static CPadHandler* PadHandlerFactory(HWND); PH_DirectInput::CInputManager m_inputManager; - HWND m_hWnd; }; - -#endif diff --git a/Source/ui_win32/PH_DirectInput/ControllerSettingsWnd.cpp b/Source/ui_win32/PH_DirectInput/ControllerSettingsWnd.cpp index 23421bea..6411b082 100644 --- a/Source/ui_win32/PH_DirectInput/ControllerSettingsWnd.cpp +++ b/Source/ui_win32/PH_DirectInput/ControllerSettingsWnd.cpp @@ -59,6 +59,8 @@ CControllerSettingsWnd::CControllerSettingsWnd(HWND parent, CInputManager& input ) ); + m_inputManager.PushFocusWindow(m_hWnd); + RefreshLayout(); PopulateList(); UpdateBindings(); @@ -69,7 +71,7 @@ CControllerSettingsWnd::CControllerSettingsWnd(HWND parent, CInputManager& input CControllerSettingsWnd::~CControllerSettingsWnd() { - + m_inputManager.PopFocusWindow(); } void CControllerSettingsWnd::RefreshLayout() @@ -171,6 +173,7 @@ void CControllerSettingsWnd::OnListItemDblClick() CInputBindingSelectionWindow dialog(m_hWnd, m_inputManager, button); dialog.DoModal(); UpdateBindings(); + m_inputManager.ResetBindingValues(); } } } diff --git a/Source/ui_win32/PH_DirectInput/InputBindingSelectionWindow.cpp b/Source/ui_win32/PH_DirectInput/InputBindingSelectionWindow.cpp index ea029622..ba381a45 100644 --- a/Source/ui_win32/PH_DirectInput/InputBindingSelectionWindow.cpp +++ b/Source/ui_win32/PH_DirectInput/InputBindingSelectionWindow.cpp @@ -45,12 +45,14 @@ CInputBindingSelectionWindow::CInputBindingSelectionWindow( m_directInputManagerHandlerId = inputManager.GetDirectInputManager()->RegisterInputEventHandler(std::bind( &CInputBindingSelectionWindow::ProcessEvent, this, std::placeholders::_1, std::placeholders::_2, std::placeholders::_3)); + m_inputManager.PushFocusWindow(m_hWnd); SetTimer(m_hWnd, 0, 50, NULL); } CInputBindingSelectionWindow::~CInputBindingSelectionWindow() { + m_inputManager.PopFocusWindow(); m_inputManager.GetDirectInputManager()->UnregisterInputEventHandler(m_directInputManagerHandlerId); } diff --git a/Source/ui_win32/PH_DirectInput/InputManager.cpp b/Source/ui_win32/PH_DirectInput/InputManager.cpp index 0859b904..820120bb 100644 --- a/Source/ui_win32/PH_DirectInput/InputManager.cpp +++ b/Source/ui_win32/PH_DirectInput/InputManager.cpp @@ -45,7 +45,7 @@ uint32 CInputManager::m_buttonDefaultValue[PS2::CControllerInfo::MAX_BUTTONS] = false }; -CInputManager::CInputManager(HWND hWnd, Framework::CConfig& config) +CInputManager::CInputManager(Framework::CConfig& config) : m_config(config) , m_directInputManager(new Framework::DirectInput::CManager()) { @@ -65,8 +65,8 @@ CInputManager::CInputManager(HWND hWnd, Framework::CConfig& config) m_directInputManager->RegisterInputEventHandler(std::bind(&CInputManager::OnInputEventReceived, this, std::placeholders::_1, std::placeholders::_2, std::placeholders::_3)); - m_directInputManager->CreateKeyboard(hWnd); - m_directInputManager->CreateJoysticks(hWnd); + m_directInputManager->CreateKeyboard(); + m_directInputManager->CreateJoysticks(); } CInputManager::~CInputManager() @@ -74,6 +74,18 @@ CInputManager::~CInputManager() delete m_directInputManager; } +void CInputManager::PushFocusWindow(HWND focusWindow) +{ + m_focusWindows.push(focusWindow); + m_directInputManager->SetFocusWindow(m_focusWindows.top()); +} + +void CInputManager::PopFocusWindow() +{ + m_focusWindows.pop(); + m_directInputManager->SetFocusWindow(m_focusWindows.top()); +} + void CInputManager::Load() { bool hasBindings = false; diff --git a/Source/ui_win32/PH_DirectInput/InputManager.h b/Source/ui_win32/PH_DirectInput/InputManager.h index 9d033c72..d23c7ea6 100644 --- a/Source/ui_win32/PH_DirectInput/InputManager.h +++ b/Source/ui_win32/PH_DirectInput/InputManager.h @@ -129,9 +129,12 @@ namespace PH_DirectInput uint32 m_key2State = 0; }; - CInputManager(HWND, Framework::CConfig&); + CInputManager(Framework::CConfig&); virtual ~CInputManager(); + void PushFocusWindow(HWND); + void PopFocusWindow(); + uint32 GetBindingValue(PS2::CControllerInfo::BUTTON) const; void ResetBindingValues(); @@ -159,5 +162,6 @@ namespace PH_DirectInput Framework::DirectInput::CManager* m_directInputManager; Framework::CConfig& m_config; + std::stack m_focusWindows; }; }