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 @@ -23,6 +23,7 @@ #include "SettingsPage.h" class QCheckBox; +class QRadioButton; class GeneralOptionsPage : public SettingsPage { @@ -43,7 +44,8 @@ private: - QCheckBox *mRememberRect; + QRadioButton* mRememberAlways; + QRadioButton* mRememberUntilClosed; QCheckBox *mUseLightBackground; QCheckBox *mShowMagnifier; }; 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 @@ -22,34 +22,50 @@ #include "SpectacleConfig.h" #include +#include +#include #include #include -#include +#include GeneralOptionsPage::GeneralOptionsPage(QWidget *parent) : SettingsPage(parent) { QFormLayout *mainLayout = new QFormLayout(this); setLayout(mainLayout); // Rectangular Region settings + KTitleWidget *titleWidget = new KTitleWidget(this); + titleWidget->setText(i18n("Rectangular Region:")); + titleWidget->setLevel(2); + mainLayout->addRow(titleWidget); // use light background mUseLightBackground = new QCheckBox(i18n("Use light background"), this); connect(mUseLightBackground, &QCheckBox::toggled, this, &GeneralOptionsPage::markDirty); - mainLayout->addRow(i18n("Rectangular Region:"), mUseLightBackground); - - // remember Rectangular Region box - mRememberRect = new QCheckBox(i18n("Remember selected area"), this); - connect(mRememberRect, &QCheckBox::toggled, this, &GeneralOptionsPage::markDirty); - mainLayout->addRow(QString(), mRememberRect); + mainLayout->addRow(i18n("General:"), mUseLightBackground); // show magnifier mShowMagnifier = new QCheckBox(i18n("Show magnifier"), this); connect(mShowMagnifier, &QCheckBox::toggled, this, &GeneralOptionsPage::markDirty); mainLayout->addRow(QString(), mShowMagnifier); + // remember Rectangular Region box + QButtonGroup* rememberGroup = new QButtonGroup(this); + rememberGroup->setExclusive(true); + QRadioButton* neverButton = new QRadioButton(i18n("Never"), this); + mRememberAlways = new QRadioButton(i18n("Always"), this); + mRememberUntilClosed = new QRadioButton(i18n("Until Spectacle is closed"), this); + rememberGroup->addButton(neverButton); + rememberGroup->addButton(mRememberAlways); + rememberGroup->addButton(mRememberUntilClosed); + neverButton->setChecked(true); + connect(rememberGroup, static_cast(&QButtonGroup::buttonToggled), this, &GeneralOptionsPage::markDirty); + mainLayout->addRow(i18n("Remember selected area:"), neverButton); + mainLayout->addRow(QString(), mRememberAlways); + mainLayout->addRow(QString(), mRememberUntilClosed ); + // read in the data resetChanges(); } @@ -64,7 +80,8 @@ SpectacleConfig *cfgManager = SpectacleConfig::instance(); cfgManager->setUseLightRegionMaskColour(mUseLightBackground->checkState() == Qt::Checked); - cfgManager->setRememberLastRectangularRegion(mRememberRect->checkState() == Qt::Checked); + cfgManager->setRememberLastRectangularRegion(mRememberUntilClosed->isChecked() || mRememberAlways->isChecked()); + cfgManager->setAlwaysRememberRegion (mRememberAlways->isChecked()); cfgManager->setShowMagnifierChecked(mShowMagnifier->checkState() == Qt::Checked); mChangesMade = false; @@ -75,7 +92,8 @@ SpectacleConfig *cfgManager = SpectacleConfig::instance(); mUseLightBackground->setChecked(cfgManager->useLightRegionMaskColour()); - mRememberRect->setChecked(cfgManager->rememberLastRectangularRegion()); + mRememberUntilClosed->setChecked(cfgManager->rememberLastRectangularRegion()); + mRememberAlways->setChecked(cfgManager->alwaysRememberRegion()); mShowMagnifier->setChecked(cfgManager->showMagnifierChecked()); mChangesMade = false; diff --git a/src/SpectacleConfig.h b/src/SpectacleConfig.h --- a/src/SpectacleConfig.h +++ b/src/SpectacleConfig.h @@ -96,6 +96,9 @@ bool rememberLastRectangularRegion() const; void setRememberLastRectangularRegion(bool enabled); + bool alwaysRememberRegion() const; + void setAlwaysRememberRegion(bool enabled); + bool useLightRegionMaskColour() const; void setUseLightRegionMaskColour(bool enabled); diff --git a/src/SpectacleConfig.cpp b/src/SpectacleConfig.cpp --- a/src/SpectacleConfig.cpp +++ b/src/SpectacleConfig.cpp @@ -215,6 +215,18 @@ mGuiConfig.sync(); } +bool SpectacleConfig::alwaysRememberRegion() const +{ + // Default Value is for compatibility reasons as the old behavior was always to remember across restarts + return mGuiConfig.readEntry(QStringLiteral("alwaysRememberRegion"), rememberLastRectangularRegion()); +} + +void SpectacleConfig::setAlwaysRememberRegion (bool enabled) +{ + mGuiConfig.writeEntry(QStringLiteral("alwaysRememberRegion"), enabled); + mGuiConfig.sync(); +} + // use light region mask colour bool SpectacleConfig::useLightRegionMaskColour() const diff --git a/src/SpectacleCore.cpp b/src/SpectacleCore.cpp --- a/src/SpectacleCore.cpp +++ b/src/SpectacleCore.cpp @@ -84,6 +84,12 @@ delayMsec = 0; } + //Reset last region if it should not be remembered across restarts + SpectacleConfig* cfg = SpectacleConfig::instance(); + if(!cfg->alwaysRememberRegion()) { + cfg->setCropRegion(QRect()); + } + connect(mExportManager, &ExportManager::errorMessage, this, &SpectacleCore::showErrorMessage); connect(this, &SpectacleCore::errorMessage, this, &SpectacleCore::showErrorMessage); connect(mImageGrabber, &ImageGrabber::pixmapChanged, this, &SpectacleCore::screenshotUpdated);