summary refs log tree commit diff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/RegisterPage.cpp74
-rw-r--r--src/RegisterPage.h7
2 files changed, 37 insertions, 44 deletions
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_);
diff --git a/src/RegisterPage.h b/src/RegisterPage.h
index 1f39ab0c..b05cf150 100644
--- a/src/RegisterPage.h
+++ b/src/RegisterPage.h
@@ -25,10 +25,6 @@ class FlatButton;
 class RaisedButton;
 class TextField;
 
-namespace dialogs {
-class ReCaptcha;
-}
-
 class RegisterPage : public QWidget
 {
         Q_OBJECT
@@ -77,7 +73,4 @@ private:
         TextField *password_input_;
         TextField *password_confirmation_;
         TextField *server_input_;
-
-        //! ReCaptcha dialog.
-        std::shared_ptr<dialogs::ReCaptcha> captchaDialog_;
 };