Make BannerWidget's dropdown icon more robust (#5676)

* Make BannerWidget's dropdown icon more robust

* use isHidden

Otherwise, it doesn't work correctly if the BannerWidget is offscreen

* don't show icon if there's no buddy
This commit is contained in:
RickyRister 2025-03-02 06:26:03 -08:00 committed by GitHub
parent ec452aabe2
commit a7e8c1f59b
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
2 changed files with 15 additions and 12 deletions

View file

@ -28,6 +28,8 @@ BannerWidget::BannerWidget(QWidget *parent, const QString &text, Qt::Orientation
// Set minimum height for the widget
setMinimumHeight(50);
connect(this, &BannerWidget::buddyVisibilityChanged, this, &BannerWidget::toggleBuddyVisibility);
updateDropdownIconState();
}
void BannerWidget::mousePressEvent(QMouseEvent *event)
@ -46,23 +48,27 @@ void BannerWidget::setText(const QString &text) const
void BannerWidget::setClickable(bool _clickable)
{
clickable = _clickable;
setDropdownIconState(true);
updateDropdownIconState();
}
void BannerWidget::setBuddy(QWidget *_buddy)
{
buddy = _buddy;
updateDropdownIconState();
}
void BannerWidget::toggleBuddyVisibility() const
{
if (buddy) {
buddy->setVisible(!buddy->isVisible());
setDropdownIconState(buddy->isVisible());
} else {
setDropdownIconState(false);
updateDropdownIconState();
}
}
void BannerWidget::setDropdownIconState(bool expanded) const
void BannerWidget::updateDropdownIconState() const
{
if (clickable) {
iconLabel->setPixmap(DropdownIconPixmapGenerator::generatePixmap(24, expanded));
if (clickable && buddy) {
iconLabel->setPixmap(DropdownIconPixmapGenerator::generatePixmap(24, !buddy->isHidden()));
} else {
// we cannot directly hide the iconLabel, since it's needed to center the text; set an empty image instead
iconLabel->setPixmap(QPixmap());

View file

@ -17,10 +17,7 @@ public:
void mousePressEvent(QMouseEvent *event) override;
void setText(const QString &text) const;
void setClickable(bool _clickable);
void setBuddy(QWidget *_buddy)
{
buddy = _buddy;
}
void setBuddy(QWidget *_buddy);
QString getText() const
{
return bannerLabel->text();
@ -40,7 +37,7 @@ signals:
void buddyVisibilityChanged();
private slots:
void toggleBuddyVisibility() const;
void setDropdownIconState(bool expanded) const;
void updateDropdownIconState() const;
};
#endif // BANNER_WIDGET_H