diff --git a/launcher/ui/dialogs/AccountsDialog.cpp b/launcher/ui/dialogs/AccountsDialog.cpp index 9e876bf2..4fa78f4a 100644 --- a/launcher/ui/dialogs/AccountsDialog.cpp +++ b/launcher/ui/dialogs/AccountsDialog.cpp @@ -24,6 +24,7 @@ #include #include +#include constexpr auto selectionFlags = QItemSelectionModel::Clear | QItemSelectionModel::Select | QItemSelectionModel::Rows | QItemSelectionModel::Current; @@ -113,6 +114,7 @@ AccountsDialog::AccountsDialog(QWidget *parent, const QString& internalId) : QDi connect(m_accounts.get(), &AccountList::accountChanged, this, &AccountsDialog::onAccountChanged); connect(ui->linkButton, &QToolButton::clicked, this, &AccountsDialog::onQrButtonClicked); + connect(ui->copyLinkButton, &QToolButton::clicked, this, &AccountsDialog::onCopyLinkButtonClicked); connect(&m_externalLoginTimer, &QTimer::timeout, this, &AccountsDialog::externalLoginTick); ui->createProfileErrorLabel->setVisible(false); @@ -481,12 +483,14 @@ void AccountsDialog::stopLogin() m_loginAccount = nullptr; ui->getFreshCodeButton->setEnabled(true); ui->linkButton->setVisible(false); + ui->copyLinkButton->setVisible(false); } void AccountsDialog::startLogin() { ui->getFreshCodeButton->setEnabled(false); ui->linkButton->setVisible(false); + ui->copyLinkButton->setVisible(false); m_loginAccount = MinecraftAccount::createBlankMSA(); m_loginTask = m_loginAccount->loginMSA(); connect(m_loginTask.get(), &Task::failed, this, &AccountsDialog::onLoginTaskFailed); @@ -509,6 +513,11 @@ void AccountsDialog::onQrButtonClicked(bool) DesktopServices::openUrl(m_codeUrl); } +void AccountsDialog::onCopyLinkButtonClicked(bool) +{ + QClipboard *clipboard = QGuiApplication::clipboard(); + clipboard->setText(m_codeUrl.toString()); +} void AccountsDialog::externalLoginTick() { m_externalLoginElapsed++; @@ -567,6 +576,7 @@ void AccountsDialog::showVerificationUriAndCode(const QUrl& uri, const QString& ui->linkButton->setIcon(QPixmap::fromImage(qrcode)); ui->linkButton->setText(codeUrlString); ui->linkButton->setVisible(true); + ui->copyLinkButton->setVisible(true); ui->label->setText(tr("You can scan the QR code and complete the login process on a separate device, or you can open the link and login on this machine.")); m_code = code; @@ -574,6 +584,7 @@ void AccountsDialog::showVerificationUriAndCode(const QUrl& uri, const QString& void AccountsDialog::hideVerificationUriAndCode() { ui->linkButton->setVisible(false); + ui->copyLinkButton->setVisible(false); ui->progressBar->setVisible(false); m_externalLoginTimer.stop(); } diff --git a/launcher/ui/dialogs/AccountsDialog.h b/launcher/ui/dialogs/AccountsDialog.h index 1bf4f50e..b7dff05d 100644 --- a/launcher/ui/dialogs/AccountsDialog.h +++ b/launcher/ui/dialogs/AccountsDialog.h @@ -115,6 +115,7 @@ private: private slots: void onGetFreshCodeButtonClicked(bool); void onQrButtonClicked(bool); + void onCopyLinkButtonClicked(bool); void onLoginTaskFailed(const QString &reason); void onLoginTaskSucceeded(); void onLoginTaskStatus(const QString &status); diff --git a/launcher/ui/dialogs/AccountsDialog.ui b/launcher/ui/dialogs/AccountsDialog.ui index 60693180..bb65589e 100644 --- a/launcher/ui/dialogs/AccountsDialog.ui +++ b/launcher/ui/dialogs/AccountsDialog.ui @@ -63,7 +63,7 @@ QFrame::Raised - 4 + 0 @@ -391,19 +391,6 @@ QFrame::Raised - - - - - 300 - 0 - - - - false - - - @@ -429,7 +416,30 @@ + + + + + 300 + 0 + + + + false + + + + + + false + + + true + + + + @@ -445,13 +455,28 @@ - - - - false + + + + + 0 + 0 + - - true + + Copy Link + + + + + + + 300 + 300 + + + + Qt::ToolButtonTextUnderIcon