diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/config.cpp | 7 | ||||
| -rw-r--r-- | src/mainwindow.cpp | 31 |
2 files changed, 35 insertions, 3 deletions
diff --git a/src/config.cpp b/src/config.cpp index ece1fb9..0b7fe86 100644 --- a/src/config.cpp +++ b/src/config.cpp @@ -719,7 +719,12 @@ SavedQuery Config::builtinFilter(const QString &generator) } else if (generator == QStringLiteral("inbox")) { filter.name = tr("Inbox"); } else if (generator == QStringLiteral("flagged")) { - filter.name = tr("Flagged"); + // "Important", matching the `flag` action, which item 57 renamed from + // "Flag" for exactly this reason. Shipping the filter as "Flagged" + // beside it put the same tag under two names in one window. The + // GENERATOR stays `flagged`: that string is stored in queries.json and + // matched against a closed set, so it is wire format, not a label. + filter.name = tr("Important"); } else if (generator == QStringLiteral("sent")) { filter.name = tr("Sent"); // Messages rather than threads, and the only filter that sets this. A diff --git a/src/mainwindow.cpp b/src/mainwindow.cpp index bf1a33b..4343479 100644 --- a/src/mainwindow.cpp +++ b/src/mainwindow.cpp @@ -1731,11 +1731,38 @@ void MainWindow::buildSavedQueryRow(QWidget *parent, QVBoxLayout *layout) == Config::matchNothingQuery()) continue; - auto *button = new QPushButton(filter.name, row); + // A QToolButton, like the Save button at the other end of the row, so + // the two shipped controls carry icons the same way. The user's own + // queries stay plain QPushButtons: they have no icon to carry and + // nothing to say about which is which. + auto *button = new QToolButton(row); + button->setText(filter.name); // A stable object name per filter, so a test finds the button without // depending on the label, which is translated. button->setObjectName(filter.generated + QStringLiteral("Button")); - connect(button, &QPushButton::clicked, this, + + // Theme icons, not the shipped SVGs in Marks: item 70's split is that + // the panes are ours and the chrome is the system's, and the query row + // is chrome. A name the running theme lacks degrades to text on its + // own, which is why nothing here checks whether it resolved. + // + // mail-mark-important matches the `flag` action's own icon, since both + // reach the same tag: the filter finds what the action marks. + static const QHash<QString, QString> filterIcons = { + { QStringLiteral("unread"), QStringLiteral("mail-mark-unread") }, + { QStringLiteral("inbox"), QStringLiteral("mail-inbox") }, + { QStringLiteral("flagged"), QStringLiteral("mail-mark-important") }, + { QStringLiteral("sent"), QStringLiteral("mail-sent") }, + }; + button->setIcon( + QIcon::fromTheme(filterIcons.value(filter.generated))); + + // Icon AND text, for the reason the Save button records: this row is a + // row of text buttons, so an icon on its own reads as a different kind + // of control than it is. + button->setToolButtonStyle(Qt::ToolButtonTextBesideIcon); + + connect(button, &QToolButton::clicked, this, [this, filter]() { runFilter(filter); }); box->addWidget(button); } |
