From a7f334dc2a3eec0119d8b77ec3ff35bbc8aae5f9 Mon Sep 17 00:00:00 2001 From: Stenzek Date: Wed, 3 Oct 2018 17:34:27 +1000 Subject: ControllerInterface: Don't crash on non-X11 QPA --- .../ControllerInterface/ControllerInterface.cpp | 20 +++++++++++++------- .../ControllerInterface/ControllerInterface.h | 7 ++++--- 2 files changed, 17 insertions(+), 10 deletions(-) (limited to 'Source/Core/InputCommon/ControllerInterface') diff --git a/Source/Core/InputCommon/ControllerInterface/ControllerInterface.cpp b/Source/Core/InputCommon/ControllerInterface/ControllerInterface.cpp index 0e6857c137..7be22d4a8d 100644 --- a/Source/Core/InputCommon/ControllerInterface/ControllerInterface.cpp +++ b/Source/Core/InputCommon/ControllerInterface/ControllerInterface.cpp @@ -41,12 +41,12 @@ ControllerInterface g_controller_interface; // // Detect devices and inputs outputs / will make refresh function later // -void ControllerInterface::Initialize(void* const hwnd) +void ControllerInterface::Initialize(const WindowSystemInfo& wsi) { if (m_is_init) return; - m_hwnd = hwnd; + m_wsi = wsi; m_is_populating_devices = true; #ifdef CIFACE_USE_DINPUT @@ -59,7 +59,8 @@ void ControllerInterface::Initialize(void* const hwnd) // nothing needed #endif #ifdef CIFACE_USE_OSX - ciface::OSX::Init(hwnd); + if (m_wsi.type == WindowSystemType::MacOS) + ciface::OSX::Init(wsi.render_surface); // nothing needed for Quartz #endif #ifdef CIFACE_USE_SDL @@ -92,17 +93,22 @@ void ControllerInterface::RefreshDevices() m_is_populating_devices = true; #ifdef CIFACE_USE_DINPUT - ciface::DInput::PopulateDevices(reinterpret_cast(m_hwnd)); + if (m_wsi.type == WindowSystemType::Windows) + ciface::DInput::PopulateDevices(reinterpret_cast(m_wsi.render_surface)); #endif #ifdef CIFACE_USE_XINPUT ciface::XInput::PopulateDevices(); #endif #ifdef CIFACE_USE_XLIB - ciface::XInput2::PopulateDevices(m_hwnd); + if (m_wsi.type == WindowSystemType::X11) + ciface::XInput2::PopulateDevices(m_wsi.render_surface); #endif #ifdef CIFACE_USE_OSX - ciface::OSX::PopulateDevices(m_hwnd); - ciface::Quartz::PopulateDevices(m_hwnd); + if (m_wsi.type == WindowSystemType::MacOS) + { + ciface::OSX::PopulateDevices(m_wsi.render_surface); + ciface::Quartz::PopulateDevices(m_wsi.render_surface); + } #endif #ifdef CIFACE_USE_SDL ciface::SDL::PopulateDevices(); diff --git a/Source/Core/InputCommon/ControllerInterface/ControllerInterface.h b/Source/Core/InputCommon/ControllerInterface/ControllerInterface.h index c576b20fb3..2e078e8934 100644 --- a/Source/Core/InputCommon/ControllerInterface/ControllerInterface.h +++ b/Source/Core/InputCommon/ControllerInterface/ControllerInterface.h @@ -10,6 +10,7 @@ #include #include +#include "Common/WindowSystemInfo.h" #include "InputCommon/ControllerInterface/Device.h" // enable disable sources @@ -39,8 +40,8 @@ class ControllerInterface : public ciface::Core::DeviceContainer { public: - ControllerInterface() : m_is_init(false), m_hwnd(nullptr) {} - void Initialize(void* const hwnd); + ControllerInterface() : m_is_init(false) {} + void Initialize(const WindowSystemInfo& wsi); void RefreshDevices(); void Shutdown(); void AddDevice(std::shared_ptr device); @@ -56,7 +57,7 @@ private: mutable std::mutex m_callbacks_mutex; bool m_is_init; std::atomic m_is_populating_devices{false}; - void* m_hwnd; + WindowSystemInfo m_wsi; }; extern ControllerInterface g_controller_interface; -- cgit v1.2.3 From 52828901efedb146cb572573b2381e73d2ada4d9 Mon Sep 17 00:00:00 2001 From: Stenzek Date: Sat, 27 Oct 2018 20:06:35 +1000 Subject: Core: Switch controller interface to render widget on booting Previously, the Qt frontend would initialize the controller interface on starting, resulting in the cursor position being relative to the main window, instead of the render window. --- .../Core/InputCommon/ControllerInterface/ControllerInterface.cpp | 9 +++++++++ .../Core/InputCommon/ControllerInterface/ControllerInterface.h | 1 + 2 files changed, 10 insertions(+) (limited to 'Source/Core/InputCommon/ControllerInterface') diff --git a/Source/Core/InputCommon/ControllerInterface/ControllerInterface.cpp b/Source/Core/InputCommon/ControllerInterface/ControllerInterface.cpp index 7be22d4a8d..9f6e7c5179 100644 --- a/Source/Core/InputCommon/ControllerInterface/ControllerInterface.cpp +++ b/Source/Core/InputCommon/ControllerInterface/ControllerInterface.cpp @@ -80,6 +80,15 @@ void ControllerInterface::Initialize(const WindowSystemInfo& wsi) RefreshDevices(); } +void ControllerInterface::ChangeWindow(void* hwnd) +{ + if (!m_is_init) + return; + + m_wsi.render_surface = hwnd; + RefreshDevices(); +} + void ControllerInterface::RefreshDevices() { if (!m_is_init) diff --git a/Source/Core/InputCommon/ControllerInterface/ControllerInterface.h b/Source/Core/InputCommon/ControllerInterface/ControllerInterface.h index 2e078e8934..d5567222a4 100644 --- a/Source/Core/InputCommon/ControllerInterface/ControllerInterface.h +++ b/Source/Core/InputCommon/ControllerInterface/ControllerInterface.h @@ -42,6 +42,7 @@ class ControllerInterface : public ciface::Core::DeviceContainer public: ControllerInterface() : m_is_init(false) {} void Initialize(const WindowSystemInfo& wsi); + void ChangeWindow(void* hwnd); void RefreshDevices(); void Shutdown(); void AddDevice(std::shared_ptr device); -- cgit v1.2.3