diff --git a/src/RegisterPage.cpp b/src/RegisterPage.cpp
index 5a02713a..dcf60dee 100644
--- a/src/RegisterPage.cpp
+++ b/src/RegisterPage.cpp
@@ -134,43 +134,43 @@ RegisterPage::RegisterPage(QWidget *parent)
[this](const std::string &user, const std::string &pass, const std::string &session) {
emit errorOccurred();
- if (!captchaDialog_) {
- captchaDialog_ = std::make_shared<dialogs::ReCaptcha>(
- QString::fromStdString(session), this);
- connect(
- captchaDialog_.get(),
- &dialogs::ReCaptcha::closing,
- this,
- [this, user, pass, session]() {
- captchaDialog_->close();
- emit registering();
-
- http::client()->flow_response(
- user,
- pass,
- session,
- "m.login.recaptcha",
- [this](const mtx::responses::Register &res,
- mtx::http::RequestErr err) {
- if (err) {
- nhlog::net()->warn(
- "failed to retrieve registration flows: {}",
- err->matrix_error.error);
- emit errorOccurred();
- emit registerErrorCb(QString::fromStdString(
- err->matrix_error.error));
- return;
- }
-
- http::client()->set_user(res.user_id);
- http::client()->set_access_token(res.access_token);
-
- emit registerOk();
- });
- });
- }
-
- QTimer::singleShot(1000, this, [this]() { captchaDialog_->show(); });
+ auto captchaDialog =
+ new dialogs::ReCaptcha(QString::fromStdString(session), this);
+
+ connect(captchaDialog,
+ &dialogs::ReCaptcha::closing,
+ this,
+ [this, user, pass, session, captchaDialog]() {
+ captchaDialog->close();
+ captchaDialog->deleteLater();
+
+ emit registering();
+
+ http::client()->flow_response(
+ user,
+ pass,
+ session,
+ "m.login.recaptcha",
+ [this](const mtx::responses::Register &res,
+ mtx::http::RequestErr err) {
+ if (err) {
+ nhlog::net()->warn(
+ "failed to retrieve registration flows: {}",
+ err->matrix_error.error);
+ emit errorOccurred();
+ emit registerErrorCb(QString::fromStdString(
+ err->matrix_error.error));
+ return;
+ }
+
+ http::client()->set_user(res.user_id);
+ http::client()->set_access_token(res.access_token);
+
+ emit registerOk();
+ });
+ });
+
+ QTimer::singleShot(1000, this, [captchaDialog]() { captchaDialog->show(); });
});
setLayout(top_layout_);
|