diff options
| author | Danilo M. <danix@danix.xyz> | 2026-08-14 12:49:37 +0200 |
|---|---|---|
| committer | Danilo M. <danix@danix.xyz> | 2026-08-14 12:49:37 +0200 |
| commit | 7e1cabf49c03c1e0c2926dcfcf82adedbf98940e (patch) | |
| tree | 624dd47cea8d1faa0db7cbf4d04fce6bef6bf906 /src/tagstrip.h | |
| parent | 83f42ab460820e9fd1b96653e14c08b5d51a2166 (diff) | |
| download | qtmaildir-7e1cabf49c03c1e0c2926dcfcf82adedbf98940e.tar.gz qtmaildir-7e1cabf49c03c1e0c2926dcfcf82adedbf98940e.zip | |
feat(tags): hit-test a chip in the tag strip
chipRectAt() is the single source of a chip's geometry, used by paintEvent and
by the hit test, so the drawn chip and the clickable chip cannot drift.
The +N chip yields nothing: it stands for a list of tags rather than one, so
there is no single value a search could be built from.
Diffstat (limited to 'src/tagstrip.h')
| -rw-r--r-- | src/tagstrip.h | 23 |
1 files changed, 23 insertions, 0 deletions
diff --git a/src/tagstrip.h b/src/tagstrip.h index 4102bed..f59233b 100644 --- a/src/tagstrip.h +++ b/src/tagstrip.h @@ -18,10 +18,12 @@ #pragma once +#include <QRect> #include <QStringList> #include <QWidget> class TagColors; +class QContextMenuEvent; /// One row of tag chips under the message pane. /// @@ -48,9 +50,30 @@ public: QStringList visibleTags() const { return m_visible; } QStringList hiddenTags() const { return m_hidden; } + /// The rect of the visible chip at `index`, empty when out of range. + /// + /// The SAME function paintEvent lays out from, so what is drawn and what + /// is clickable cannot drift. `CardDelegate::expanderRectFor` exists for + /// this reason and this follows it. + QRect chipRectAt(int index) const; + + /// The tag under `point`, empty when the point is on no chip. + /// + /// The trailing "+N" chip yields an empty string: it stands for a list of + /// tags rather than for one, so there is nothing a search could name. + QString chipAt(const QPoint &point) const; + +signals: + /// A visible chip was right-clicked. `globalPos` is where to pop a menu. + /// + /// The strip does not build the menu itself: what a tag can do belongs to + /// the window, which owns the query bar and the actions. + void tagContextMenuRequested(const QString &tag, const QPoint &globalPos); + protected: void paintEvent(QPaintEvent *event) override; void resizeEvent(QResizeEvent *event) override; + void contextMenuEvent(QContextMenuEvent *event) override; private: /// Recomputes the visible/hidden split for the current width. |
