diff --git a/panels/notification/osd/displaymode/package/main.qml b/panels/notification/osd/displaymode/package/main.qml index 9f654ad20..c418c8dbc 100644 --- a/panels/notification/osd/displaymode/package/main.qml +++ b/panels/notification/osd/displaymode/package/main.qml @@ -26,7 +26,9 @@ AppletItem { Applet.doAction() } } else if (osdType === "SwitchMonitors") { - Applet.next() + if (Panel.lastOsdType() === osdType) { + Applet.next() + } } return true diff --git a/panels/notification/osd/kblayout/package/main.qml b/panels/notification/osd/kblayout/package/main.qml index 9fda2bf3f..74fe2b7de 100644 --- a/panels/notification/osd/kblayout/package/main.qml +++ b/panels/notification/osd/kblayout/package/main.qml @@ -20,7 +20,9 @@ AppletItem { { if (match(osdType)) { Applet.sync() - Applet.next() + if (Panel.lastOsdType() === osdType) { + Applet.next() + } return true } return false diff --git a/panels/notification/osd/osdpanel.cpp b/panels/notification/osd/osdpanel.cpp index ff351da55..b97edb614 100644 --- a/panels/notification/osd/osdpanel.cpp +++ b/panels/notification/osd/osdpanel.cpp @@ -78,6 +78,7 @@ void OsdPanel::hideOsd() { m_osdTimer->stop(); setVisible(false); + updateLastOsdType({}); } void OsdPanel::showOsd() @@ -86,6 +87,7 @@ void OsdPanel::showOsd() m_osdTimer->start(); setVisible(true); + updateLastOsdType(m_osdType); } void OsdPanel::setVisible(const bool visible) @@ -102,6 +104,18 @@ void OsdPanel::setOsdType(const QString &osdType) emit osdTypeChanged(m_osdType); } +void OsdPanel::updateLastOsdType(const QString &osdType) +{ + if (m_lastOsdType != osdType) { + m_lastOsdType = osdType; + } +} + +QString OsdPanel::lastOsdType() const +{ + return m_lastOsdType; +} + D_APPLET_CLASS(OsdPanel) } diff --git a/panels/notification/osd/osdpanel.h b/panels/notification/osd/osdpanel.h index 11d1c2e9b..e2b0e908c 100644 --- a/panels/notification/osd/osdpanel.h +++ b/panels/notification/osd/osdpanel.h @@ -24,6 +24,8 @@ class OsdPanel : public DS_NAMESPACE::DPanel bool visible() const; QString osdType() const; + Q_INVOKABLE QString lastOsdType() const; + public Q_SLOTS: void ShowOSD(const QString &text); @@ -37,11 +39,13 @@ private Q_SLOTS: void showOsd(); void setVisible(const bool visible); void setOsdType(const QString &osdType); + void updateLastOsdType(const QString &osdType); private: bool m_visible = false; QTimer *m_osdTimer = nullptr; QString m_osdType; + QString m_lastOsdType; int m_interval {2000}; }; diff --git a/panels/notification/osd/windoweffect/package/main.qml b/panels/notification/osd/windoweffect/package/main.qml index e81c8cb45..c32a2cc72 100644 --- a/panels/notification/osd/windoweffect/package/main.qml +++ b/panels/notification/osd/windoweffect/package/main.qml @@ -49,9 +49,11 @@ AppletItem { function update(osdType) { if (match(osdType)) { - Qt.callLater(function() { - control.selectIndex = (control.selectIndex + 1) % effectModel.count - }) + if (Panel.lastOsdType() === osdType) { + Qt.callLater(function() { + control.selectIndex = (control.selectIndex + 1) % effectModel.count + }) + } return true } return false