diff --git a/launcher/ui/dialogs/MSALoginDialog.cpp b/launcher/ui/dialogs/MSALoginDialog.cpp index f46aa3b9..41aac720 100644 --- a/launcher/ui/dialogs/MSALoginDialog.cpp +++ b/launcher/ui/dialogs/MSALoginDialog.cpp @@ -1,4 +1,4 @@ -/* Copyright 2013-2021 MultiMC Contributors +/* Copyright 2013-2022 MultiMC Contributors * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -20,6 +20,7 @@ #include #include +#include MSALoginDialog::MSALoginDialog(QWidget *parent) : QDialog(parent), ui(new Ui::MSALoginDialog) { @@ -34,6 +35,7 @@ MSALoginDialog::MSALoginDialog(QWidget *parent) : QDialog(parent), ui(new Ui::MS int MSALoginDialog::exec() { setUserInputsEnabled(false); ui->progressBar->setVisible(true); + ui->copyCodeButton->setVisible(false); // Setup the login task and start it m_account = MinecraftAccount::createBlankMSA(); @@ -68,6 +70,8 @@ void MSALoginDialog::externalLoginTick() { void MSALoginDialog::showVerificationUriAndCode(const QUrl& uri, const QString& code, int expiresIn) { + ui->copyCodeButton->setVisible(true); + m_externalLoginElapsed = 0; m_externalLoginTimeout = expiresIn; @@ -81,9 +85,12 @@ void MSALoginDialog::showVerificationUriAndCode(const QUrl& uri, const QString& QString urlString = uri.toString(); QString linkString = QString("%2").arg(urlString, urlString); ui->label->setText(tr("

Please open up %1 in a browser and put in the code %2 to proceed with login.

").arg(linkString, code)); + + m_code = code; } void MSALoginDialog::hideVerificationUriAndCode() { + ui->copyCodeButton->setVisible(false); m_externalLoginTimer.stop(); } @@ -139,3 +146,8 @@ MinecraftAccountPtr MSALoginDialog::newAccount(QWidget *parent, QString msg) } return 0; } + +void MSALoginDialog::on_copyCodeButton_clicked() +{ + QApplication::clipboard()->setText(m_code); +} \ No newline at end of file diff --git a/launcher/ui/dialogs/MSALoginDialog.h b/launcher/ui/dialogs/MSALoginDialog.h index 4cf146ab..963f550b 100644 --- a/launcher/ui/dialogs/MSALoginDialog.h +++ b/launcher/ui/dialogs/MSALoginDialog.h @@ -49,6 +49,7 @@ slots: void onTaskProgress(qint64 current, qint64 total); void showVerificationUriAndCode(const QUrl &uri, const QString &code, int expiresIn); void hideVerificationUriAndCode(); + void on_copyCodeButton_clicked(); void externalLoginTick(); @@ -57,6 +58,7 @@ private: MinecraftAccountPtr m_account; shared_qobject_ptr m_loginTask; QTimer m_externalLoginTimer; + QString m_code; int m_externalLoginElapsed = 0; int m_externalLoginTimeout = 0; }; diff --git a/launcher/ui/dialogs/MSALoginDialog.ui b/launcher/ui/dialogs/MSALoginDialog.ui index 78cbfb26..0921e38a 100644 --- a/launcher/ui/dialogs/MSALoginDialog.ui +++ b/launcher/ui/dialogs/MSALoginDialog.ui @@ -49,14 +49,25 @@ aaaaa - - - Qt::Horizontal - - - QDialogButtonBox::Cancel - - + + + + + Copy Code + + + + + + + Qt::Horizontal + + + QDialogButtonBox::Cancel + + + +