diff --git a/src/Gui/KSMainWindow.h b/src/Gui/KSMainWindow.h --- a/src/Gui/KSMainWindow.h +++ b/src/Gui/KSMainWindow.h @@ -85,6 +85,8 @@ QMenu *mSaveMenu; QAction *mSaveAsAction; QAction *mSaveAction; + QAction *mCopyUrlToClipboardAction; + QString mSharedImageURL; KMessageWidget *mMessageWidget; QMenu *mToolsMenu; QMenu *mScreenRecorderToolsMenu; diff --git a/src/Gui/KSMainWindow.cpp b/src/Gui/KSMainWindow.cpp --- a/src/Gui/KSMainWindow.cpp +++ b/src/Gui/KSMainWindow.cpp @@ -32,6 +32,7 @@ #include #include +#include #include #include #include @@ -61,6 +62,8 @@ mSaveMenu(new QMenu), mSaveAsAction(new QAction(this)), mSaveAction(new QAction(this)), + mCopyUrlToClipboardAction(new QAction(this)), + mSharedImageURL(QString()), mMessageWidget(new KMessageWidget), mToolsMenu(new QMenu), mScreenRecorderToolsMenu(new QMenu), @@ -186,6 +189,11 @@ // message widget connect(mMessageWidget, &KMessageWidget::linkActivated, this, [](const QString &str) { QDesktopServices::openUrl(QUrl(str)); } ); + // the "copy URL to clipboard" action + mCopyUrlToClipboardAction = KStandardAction::copy(this, SLOT(sendToClipboard()), this); + mCopyUrlToClipboardAction->setText(i18n("Copy link to clipboard")); + mSharedImageURL = QString(); + // layouts mDivider->setFrameShape(QFrame::HLine); @@ -324,6 +332,8 @@ mMessageWidget->setText(i18n("Image shared")); else mMessageWidget->setText(i18n("You can find the shared image at: %1", message)); + mSharedImageURL = message; + mMessageWidget->addAction(mCopyUrlToClipboardAction); mMessageWidget->setIcon(QIcon::fromTheme(QStringLiteral("dialog-ok-apply"))); } @@ -333,16 +343,26 @@ void KSMainWindow::sendToClipboard() { - ExportManager::instance()->doCopyToClipboard(); + QString messageText; + // No URL; we must be copying the whole image to the clipboard + if (mSharedImageURL.isEmpty()) { + ExportManager::instance()->doCopyToClipboard(); + messageText = i18n("The screenshot has been copied to the clipboard."); + } else { + qApp->clipboard()->setText(mSharedImageURL); + mSharedImageURL = QString(); + messageText = i18n("The link has been copied to the clipboard."); + mMessageWidget->removeAction(mCopyUrlToClipboardAction); + } if (SpectacleConfig::instance()->quitAfterSaveOrCopyChecked()) { qApp->setQuitOnLastWindowClosed(false); hide(); QTimer::singleShot(250, qApp, &QApplication::quit); } mMessageWidget->setMessageType(KMessageWidget::Information); - mMessageWidget->setText(i18n("The screenshot has been copied to the clipboard.")); + mMessageWidget->setText(messageText); mMessageWidget->setIcon(QIcon::fromTheme(QStringLiteral("dialog-information"))); mMessageWidget->animatedShow();