diff --git a/panels/notification/osd/osdpanel.cpp b/panels/notification/osd/osdpanel.cpp index b97edb614..94d3c6f52 100644 --- a/panels/notification/osd/osdpanel.cpp +++ b/panels/notification/osd/osdpanel.cpp @@ -47,7 +47,7 @@ bool OsdPanel::init() m_osdTimer = new QTimer(this); m_osdTimer->setInterval(m_interval); m_osdTimer->setSingleShot(true); - QObject::connect(m_osdTimer, &QTimer::timeout, this, &OsdPanel::hideOsd); + QObject::connect(m_osdTimer, &QTimer::timeout, this, &OsdPanel::doneSetting); return DPanel::init(); } @@ -74,6 +74,20 @@ void OsdPanel::ShowOSD(const QString &text) }); } +void OsdPanel::doneSetting() +{ + if (qApp->queryKeyboardModifiers().testFlag(Qt::MetaModifier)) { + m_osdTimer->start(); + return; + } + + int delay = m_osdTimer->interval() - m_osdTimer->remainingTime(); + if (delay < 0) delay = 0; + QTimer::singleShot(delay,this, [this](){ + hideOsd(); + }); +} + void OsdPanel::hideOsd() { m_osdTimer->stop(); diff --git a/panels/notification/osd/osdpanel.h b/panels/notification/osd/osdpanel.h index e2b0e908c..d01334189 100644 --- a/panels/notification/osd/osdpanel.h +++ b/panels/notification/osd/osdpanel.h @@ -35,6 +35,8 @@ public Q_SLOTS: private Q_SLOTS: void hideOsd(); + void doneSetting(); + private: void showOsd(); void setVisible(const bool visible);