summaryrefslogtreecommitdiff
path: root/Source/Core
diff options
context:
space:
mode:
Diffstat (limited to 'Source/Core')
-rw-r--r--Source/Core/DolphinQt/Config/Mapping/GCPadWiiUConfigDialog.cpp61
-rw-r--r--Source/Core/DolphinQt/Config/Mapping/GCPadWiiUConfigDialog.h4
-rw-r--r--Source/Core/InputCommon/GCAdapter.cpp10
3 files changed, 50 insertions, 25 deletions
diff --git a/Source/Core/DolphinQt/Config/Mapping/GCPadWiiUConfigDialog.cpp b/Source/Core/DolphinQt/Config/Mapping/GCPadWiiUConfigDialog.cpp
index 85cd35fb79..232957ea1f 100644
--- a/Source/Core/DolphinQt/Config/Mapping/GCPadWiiUConfigDialog.cpp
+++ b/Source/Core/DolphinQt/Config/Mapping/GCPadWiiUConfigDialog.cpp
@@ -10,6 +10,7 @@
#include <QVBoxLayout>
#include "Core/ConfigManager.h"
+#include "DolphinQt/QtUtils/QueueOnObject.h"
#include "InputCommon/GCAdapter.h"
@@ -24,44 +25,31 @@ GCPadWiiUConfigDialog::GCPadWiiUConfigDialog(int port, QWidget* parent)
ConnectWidgets();
}
+GCPadWiiUConfigDialog::~GCPadWiiUConfigDialog()
+{
+ GCAdapter::SetAdapterCallback(nullptr);
+}
+
void GCPadWiiUConfigDialog::CreateLayout()
{
setWindowTitle(tr("GameCube Adapter for Wii U at Port %1").arg(m_port + 1));
- const char* error_message = nullptr;
- const bool detected = GCAdapter::IsDetected(&error_message);
- QString status_text;
-
- if (detected)
- {
- status_text = tr("Adapter Detected");
- }
- else if (error_message)
- {
- status_text = tr("Error Opening Adapter: %1").arg(QString::fromUtf8(error_message));
- }
- else
- {
- status_text = tr("No Adapter Detected");
- }
-
m_layout = new QVBoxLayout();
- m_status_label = new QLabel(status_text);
+ m_status_label = new QLabel();
m_rumble = new QCheckBox(tr("Enable Rumble"));
m_simulate_bongos = new QCheckBox(tr("Simulate DK Bongos"));
m_button_box = new QDialogButtonBox(QDialogButtonBox::Ok);
+ UpdateAdapterStatus();
+
+ auto callback = [this] { QueueOnObject(this, &GCPadWiiUConfigDialog::UpdateAdapterStatus); };
+ GCAdapter::SetAdapterCallback(callback);
+
m_layout->addWidget(m_status_label);
m_layout->addWidget(m_rumble);
m_layout->addWidget(m_simulate_bongos);
m_layout->addWidget(m_button_box);
- if (!detected)
- {
- m_rumble->setEnabled(false);
- m_simulate_bongos->setEnabled(false);
- }
-
setLayout(m_layout);
}
@@ -72,6 +60,31 @@ void GCPadWiiUConfigDialog::ConnectWidgets()
connect(m_button_box, &QDialogButtonBox::accepted, this, &GCPadWiiUConfigDialog::accept);
}
+void GCPadWiiUConfigDialog::UpdateAdapterStatus()
+{
+ const char* error_message = nullptr;
+ const bool detected = GCAdapter::IsDetected(&error_message);
+ QString status_text;
+
+ if (detected)
+ {
+ status_text = tr("Adapter Detected");
+ }
+ else if (error_message)
+ {
+ status_text = tr("Error Opening Adapter: %1").arg(QString::fromUtf8(error_message));
+ }
+ else
+ {
+ status_text = tr("No Adapter Detected");
+ }
+
+ m_status_label->setText(status_text);
+
+ m_rumble->setEnabled(detected);
+ m_simulate_bongos->setEnabled(detected);
+}
+
void GCPadWiiUConfigDialog::LoadSettings()
{
m_rumble->setChecked(SConfig::GetInstance().m_AdapterRumble[m_port]);
diff --git a/Source/Core/DolphinQt/Config/Mapping/GCPadWiiUConfigDialog.h b/Source/Core/DolphinQt/Config/Mapping/GCPadWiiUConfigDialog.h
index 77cdb93355..bd1adb6d03 100644
--- a/Source/Core/DolphinQt/Config/Mapping/GCPadWiiUConfigDialog.h
+++ b/Source/Core/DolphinQt/Config/Mapping/GCPadWiiUConfigDialog.h
@@ -16,6 +16,7 @@ class GCPadWiiUConfigDialog final : public QDialog
Q_OBJECT
public:
explicit GCPadWiiUConfigDialog(int port, QWidget* parent = nullptr);
+ ~GCPadWiiUConfigDialog();
private:
void LoadSettings();
@@ -24,6 +25,9 @@ private:
void CreateLayout();
void ConnectWidgets();
+private:
+ void UpdateAdapterStatus();
+
int m_port;
QVBoxLayout* m_layout;
diff --git a/Source/Core/InputCommon/GCAdapter.cpp b/Source/Core/InputCommon/GCAdapter.cpp
index 174e374bf8..a4a4cee5cf 100644
--- a/Source/Core/InputCommon/GCAdapter.cpp
+++ b/Source/Core/InputCommon/GCAdapter.cpp
@@ -122,6 +122,10 @@ static int HotplugCallback(libusb_context* ctx, libusb_device* dev, libusb_hotpl
std::lock_guard<std::mutex> lk(s_init_mutex);
AddGCAdapter(dev);
}
+ else if (s_status < 0 && s_detect_callback != nullptr)
+ {
+ s_detect_callback();
+ }
}
else if (event == LIBUSB_HOTPLUG_EVENT_DEVICE_LEFT)
{
@@ -130,7 +134,11 @@ static int HotplugCallback(libusb_context* ctx, libusb_device* dev, libusb_hotpl
// Reset a potential error status now that the adapter is unplugged
if (s_status < 0)
- s_status = 0;
+ {
+ s_status = NO_ADAPTER_DETECTED;
+ if (s_detect_callback != nullptr)
+ s_detect_callback();
+ }
}
return 0;
}