aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/config.cpp26
-rw-r--r--src/config.h5
-rw-r--r--src/mainwindow.cpp66
-rw-r--r--src/mainwindow.h4
-rw-r--r--src/savequerydialog.cpp8
-rw-r--r--src/savequerydialog.h2
6 files changed, 30 insertions, 81 deletions
diff --git a/src/config.cpp b/src/config.cpp
index cb6168f..23c7364 100644
--- a/src/config.cpp
+++ b/src/config.cpp
@@ -728,10 +728,6 @@ void Config::loadSavedQueries(const QString &configPath, QSettings &settings)
SavedQuery query;
query.name = name;
query.query = settings.value(name).toString();
- // Pinned, because these are buttons today. A migration that left
- // them unpinned would empty the query row on the first launch
- // after an upgrade, which reads as data loss.
- query.pinned = true;
m_savedQueries.append(query);
}
settings.endGroup();
@@ -804,7 +800,6 @@ void Config::loadSavedQueries(const QString &configPath, QSettings &settings)
SavedQuery query;
query.name = object.value(QStringLiteral("name")).toString();
query.query = object.value(QStringLiteral("query")).toString();
- query.pinned = object.value(QStringLiteral("pinned")).toBool(false);
query.account = object.value(QStringLiteral("account")).toString();
query.generated = object.value(QStringLiteral("generated")).toString();
// A generator carries its own view mode, so "sent" is flat whether or
@@ -833,19 +828,12 @@ void Config::loadSavedQueries(const QString &configPath, QSettings &settings)
continue;
}
- // A stored entry naming a generator now duplicates a BUILT-IN filter of
- // the same name, since item 93 ships all four rather than storing them.
- // 0.19.0 migrated the hardcoded Sent button into exactly such an entry,
- // so every existing install has one.
- //
- // Unpinned, never dropped: the row would otherwise carry two Sent
- // buttons, one the user's to edit and one not. Deleting it would be
- // data loss on a file whose readers are supposed to preserve what they
- // do not own, and an unpin is reversible from the UI.
- if (query.isGenerated() && isKnownGenerator(query.generated))
- query.pinned = false;
-
for (auto it = object.begin(); it != object.end(); ++it) {
+ // `pinned` is listed although nothing reads it any more (item
+ // 94). Dropping it from this list would make it an UNKNOWN field,
+ // which is preserved and written back, and the user chose to strip
+ // it rather than carry it forward. This is the one place a retired
+ // key has to stay named to be forgotten.
static const QStringList known = {
QStringLiteral("name"), QStringLiteral("query"),
QStringLiteral("pinned"), QStringLiteral("account"),
@@ -869,7 +857,7 @@ bool Config::saveSavedQueries() const
// Only what carries information. The file is hand-editable, so a key
// that always holds the same value, or one the generator already
// implies, is just something the reader has to skip past. Same reason
- // `pinned` and `account` are written only when set.
+ // `account` is written only when set.
QJsonObject object;
object.insert(QStringLiteral("name"), query.name);
if (query.isGenerated()) {
@@ -877,8 +865,6 @@ bool Config::saveSavedQueries() const
} else {
object.insert(QStringLiteral("query"), query.query);
}
- if (query.pinned)
- object.insert(QStringLiteral("pinned"), true);
if (!query.account.isEmpty())
object.insert(QStringLiteral("account"), query.account);
// Skipped when the generator already implies it, which loadSavedQueries
diff --git a/src/config.h b/src/config.h
index 3ddd76a..4dcfbf1 100644
--- a/src/config.h
+++ b/src/config.h
@@ -165,11 +165,6 @@ struct SavedQuery
QString name;
QString query;
- /// Renders as a button in the query row; otherwise it lives in the menu.
- /// The two tiers are the point of the flag: a row that shows every saved
- /// query does not scale past a handful.
- bool pinned = false;
-
/// Account KEY, the INI group suffix ("work" from [account.work]), and
/// empty for a query that spans every account.
///
diff --git a/src/mainwindow.cpp b/src/mainwindow.cpp
index 42fe1bf..99eb2a3 100644
--- a/src/mainwindow.cpp
+++ b/src/mainwindow.cpp
@@ -2782,11 +2782,10 @@ void MainWindow::buildSavedQueryRow(QWidget *parent, QVBoxLayout *layout)
// from, since nothing looks them up by name.
m_filterButtons.clear();
- // The built-in filters come first, in their own fixed order, and they are
- // not saved queries: they are shipped, they are not in queries.json, and
- // the user cannot edit or delete them (item 93). They are what the row is
- // FOR; the pinned saved queries below them are the transitional half that
- // item 94 removes.
+ // The built-in filters are the whole row: they are shipped, they are not
+ // in queries.json, and the user cannot edit or delete them (item 93).
+ // Item 94 removed the transitional half, so a saved query is never a
+ // button and the menu is its only home.
for (const SavedQuery &filter : Config::builtinFilters()) {
// Sent with no account configuring a sent folder finds nothing by
// construction. Hidden rather than present and empty, which is what the
@@ -2854,28 +2853,18 @@ void MainWindow::buildSavedQueryRow(QWidget *parent, QVBoxLayout *layout)
box->addWidget(button);
}
- // The user's own saved queries. A pinned one is still a button, beside the
- // filters, until item 94 makes the menu their only home.
- QList<SavedQuery> unpinned;
+ // The user's own saved queries, every one of them in the menu (item 94).
+ // The row is built-in filters only, so nothing has to decide which saved
+ // queries get button real estate.
+ QList<SavedQuery> savedQueries;
for (const SavedQuery &saved : m_config.savedQueries()) {
- // A generator whose accounts configure nothing produces a button that
+ // A generator whose accounts configure nothing produces an entry that
// always finds nothing. Skipped entirely, which is what the hardcoded
// Sent button did and is worth keeping.
if (saved.isGenerated() && m_config.resolvedQuery(saved).isEmpty())
continue;
- if (!saved.pinned) {
- unpinned.append(saved);
- continue;
- }
- auto *button = new QPushButton(saved.name, row);
- // No object name here any more. "sentButton" now belongs to the BUILT-IN
- // Sent filter, and a migrated Sent entry claiming it too would give two
- // buttons one name, so findChild() would return whichever came first.
- connect(button, &QPushButton::clicked, this,
- [this, saved]() { runSavedQuery(saved); });
- addSavedQueryActions(button, saved);
- box->addWidget(button);
+ savedQueries.append(saved);
}
// Everything above is left-aligned; the stretch here pushes what follows
@@ -2887,16 +2876,16 @@ void MainWindow::buildSavedQueryRow(QWidget *parent, QVBoxLayout *layout)
// The overflow menu, and only when something is in it: an empty menu
// button is a control that always does nothing.
- if (!unpinned.isEmpty()) {
+ if (!savedQueries.isEmpty()) {
auto *menuButton = new QPushButton(tr("More queries"), row);
menuButton->setObjectName(QStringLiteral("savedQueryMenuButton"));
auto *menu = new QMenu(menuButton);
- for (const SavedQuery &saved : unpinned) {
+ for (const SavedQuery &saved : savedQueries) {
QAction *action = menu->addAction(saved.name);
// A menu entry has no context menu of its own, so its own submenu
- // carries the same actions; an unpinned query would otherwise be
- // the one thing that cannot be edited or deleted.
+ // carries the same actions; a saved query would otherwise be the
+ // one thing that cannot be edited or deleted.
auto *entryMenu = new QMenu(menu);
// Running the query is an item INSIDE that submenu, and must be:
@@ -2905,7 +2894,8 @@ void MainWindow::buildSavedQueryRow(QWidget *parent, QVBoxLayout *layout)
// only opens the submenu. That shipped, and went unnoticed while
// the menu was the rarely-used half and the user's queries were
// pinned buttons. Item 93 moved every query into the menu, and item
- // 94 makes it their only home.
+ // 94 made it their only home, so this is now the ONLY way to run
+ // one.
auto *run = new QAction(tr("Run"), entryMenu);
run->setObjectName(QStringLiteral("runQuery"));
connect(run, &QAction::triggered, this,
@@ -2927,9 +2917,9 @@ void MainWindow::buildSavedQueryRow(QWidget *parent, QVBoxLayout *layout)
// Nothing on either side of the stretch leaves an empty strip of padding,
// so the row goes away rather than sitting there as a gap. Counted before
- // the stretch was added, since the stretch is always there: an unpinned
- // query with no pinned ones still needs the row for its menu.
- if (contentCount == 0 && unpinned.isEmpty())
+ // the stretch was added, since the stretch is always there: a saved query
+ // with no built-in filters shown still needs the row for its menu.
+ if (contentCount == 0 && savedQueries.isEmpty())
row->hide();
// Connected HERE rather than beside the query bar's other handlers, which
@@ -2959,17 +2949,6 @@ void MainWindow::addSavedQueryActions(QWidget *target, const SavedQuery &saved)
[this, saved]() { editSavedQuery(saved); });
target->addAction(edit);
- auto *pin = new QAction(saved.pinned ? tr("Move to menu")
- : tr("Show as a button"),
- target);
- pin->setObjectName(QStringLiteral("pinQuery"));
- connect(pin, &QAction::triggered, this, [this, saved]() {
- SavedQuery toggled = saved;
- toggled.pinned = !saved.pinned;
- replaceSavedQuery(saved.name, toggled);
- });
- target->addAction(pin);
-
auto *separator = new QAction(target);
separator->setSeparator(true);
target->addAction(separator);
@@ -3182,10 +3161,9 @@ void MainWindow::saveCurrentQuery()
void MainWindow::rebuildSavedQueryRow()
{
- // The row is rebuilt wholesale rather than patched: a new query can be
- // pinned, unpinned, or replace an existing one, and each moves a different
- // widget. Deleting and rebuilding is a handful of buttons and cannot get
- // the three cases wrong.
+ // The row is rebuilt wholesale rather than patched: a query can be added,
+ // deleted or replaced, and each moves a different entry. Deleting and
+ // rebuilding is a handful of widgets and cannot get the cases wrong.
auto *old = findChild<QWidget *>(QStringLiteral("savedQueryRow"));
if (!old)
return;
diff --git a/src/mainwindow.h b/src/mainwindow.h
index 4b1ef8f..951eaa4 100644
--- a/src/mainwindow.h
+++ b/src/mainwindow.h
@@ -446,8 +446,8 @@ private:
/// Builds the row of saved-query buttons, the overflow menu and Sent.
///
/// Its own row since item 23: an unbounded list of buttons sharing the
- /// query row squeezed the field, which is the whole reason for the
- /// pinned/unpinned split.
+ /// query row squeezed the field. Item 94 settled the split the other way,
+ /// so the row is built-in filters and one menu.
void buildSavedQueryRow(QWidget *parent, QVBoxLayout *layout);
/// Runs a saved query, taking its account scope through the dropdown.
diff --git a/src/savequerydialog.cpp b/src/savequerydialog.cpp
index 2d09986..43c226b 100644
--- a/src/savequerydialog.cpp
+++ b/src/savequerydialog.cpp
@@ -18,7 +18,6 @@
#include "savequerydialog.h"
-#include <QCheckBox>
#include <QComboBox>
#include <QDialogButtonBox>
#include <QFormLayout>
@@ -45,7 +44,6 @@ SaveQueryDialog::SaveQueryDialog(const Config &config, const QString &query,
SavedQuery initial;
initial.query = query;
initial.account = accountKey;
- initial.pinned = true;
setWindowTitle(tr("Save query"));
build(initial);
}
@@ -101,11 +99,6 @@ void SaveQueryDialog::build(const SavedQuery &initial)
m_account->setCurrentIndex(index >= 0 ? index : 0);
form->addRow(tr("Account"), m_account);
- m_pinned = new QCheckBox(tr("Show as a button"), this);
- m_pinned->setObjectName(QStringLiteral("saveQueryPinned"));
- m_pinned->setChecked(initial.pinned);
- form->addRow(QString(), m_pinned);
-
layout->addLayout(form);
// Says what is about to happen rather than refusing the name. Overwriting
@@ -162,7 +155,6 @@ SavedQuery SaveQueryDialog::savedQuery() const
saved.name = m_name->text().trimmed();
saved.query = m_query->text().trimmed();
saved.account = m_account->currentData().toString();
- saved.pinned = m_pinned->isChecked();
// Carried through rather than re-derived: an edit must not turn a
// generated entry into a plain one holding a snapshot of what it happened
// to resolve to today.
diff --git a/src/savequerydialog.h b/src/savequerydialog.h
index d859254..a91654e 100644
--- a/src/savequerydialog.h
+++ b/src/savequerydialog.h
@@ -22,7 +22,6 @@
#include "config.h"
-class QCheckBox;
class QComboBox;
class QLabel;
class QLineEdit;
@@ -73,7 +72,6 @@ private:
QLineEdit *m_name = nullptr;
QLineEdit *m_query = nullptr;
QComboBox *m_account = nullptr;
- QCheckBox *m_pinned = nullptr;
QPushButton *m_ok = nullptr;
QLabel *m_notice = nullptr;
};