diff --git a/src/Gui/KSMainWindow.h b/src/Gui/KSMainWindow.h --- a/src/Gui/KSMainWindow.h +++ b/src/Gui/KSMainWindow.h @@ -68,6 +68,7 @@ void showPreferencesDialog(); void showImageSharedFeedback(bool error, const QString &message); void sendToClipboard(); + void sendSharedImageLinkToClipboard(); void init(); void setDefaultSaveAction(); void save(); @@ -101,6 +102,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(sendSharedImageLinkToClipboard()), this); + mCopyUrlToClipboardAction->setText(i18n("Copy Link")); + mCopyUrlToClipboardAction->setToolTip(i18n("Copy the shared image's link to the clipboard")); + // layouts mDivider->setFrameShape(QFrame::HLine); @@ -362,6 +370,8 @@ if (message.isEmpty()) { showInlineMessage(i18n("Image shared"), KMessageWidget::Positive); } else { + mSharedImageURL = message; + mMessageWidget->addAction(mCopyUrlToClipboardAction); showInlineMessage(i18n("You can find the shared image at: %1", message), KMessageWidget::Positive, MessageDuration::Persistent); } @@ -372,12 +382,27 @@ { ExportManager::instance()->doCopyToClipboard(); + // Remove the "Copy Link" button, if it's there + // No effect if it's not + mMessageWidget->removeAction(mCopyUrlToClipboardAction); + SpectacleConfig::instance()->quitAfterSaveOrCopyChecked() ? quit() : showInlineMessage(i18n("The screenshot has been copied to the clipboard."), KMessageWidget::Information); } +void KSMainWindow::sendSharedImageLinkToClipboard() +{ + QApplication::clipboard()->setText(mSharedImageURL); + + SpectacleConfig::instance()->quitAfterSaveOrCopyChecked() + ? quit() + : showInlineMessage(i18n("The link has been copied to the clipboard."), + KMessageWidget::Information); + mMessageWidget->removeAction(mCopyUrlToClipboardAction); +} + void KSMainWindow::showPreferencesDialog() { SettingsDialog prefDialog(this);