From f6933a88681cd57fd3d08db290ff4966eda810ad Mon Sep 17 00:00:00 2001 From: Janek Bevendorff Date: Tue, 24 Oct 2017 15:25:38 +0200 Subject: [PATCH] Ensure that YubiKey is only polled once, even if showEvent() is called twice --- src/gui/DatabaseOpenWidget.cpp | 16 ++++++++++++---- src/gui/DatabaseOpenWidget.h | 1 + 2 files changed, 13 insertions(+), 4 deletions(-) diff --git a/src/gui/DatabaseOpenWidget.cpp b/src/gui/DatabaseOpenWidget.cpp index ee0e9de2..e487f97c 100644 --- a/src/gui/DatabaseOpenWidget.cpp +++ b/src/gui/DatabaseOpenWidget.cpp @@ -95,11 +95,16 @@ void DatabaseOpenWidget::showEvent(QShowEvent* event) m_ui->editPassword->setFocus(); #ifdef WITH_XC_YUBIKEY - connect(YubiKey::instance(), SIGNAL(detected(int,bool)), SLOT(yubikeyDetected(int,bool)), Qt::QueuedConnection); - connect(YubiKey::instance(), SIGNAL(detectComplete()), SLOT(yubikeyDetectComplete()), Qt::QueuedConnection); - connect(YubiKey::instance(), SIGNAL(notFound()), SLOT(noYubikeyFound()), Qt::QueuedConnection); + // showEvent() may be called twice, so make sure we are only polling once + if (!m_yubiKeyBeingPolled) { + connect(YubiKey::instance(), SIGNAL(detected(int, bool)), SLOT(yubikeyDetected(int, bool)), + Qt::QueuedConnection); + connect(YubiKey::instance(), SIGNAL(detectComplete()), SLOT(yubikeyDetectComplete()), Qt::QueuedConnection); + connect(YubiKey::instance(), SIGNAL(notFound()), SLOT(noYubikeyFound()), Qt::QueuedConnection); - pollYubikey(); + pollYubikey(); + m_yubiKeyBeingPolled = true; + } #endif } @@ -110,6 +115,7 @@ void DatabaseOpenWidget::hideEvent(QHideEvent* event) #ifdef WITH_XC_YUBIKEY // Don't listen to any Yubikey events if we are hidden disconnect(YubiKey::instance(), 0, this, 0); + m_yubiKeyBeingPolled = false; #endif } @@ -311,10 +317,12 @@ void DatabaseOpenWidget::yubikeyDetectComplete() m_ui->checkChallengeResponse->setEnabled(true); m_ui->buttonRedetectYubikey->setEnabled(true); m_ui->yubikeyProgress->setVisible(false); + m_yubiKeyBeingPolled = false; } void DatabaseOpenWidget::noYubikeyFound() { m_ui->buttonRedetectYubikey->setEnabled(true); m_ui->yubikeyProgress->setVisible(false); + m_yubiKeyBeingPolled = false; } diff --git a/src/gui/DatabaseOpenWidget.h b/src/gui/DatabaseOpenWidget.h index a7691a91..aade111c 100644 --- a/src/gui/DatabaseOpenWidget.h +++ b/src/gui/DatabaseOpenWidget.h @@ -73,6 +73,7 @@ protected: QString m_filename; private: + bool m_yubiKeyBeingPolled = false; Q_DISABLE_COPY(DatabaseOpenWidget) };