NotificationBox: Add option to hide notification if reference widget is deactivated

This commit is contained in:
Abdullah Tahiri
2023-03-21 08:36:16 +01:00
committed by abdullahtahiriyo
parent f0883512d5
commit 49966ac84d
3 changed files with 17 additions and 2 deletions

View File

@@ -997,7 +997,8 @@ void NotificationArea::showInNotificationArea()
pImp->notificationExpirationTime,
pImp->minimumOnScreenTime,
NotificationBox::OnlyIfReferenceActive |
NotificationBox::RestrictAreaToReference,
NotificationBox::RestrictAreaToReference |
NotificationBox::HideIfReferenceWidgetDeactivated,
pImp->notificationWidth);
}
}

View File

@@ -76,6 +76,8 @@ public:
/// Set the windowrect defining an area to which the label should be constrained
void setTipRect(const QRect &restrictionarea);
void setHideIfReferenceWidgetDeactivated(bool on);
/// The instance
static qobject_delete_later_unique_ptr<NotificationLabel> instance;
@@ -95,6 +97,7 @@ private:
QTimer expireTimer;
QRect restrictionArea;
bool hideIfReferenceWidgetDeactivated;
};
qobject_delete_later_unique_ptr<NotificationLabel> NotificationLabel::instance = nullptr;
@@ -248,7 +251,8 @@ bool NotificationLabel::eventFilter(QObject* o, QEvent* e)
}
break;
case QEvent::WindowDeactivate:
hideNotificationImmediately();
if(hideIfReferenceWidgetDeactivated)
hideNotificationImmediately();
break;
default:
@@ -302,6 +306,11 @@ void NotificationLabel::setTipRect(const QRect &restrictionarea)
restrictionArea = restrictionarea;
}
void NotificationLabel::setHideIfReferenceWidgetDeactivated(bool on)
{
hideIfReferenceWidgetDeactivated = on;
}
bool NotificationLabel::notificationLabelChanged(const QString& text)
{
return NotificationLabel::instance->text() != text;
@@ -341,6 +350,8 @@ void NotificationBox::showText(const QPoint& pos, const QString& text, QWidget *
// If the label has changed, reuse the one that is showing (removes flickering)
if (NotificationLabel::instance->notificationLabelChanged(text)) {
NotificationLabel::instance->setTipRect(restrictionarea);
NotificationLabel::instance->setHideIfReferenceWidgetDeactivated(options &
Options::HideIfReferenceWidgetDeactivated);
NotificationLabel::instance->reuseNotification(text, displayTime, pos, width);
NotificationLabel::instance->placeNotificationLabel(pos);
}
@@ -360,6 +371,8 @@ void NotificationBox::showText(const QPoint& pos, const QString& text, QWidget *
width);// sets NotificationLabel::instance to itself
NotificationLabel::instance->setTipRect(restrictionarea);
NotificationLabel::instance->setHideIfReferenceWidgetDeactivated(options &
Options::HideIfReferenceWidgetDeactivated);
NotificationLabel::instance->placeNotificationLabel(pos);
NotificationLabel::instance->setObjectName(QLatin1String("NotificationBox_label"));

View File

@@ -53,6 +53,7 @@ public:
None = 0x0,
RestrictAreaToReference = 0x1,
OnlyIfReferenceActive = 0x2,
HideIfReferenceWidgetDeactivated = 0x4,
};
/** Shows a non-intrusive notification.