[OSD] Load QML file on demand

Differential Revision: https://phabricator.kde.org/D1475
wilder-5.14
Kai Uwe Broulik 10 years ago
parent 9664f05a71
commit 79c081e2ea
  1. 67
      shell/osd.cpp
  2. 9
      shell/osd.h

@ -31,27 +31,9 @@
Osd::Osd(ShellCorona *corona) Osd::Osd(ShellCorona *corona)
: QObject(corona) : QObject(corona)
, m_osdPath(corona->lookAndFeelPackage().filePath("osdmainscript"))
{ {
const QString osdPath = corona->lookAndFeelPackage().filePath("osdmainscript");
if (osdPath.isEmpty()) {
qWarning() << "Failed to load the OSD QML file file from" << osdPath;
return;
}
m_osdObject = new KDeclarative::QmlObject(this);
m_osdObject->setSource(QUrl::fromLocalFile(osdPath));
if (m_osdObject->status() != QQmlComponent::Ready) {
qWarning() << "Failed to load OSD QML file";
return;
}
m_timeout = m_osdObject->rootObject()->property("timeout").toInt();
QDBusConnection::sessionBus().registerObject(QStringLiteral("/org/kde/osdService"), this, QDBusConnection::ExportAllSlots | QDBusConnection::ExportAllSignals); QDBusConnection::sessionBus().registerObject(QStringLiteral("/org/kde/osdService"), this, QDBusConnection::ExportAllSlots | QDBusConnection::ExportAllSignals);
m_osdTimer = new QTimer(this);
m_osdTimer->setSingleShot(true);
connect(m_osdTimer, &QTimer::timeout, this, &Osd::hideOsd);
} }
Osd::~Osd() Osd::~Osd()
@ -106,14 +88,46 @@ void Osd::virtualDesktopChanged(const QString &currentVirtualDesktopName)
showText(QString(), currentVirtualDesktopName); showText(QString(), currentVirtualDesktopName);
} }
bool Osd::init()
{
if (m_osdObject && m_osdObject->rootObject()) {
return true;
}
if (m_osdPath.isEmpty()) {
return false;
}
if (!m_osdObject) {
m_osdObject = new KDeclarative::QmlObject(this);
}
m_osdObject->setSource(QUrl::fromLocalFile(m_osdPath));
if (m_osdObject->status() != QQmlComponent::Ready) {
qWarning() << "Failed to load OSD QML file" << m_osdPath;
return false;
}
m_timeout = m_osdObject->rootObject()->property("timeout").toInt();
if (!m_osdTimer) {
m_osdTimer = new QTimer(this);
m_osdTimer->setSingleShot(true);
connect(m_osdTimer, &QTimer::timeout, this, &Osd::hideOsd);
}
return true;
}
void Osd::showProgress(const QString &icon, const int percent, const QString &additionalText) void Osd::showProgress(const QString &icon, const int percent, const QString &additionalText)
{ {
auto *rootObject = m_osdObject->rootObject(); if (!init()) {
if (!rootObject) {
qWarning() << "Failed to load OSD QML file";
return; return;
} }
auto *rootObject = m_osdObject->rootObject();
int value = qBound(0, percent, 100); int value = qBound(0, percent, 100);
rootObject->setProperty("osdValue", value); rootObject->setProperty("osdValue", value);
rootObject->setProperty("osdAdditionalText", additionalText); rootObject->setProperty("osdAdditionalText", additionalText);
@ -126,12 +140,12 @@ void Osd::showProgress(const QString &icon, const int percent, const QString &ad
void Osd::showText(const QString &icon, const QString &text) void Osd::showText(const QString &icon, const QString &text)
{ {
auto *rootObject = m_osdObject->rootObject(); if (!init()) {
if (!rootObject) {
qWarning() << "Failed to load OSD QML file";
return; return;
} }
auto *rootObject = m_osdObject->rootObject();
rootObject->setProperty("showingProgress", false); rootObject->setProperty("showingProgress", false);
rootObject->setProperty("osdValue", text); rootObject->setProperty("osdValue", text);
rootObject->setProperty("icon", icon); rootObject->setProperty("icon", icon);
@ -145,9 +159,6 @@ void Osd::showOsd()
m_osdTimer->stop(); m_osdTimer->stop();
auto *rootObject = m_osdObject->rootObject(); auto *rootObject = m_osdObject->rootObject();
if (!rootObject) {
return;
}
// if our OSD understands animating the opacity, do it; // if our OSD understands animating the opacity, do it;
// otherwise just show it to not break existing lnf packages // otherwise just show it to not break existing lnf packages

@ -54,13 +54,16 @@ private Q_SLOTS:
void hideOsd(); void hideOsd();
private: private:
bool init();
void showProgress(const QString &icon, const int percent, const QString &additionalText = QString()); void showProgress(const QString &icon, const int percent, const QString &additionalText = QString());
void showText(const QString &icon, const QString &text); void showText(const QString &icon, const QString &text);
void showOsd(); void showOsd();
KDeclarative::QmlObject *m_osdObject; QString m_osdPath;
QTimer *m_osdTimer; KDeclarative::QmlObject *m_osdObject = nullptr;
int m_timeout; QTimer *m_osdTimer = nullptr;
int m_timeout = 0;
}; };
#endif // OSD_H #endif // OSD_H

Loading…
Cancel
Save