diff --git a/kded/daemon.h b/kded/daemon.h --- a/kded/daemon.h +++ b/kded/daemon.h @@ -79,6 +79,7 @@ QTimer* m_changeCompressor; QTimer* m_saveTimer; QTimer* m_lidClosedTimer; + KScreen::OsdManager *m_osdManager; }; #endif /*KSCREEN_DAEMON_H*/ diff --git a/kded/daemon.cpp b/kded/daemon.cpp --- a/kded/daemon.cpp +++ b/kded/daemon.cpp @@ -95,7 +95,7 @@ new KScreenAdaptor(this); // Initialize OSD manager to register its dbus interface - KScreen::OsdManager::self(); + m_osdManager = new KScreen::OsdManager(this); m_saveTimer->setInterval(300); m_saveTimer->setSingleShot(true); @@ -213,11 +213,11 @@ { if (m_monitoredConfig->connectedOutputs().count() < 2) { - KScreen::OsdManager::self()->hideOsd(); + m_osdManager->hideOsd(); doApplyConfig(Generator::self()->idealConfig(m_monitoredConfig)); } else { qCDebug(KSCREEN_KDED) << "Getting ideal config from user via OSD..."; - auto action = KScreen::OsdManager::self()->showActionSelector(); + auto action = m_osdManager->showActionSelector(); connect(action, &KScreen::OsdAction::selected, this, &KScreenDaemon::applyOsdAction); } @@ -282,14 +282,14 @@ void KScreenDaemon::showOutputIdentifier() { - KScreen::OsdManager::self()->showOutputIdentifiers(); + m_osdManager->showOutputIdentifiers(); } void KScreenDaemon::displayButton() { qCDebug(KSCREEN_KDED) << "displayBtn triggered"; - auto action = KScreen::OsdManager::self()->showActionSelector(); + auto action = m_osdManager->showActionSelector(); connect(action, &KScreen::OsdAction::selected, this, &KScreenDaemon::applyOsdAction); } diff --git a/kded/osdmanager.h b/kded/osdmanager.h --- a/kded/osdmanager.h +++ b/kded/osdmanager.h @@ -59,21 +59,18 @@ Q_CLASSINFO("D-Bus Interface", "org.kde.kscreen.osdService") public: + OsdManager(QObject *parent = nullptr); ~OsdManager() override; - static OsdManager* self(); public Q_SLOTS: void showOutputIdentifiers(); void showOsd(const QString &icon, const QString &text); void hideOsd(); OsdAction *showActionSelector(); private: - OsdManager(QObject *parent = nullptr); void slotIdentifyOutputs(KScreen::ConfigOperation *op); QMap m_osds; - - static OsdManager* s_instance; QTimer* m_cleanupTimer; }; diff --git a/kded/osdmanager.cpp b/kded/osdmanager.cpp --- a/kded/osdmanager.cpp +++ b/kded/osdmanager.cpp @@ -30,8 +30,6 @@ namespace KScreen { -OsdManager* OsdManager::s_instance = nullptr; - OsdAction::OsdAction(QObject *parent) : QObject(parent) { @@ -82,14 +80,6 @@ { } -OsdManager* OsdManager::self() -{ - if (!OsdManager::s_instance) { - s_instance = new OsdManager(); - } - return s_instance; -} - void OsdManager::showOutputIdentifiers() { connect(new KScreen::GetConfigOperation(), &KScreen::GetConfigOperation::finished, diff --git a/tests/osd/osdtest.h b/tests/osd/osdtest.h --- a/tests/osd/osdtest.h +++ b/tests/osd/osdtest.h @@ -24,6 +24,7 @@ namespace KScreen { +class OsdManager; class OsdTest : public QObject { @@ -40,6 +41,8 @@ void showActionSelector(); private: + OsdManager *getOsdManager(); + OsdManager *m_osdManager = nullptr; bool m_useDBus = false; }; diff --git a/tests/osd/osdtest.cpp b/tests/osd/osdtest.cpp --- a/tests/osd/osdtest.cpp +++ b/tests/osd/osdtest.cpp @@ -37,11 +37,19 @@ { } +OsdManager *OsdTest::getOsdManager() +{ + if (m_osdManager) + return m_osdManager; + m_osdManager = new OsdManager(this); + return m_osdManager; +} + void OsdTest::showOutputIdentifiers() { if (!m_useDBus) { QTimer::singleShot(5500, qApp, &QCoreApplication::quit); - KScreen::OsdManager::self()->showOutputIdentifiers(); + getOsdManager()->showOutputIdentifiers(); } else { QDBusMessage msg = QDBusMessage::createMethodCall( QLatin1Literal("org.kde.kscreen.osdService"), @@ -67,7 +75,7 @@ { if (!m_useDBus) { QTimer::singleShot(5500, qApp, &QCoreApplication::quit); - KScreen::OsdManager::self()->showOsd(!icon.isEmpty() ? icon : QStringLiteral("preferences-desktop-display-randr"), + getOsdManager()->showOsd(!icon.isEmpty() ? icon : QStringLiteral("preferences-desktop-display-randr"), !message.isEmpty() ? message : QStringLiteral("On-Screen-Display")); } else { qCWarning(KSCREEN_KDED) << "Implement me."; @@ -78,7 +86,7 @@ void OsdTest::showActionSelector() { if (!m_useDBus) { - auto action = KScreen::OsdManager::self()->showActionSelector(); + auto action = getOsdManager()->showActionSelector(); connect(action, &KScreen::OsdAction::selected, [](KScreen::OsdAction::Action action) { qCDebug(KSCREEN_KDED) << "Selected action:" << action;