HostInterface: Notify host when controller types change

This commit is contained in:
Connor McLaughlin 2020-02-16 00:14:44 +09:00
parent b0c846388e
commit 5f3be68028
6 changed files with 27 additions and 0 deletions

View file

@ -521,6 +521,8 @@ void HostInterface::OnSystemPerformanceCountersUpdated() {}
void HostInterface::OnRunningGameChanged() {} void HostInterface::OnRunningGameChanged() {}
void HostInterface::OnControllerTypeChanged(u32 slot) {}
void HostInterface::SetUserDirectory() void HostInterface::SetUserDirectory()
{ {
const std::string program_path = FileSystem::GetProgramPath(); const std::string program_path = FileSystem::GetProgramPath();
@ -726,6 +728,7 @@ void HostInterface::UpdateSettings(const std::function<void()>& apply_callback)
const bool old_audio_sync_enabled = m_settings.audio_sync_enabled; const bool old_audio_sync_enabled = m_settings.audio_sync_enabled;
const bool old_speed_limiter_enabled = m_settings.speed_limiter_enabled; const bool old_speed_limiter_enabled = m_settings.speed_limiter_enabled;
const bool old_display_linear_filtering = m_settings.display_linear_filtering; const bool old_display_linear_filtering = m_settings.display_linear_filtering;
std::array<ControllerType, NUM_CONTROLLER_AND_CARD_PORTS> old_controller_types = m_settings.controller_types;
apply_callback(); apply_callback();
@ -773,6 +776,12 @@ void HostInterface::UpdateSettings(const std::function<void()>& apply_callback)
} }
} }
for (u32 i = 0; i < NUM_CONTROLLER_AND_CARD_PORTS; i++)
{
if (m_settings.controller_types[i] != old_controller_types[i])
OnControllerTypeChanged(i);
}
if (m_display && m_settings.display_linear_filtering != old_display_linear_filtering) if (m_display && m_settings.display_linear_filtering != old_display_linear_filtering)
m_display->SetDisplayLinearFiltering(m_settings.display_linear_filtering); m_display->SetDisplayLinearFiltering(m_settings.display_linear_filtering);
} }

View file

@ -104,6 +104,7 @@ protected:
virtual void OnSystemDestroyed(); virtual void OnSystemDestroyed();
virtual void OnSystemPerformanceCountersUpdated(); virtual void OnSystemPerformanceCountersUpdated();
virtual void OnRunningGameChanged(); virtual void OnRunningGameChanged();
virtual void OnControllerTypeChanged(u32 slot);
void SetUserDirectory(); void SetUserDirectory();

View file

@ -314,6 +314,13 @@ void QtHostInterface::OnRunningGameChanged()
} }
} }
void QtHostInterface::OnControllerTypeChanged(u32 slot)
{
HostInterface::OnControllerTypeChanged(slot);
updateInputMap();
}
void QtHostInterface::updateInputMap() void QtHostInterface::updateInputMap()
{ {
if (!isOnWorkerThread()) if (!isOnWorkerThread())

View file

@ -102,6 +102,7 @@ protected:
void OnSystemDestroyed() override; void OnSystemDestroyed() override;
void OnSystemPerformanceCountersUpdated() override; void OnSystemPerformanceCountersUpdated() override;
void OnRunningGameChanged() override; void OnRunningGameChanged() override;
void OnControllerTypeChanged(u32 slot) override;
private: private:
using InputButtonHandler = std::function<void(bool)>; using InputButtonHandler = std::function<void(bool)>;

View file

@ -189,6 +189,14 @@ void SDLHostInterface::OnSystemDestroyed()
HostInterface::OnSystemDestroyed(); HostInterface::OnSystemDestroyed();
} }
void SDLHostInterface::OnControllerTypeChanged(u32 slot)
{
HostInterface::OnControllerTypeChanged(slot);
UpdateKeyboardControllerMapping();
UpdateControllerControllerMapping();
}
void SDLHostInterface::SaveSettings() void SDLHostInterface::SaveSettings()
{ {
SDLSettingsInterface si(GetSettingsFileName().c_str()); SDLSettingsInterface si(GetSettingsFileName().c_str());

View file

@ -37,6 +37,7 @@ protected:
void OnSystemCreated() override; void OnSystemCreated() override;
void OnSystemPaused(bool paused) override; void OnSystemPaused(bool paused) override;
void OnSystemDestroyed(); void OnSystemDestroyed();
void OnControllerTypeChanged(u32 slot) override;
private: private:
enum class KeyboardControllerAction enum class KeyboardControllerAction