aboutsummaryrefslogtreecommitdiffstats
path: root/src/tagstrip.h
diff options
context:
space:
mode:
authorDanilo M. <danix@danix.xyz>2026-08-14 12:49:37 +0200
committerDanilo M. <danix@danix.xyz>2026-08-14 12:49:37 +0200
commit7e1cabf49c03c1e0c2926dcfcf82adedbf98940e (patch)
tree624dd47cea8d1faa0db7cbf4d04fce6bef6bf906 /src/tagstrip.h
parent83f42ab460820e9fd1b96653e14c08b5d51a2166 (diff)
downloadqtmaildir-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.h23
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.