From e0ba2a4aebc47e00ccc78c630ea89d2172ed51e7 Mon Sep 17 00:00:00 2001 From: spycrab Date: Sun, 1 Apr 2018 16:25:34 +0200 Subject: Qt: Implement "Iterative Input" --- .../Core/DolphinQt2/Config/Mapping/MappingButton.cpp | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) (limited to 'Source/Core/DolphinQt2/Config/Mapping/MappingButton.cpp') diff --git a/Source/Core/DolphinQt2/Config/Mapping/MappingButton.cpp b/Source/Core/DolphinQt2/Config/Mapping/MappingButton.cpp index 934cbde7e8..4598099c89 100644 --- a/Source/Core/DolphinQt2/Config/Mapping/MappingButton.cpp +++ b/Source/Core/DolphinQt2/Config/Mapping/MappingButton.cpp @@ -28,6 +28,11 @@ static QString EscapeAmpersand(QString&& string) return string.replace(QStringLiteral("&"), QStringLiteral("&&")); } +bool MappingButton::IsInput() const +{ + return m_reference->IsInput(); +} + MappingButton::MappingButton(MappingWidget* widget, ControlReference* ref, bool indicator) : ElidedButton(EscapeAmpersand(QString::fromStdString(ref->GetExpression()))), m_parent(widget), m_reference(ref) @@ -71,10 +76,10 @@ MappingButton::MappingButton(MappingWidget* widget, ControlReference* ref, bool void MappingButton::Connect() { - connect(this, &MappingButton::clicked, this, &MappingButton::OnButtonPressed); + connect(this, &MappingButton::pressed, this, &MappingButton::Detect); } -void MappingButton::OnButtonPressed() +void MappingButton::Detect() { if (m_parent->GetDevice() == nullptr || !m_reference->IsInput()) return; @@ -84,7 +89,7 @@ void MappingButton::OnButtonPressed() grabMouse(); // Make sure that we don't block event handling - std::thread([this] { + std::thread thread([this] { const auto dev = m_parent->GetDevice(); setText(QStringLiteral("...")); @@ -104,12 +109,17 @@ void MappingButton::OnButtonPressed() m_reference->SetExpression(expr.toStdString()); m_parent->SaveSettings(); Update(); + + if (m_parent->IsIterativeInput()) + m_parent->NextButton(this); } else { OnButtonTimeout(); } - }).detach(); + }); + + thread.detach(); } void MappingButton::OnButtonTimeout() -- cgit v1.2.3