diff --git a/src/Gui/SettingsDialog/GeneralOptionsPage.h b/src/Gui/SettingsDialog/GeneralOptionsPage.h --- a/src/Gui/SettingsDialog/GeneralOptionsPage.h +++ b/src/Gui/SettingsDialog/GeneralOptionsPage.h @@ -45,9 +45,13 @@ private: - QButtonGroup* mPrintKeyActionGroup; - QRadioButton* mRememberAlways; - QRadioButton* mRememberUntilClosed; + QButtonGroup *mPrintKeyActionGroup; + QRadioButton *mRememberAlways; + QRadioButton *mRememberUntilClosed; + QButtonGroup *mCopyToClipboardGroup; + QRadioButton *nothingToCopy; + QRadioButton *copySaveLocationToClipboard; + QRadioButton *copyFileToClipboard; QCheckBox *mUseLightBackground; QCheckBox *mShowMagnifier; QCheckBox *mReleaseToCapture; diff --git a/src/Gui/SettingsDialog/GeneralOptionsPage.cpp b/src/Gui/SettingsDialog/GeneralOptionsPage.cpp --- a/src/Gui/SettingsDialog/GeneralOptionsPage.cpp +++ b/src/Gui/SettingsDialog/GeneralOptionsPage.cpp @@ -57,6 +57,23 @@ mainLayout->addRow(QString(), focusWindow); } + mainLayout->addItem(new QSpacerItem(0, 18, QSizePolicy::Fixed, QSizePolicy::Fixed)); + + // copy file or file location to clipboard after taking a screenshot + mCopyToClipboardGroup = new QButtonGroup(this); + mCopyToClipboardGroup->setExclusive(true); + nothingToCopy = new QRadioButton(i18n("Don't change the clipboard content"), this); + copyFileToClipboard = new QRadioButton(i18n("Copy image to clipboard"), this); + copySaveLocationToClipboard = new QRadioButton(i18n("Copy file location to clipboard after saving"), this); + mCopyToClipboardGroup->addButton(nothingToCopy); + mCopyToClipboardGroup->addButton(copySaveLocationToClipboard); + mCopyToClipboardGroup->addButton(copyFileToClipboard); + nothingToCopy->setChecked(true); + connect(mCopyToClipboardGroup, qOverload(&QButtonGroup::buttonToggled), this, &GeneralOptionsPage::markDirty); + mainLayout->addRow(i18n("After taking screenshot:"), nothingToCopy); + mainLayout->addRow(QString(), copySaveLocationToClipboard); + mainLayout->addRow(QString(), copyFileToClipboard); + // Rectangular Region settings KTitleWidget *titleWidget = new KTitleWidget(this); titleWidget->setText(i18n("Rectangular Region")); @@ -114,6 +131,8 @@ cfgManager->setShowMagnifierChecked(mShowMagnifier->checkState() == Qt::Checked); cfgManager->setUseReleaseToCaptureChecked(mReleaseToCapture->checkState() == Qt::Checked); cfgManager->setPrintKeyActionRunning(static_cast(mPrintKeyActionGroup->checkedId())); + cfgManager->setCopySaveLocationToClipboard(copySaveLocationToClipboard->isChecked()); + cfgManager->setCopyFileToClipboard(copyFileToClipboard->isChecked()); mChangesMade = false; } @@ -128,6 +147,8 @@ mShowMagnifier->setChecked(cfgManager->showMagnifierChecked()); mReleaseToCapture->setChecked(cfgManager->useReleaseToCapture()); mPrintKeyActionGroup->button(cfgManager->printKeyActionRunning())->setChecked(true); + copySaveLocationToClipboard->setChecked(cfgManager->copySaveLocationToClipboard()); + copyFileToClipboard->setChecked(cfgManager->copyFileToClipboard()); mChangesMade = false; } diff --git a/src/Gui/SettingsDialog/SaveOptionsPage.h b/src/Gui/SettingsDialog/SaveOptionsPage.h --- a/src/Gui/SettingsDialog/SaveOptionsPage.h +++ b/src/Gui/SettingsDialog/SaveOptionsPage.h @@ -53,7 +53,6 @@ QLineEdit *mSaveNameFormat; KUrlRequester *mUrlRequester; QComboBox *mSaveImageFormat; - QCheckBox *mCopyPathToClipboard; QSlider *mQualitySlider; QLabel *mPreviewLabel; }; diff --git a/src/Gui/SettingsDialog/SaveOptionsPage.cpp b/src/Gui/SettingsDialog/SaveOptionsPage.cpp --- a/src/Gui/SettingsDialog/SaveOptionsPage.cpp +++ b/src/Gui/SettingsDialog/SaveOptionsPage.cpp @@ -46,12 +46,6 @@ connect(mUrlRequester, &KUrlRequester::textChanged, this, &SaveOptionsPage::markDirty); mainLayout->addRow(i18n("Save Location:"), mUrlRequester); - // copy file location to clipboard after saving - mCopyPathToClipboard = new QCheckBox(i18n("Copy file location to clipboard after saving"), this); - connect(mCopyPathToClipboard, &QCheckBox::toggled, this, &SaveOptionsPage::markDirty); - mainLayout->addRow(QString(), mCopyPathToClipboard); - - mainLayout->addItem(new QSpacerItem(0, 18, QSizePolicy::Fixed, QSizePolicy::Fixed)); // Compression quality slider and current value display @@ -167,7 +161,6 @@ cfgManager->setDefaultSaveLocation(mUrlRequester->url()); cfgManager->setAutoSaveFilenameFormat(mSaveNameFormat->text()); cfgManager->setSaveImageFormat(mSaveImageFormat->currentText().toLower()); - cfgManager->setCopySaveLocationToClipboard(mCopyPathToClipboard->checkState() == Qt::Checked); cfgManager->setCompressionQuality(mQualitySlider->value()); // done @@ -185,7 +178,6 @@ mSaveNameFormat->setText(cfgManager->autoSaveFilenameFormat()); mUrlRequester->setUrl(cfgManager->defaultSaveLocation()); - mCopyPathToClipboard->setChecked(cfgManager->copySaveLocationToClipboard()); mQualitySlider->setSliderPosition(cfgManager->compressionQuality()); // read in the save image format and calculate its index diff --git a/src/SpectacleConfig.h b/src/SpectacleConfig.h --- a/src/SpectacleConfig.h +++ b/src/SpectacleConfig.h @@ -126,6 +126,9 @@ QUrl defaultSaveLocation() const; void setDefaultSaveLocation(const QUrl &location); + bool copyFileToClipboard() const; + void setCopyFileToClipboard(bool enabled); + bool copySaveLocationToClipboard() const; void setCopySaveLocationToClipboard(bool enabled); diff --git a/src/SpectacleConfig.cpp b/src/SpectacleConfig.cpp --- a/src/SpectacleConfig.cpp +++ b/src/SpectacleConfig.cpp @@ -358,6 +358,19 @@ mGeneralConfig.sync(); } +// copy file to clipboard after the screenshot has been made + +bool SpectacleConfig::copyFileToClipboard() const +{ + return mGeneralConfig.readEntry(QStringLiteral("copyFileToClipboard"), false); +} + +void SpectacleConfig::setCopyFileToClipboard(bool enabled) +{ + mGeneralConfig.writeEntry(QStringLiteral("copyFileToClipboard"), enabled); + mGeneralConfig.sync(); +} + // copy file location to clipboard after saving bool SpectacleConfig::copySaveLocationToClipboard() const diff --git a/src/SpectacleCore.cpp b/src/SpectacleCore.cpp --- a/src/SpectacleCore.cpp +++ b/src/SpectacleCore.cpp @@ -262,6 +262,9 @@ break; case StartMode::Gui: mMainWindow->setScreenshotAndShow(thePixmap); + if (SpectacleConfig::instance()->copyFileToClipboard()) { + lExportManager->doCopyToClipboard(true); + } } } @@ -313,26 +316,26 @@ // a speaking message is prettier than a URL, special case for copy to clipboard and the default pictures location const QString &lSavePath = theSavedAt.adjusted(QUrl::RemoveFilename | QUrl::StripTrailingSlash).path(); - if (mCopyToClipboard) { + if (mCopyToClipboard || SpectacleConfig::instance()->copyFileToClipboard()) { lNotify->setText(i18n("A screenshot was saved to your clipboard.")); } else if (lSavePath == QStandardPaths::writableLocation(QStandardPaths::PicturesLocation)) { lNotify->setText(i18nc("Placeholder is filename", "A screenshot was saved as '%1' to your Pictures folder.", theSavedAt.fileName())); } else { lNotify->setText(i18n("A screenshot was saved as '%1' to '%2'.", theSavedAt.fileName(), lSavePath)); } - if (!mCopyToClipboard) { + if (!mCopyToClipboard && !SpectacleConfig::instance()->copyFileToClipboard()) { lNotify->setUrls({theSavedAt}); lNotify->setDefaultAction(i18nc("Open the screenshot we just saved", "Open")); connect(lNotify, QOverload::of(&KNotification::activated), this, [this, theSavedAt](uint index) { if (index == 0) { new KRun(theSavedAt, nullptr); QTimer::singleShot(250, this, &SpectacleCore::allDone); } }); + connect(lNotify, &QObject::destroyed, this, &SpectacleCore::allDone); } - connect(lNotify, &QObject::destroyed, this, &SpectacleCore::allDone); lNotify->sendEvent(); }