[prev in list] [next in list] [prev in thread] [next in thread]
List: kde-commits
Subject: [kscreen/sebas/osd] /: implement generic osd
From: Sebastian_Kügler <sebas () kde ! org>
Date: 2016-12-02 11:10:28
Message-ID: E1cCljY-0006KE-JB () code ! kde ! org
[Download RAW message or body]
Git commit 77004b90e69de553f467513ff161af3f12521847 by Sebastian Kügler.
Committed on 02/12/2016 at 02:44.
Pushed by sebas into branch 'sebas/osd'.
implement generic osd
The generic osd shows an icon and a text in an osd on all screens.
- doesn't work yet, but I need sleep
M +18 -4 kded/osd.cpp
M +4 -1 kded/osd.h
M +30 -1 kded/osdmanager.cpp
M +1 -0 kded/osdmanager.h
M +1 -0 kded/qml/Osd.qml
M +2 -1 kded/qml/OsdItem.qml
M +2 -1 tests/osd/osdtest.cpp
https://commits.kde.org/kscreen/77004b90e69de553f467513ff161af3f12521847
diff --git a/kded/osd.cpp b/kded/osd.cpp
index 051c515..6227f0d 100644
--- a/kded/osd.cpp
+++ b/kded/osd.cpp
@@ -31,8 +31,9 @@
namespace KScreen {
-Osd::Osd(QObject *parent)
+Osd::Osd(const KScreen::OutputPtr output, QObject *parent)
: QObject(parent)
+ , m_output(output)
, m_osdPath(QStandardPaths::locate(QStandardPaths::QStandardPaths::GenericDataLocation, \
QStringLiteral("kded_kscreen/qml/Osd.qml"))) , m_osdObject(new \
KDeclarative::QmlObject(this)) {
@@ -60,6 +61,18 @@ Osd::~Osd()
{
}
+void Osd::showGenericOsd(const QString &icon, const QString &text)
+{
+ m_outputGeometry = m_output->geometry();
+ auto *rootObject = m_osdObject->rootObject();
+ rootObject->setProperty("itemSource", QStringLiteral("OsdItem.qml"));
+ rootObject->setProperty("infoText", text);
+ rootObject->setProperty("icon", icon);
+ qCDebug(KSCREEN_KDED) << "icon / text:" << icon << text;
+
+ showOsd();
+}
+
void Osd::showOutputIdentifier(const KScreen::OutputPtr output)
{
m_outputGeometry = output->geometry();
@@ -75,7 +88,7 @@ void Osd::showOutputIdentifier(const KScreen::OutputPtr output)
rootObject->setProperty("itemSource", QStringLiteral("OutputIdentifier.qml"));
rootObject->setProperty("modeName", Utils::sizeToString(realSize));
rootObject->setProperty("outputName", Utils::outputName(output));
- rootObject->setProperty("icon", \
QStringLiteral("preferences-desktop-display-randr")); + \
//rootObject->setProperty("icon", \
QStringLiteral("preferences-desktop-display-randr")); showOsd();
}
@@ -96,6 +109,8 @@ void Osd::updatePosition()
rootObject->setProperty("x", pos_x);
rootObject->setProperty("y", pos_y);
+
+ qCDebug(KSCREEN_KDED) << "pos:" << QPoint(pos_x, pos_y);
}
void Osd::showOsd()
@@ -107,6 +122,7 @@ void Osd::showOsd()
// only animate on X11, wayland plugin doesn't support this and
// pukes loads of warnings into our logs
if (qGuiApp->platformName() == QStringLiteral("xcb")) {
+ qCDebug(KSCREEN_KDED) << "vibsible";
rootObject->setProperty("animateOpacity", false);
rootObject->setProperty("opacity", 1);
rootObject->setProperty("visible", true);
@@ -126,8 +142,6 @@ void Osd::hideOsd()
return;
}
rootObject->setProperty("visible", false);
- // this is needed to prevent fading from "old" values when the OSD shows up
- rootObject->setProperty("osdValue", 0);
}
} // ns
diff --git a/kded/osd.h b/kded/osd.h
index 164bcc2..244fb61 100644
--- a/kded/osd.h
+++ b/kded/osd.h
@@ -39,11 +39,13 @@ class Osd : public QObject {
Q_OBJECT
public:
- Osd(QObject *parent = nullptr);
+ Osd(const KScreen::OutputPtr output, QObject *parent = nullptr);
~Osd() override;
+ void showGenericOsd(const QString &icon, const QString &text);
void showOutputIdentifier(const KScreen::OutputPtr output);
+
private Q_SLOTS:
void hideOsd();
@@ -51,6 +53,7 @@ private:
void showOsd();
void updatePosition();
+ KScreen::OutputPtr m_output;
QString m_osdPath;
QRect m_outputGeometry;
KDeclarative::QmlObject *m_osdObject = nullptr;
diff --git a/kded/osdmanager.cpp b/kded/osdmanager.cpp
index f792643..c9e2189 100644
--- a/kded/osdmanager.cpp
+++ b/kded/osdmanager.cpp
@@ -18,6 +18,7 @@
#include "osdmanager.h"
#include "osd.h"
+#include "debug.h"
#include <KScreen/Config>
#include <KScreen/GetConfigOperation>
@@ -79,7 +80,7 @@ void OsdManager::slotIdentifyOutputs(KScreen::ConfigOperation *op)
if (m_osds.keys().contains(output->name())) {
osd = m_osds.value(output->name());
} else {
- osd = new KScreen::Osd(this);
+ osd = new KScreen::Osd(output, this);
m_osds.insert(output->name(), osd);
}
osd->showOutputIdentifier(output);
@@ -87,5 +88,33 @@ void OsdManager::slotIdentifyOutputs(KScreen::ConfigOperation *op)
m_cleanupTimer->start();
}
+void OsdManager::showOsd(const QString& icon, const QString& text)
+{
+ connect(new KScreen::GetConfigOperation(), \
&KScreen::GetConfigOperation::finished, + this, [this, icon, text] \
(KScreen::ConfigOperation *op) { + qCDebug(KSCREEN_KDED) << \
"whoooooopwhoooooopwhoooooop"; + if (op->hasError()) {
+ return;
+ }
+
+ const KScreen::ConfigPtr config = \
qobject_cast<KScreen::GetConfigOperation*>(op)->config(); +
+ Q_FOREACH (const KScreen::OutputPtr &output, config->outputs()) {
+ if (!output->isConnected() || !output->isEnabled() || \
!output->currentMode()) { + continue;
+ }
+ KScreen::Osd* osd = nullptr;
+ if (m_osds.keys().contains(output->name())) {
+ osd = m_osds.value(output->name());
+ } else {
+ osd = new KScreen::Osd(output, this);
+ m_osds.insert(output->name(), osd);
+ }
+ osd->showGenericOsd(icon, text);
+ }
+ m_cleanupTimer->start();
+ });
+}
+
}
diff --git a/kded/osdmanager.h b/kded/osdmanager.h
index 38f8351..8cdb8cb 100644
--- a/kded/osdmanager.h
+++ b/kded/osdmanager.h
@@ -42,6 +42,7 @@ public:
public Q_SLOTS:
void showOutputIdentifiers();
+ void showOsd(const QString &icon, const QString &text);
private:
OsdManager(QObject *parent = nullptr);
diff --git a/kded/qml/Osd.qml b/kded/qml/Osd.qml
index 65db294..7406910 100644
--- a/kded/qml/Osd.qml
+++ b/kded/qml/Osd.qml
@@ -31,6 +31,7 @@ PlasmaCore.Dialog {
// Icon name to display
property string icon
+ property string infoText
property string outputName
property string modeName
property bool animateOpacity: false
diff --git a/kded/qml/OsdItem.qml b/kded/qml/OsdItem.qml
index 7d239e3..5f9d673 100644
--- a/kded/qml/OsdItem.qml
+++ b/kded/qml/OsdItem.qml
@@ -41,7 +41,7 @@ Item {
margins: Math.floor(units.smallSpacing / 2)
}
- text: outputName
+ text: rootItem.infoText
horizontalAlignment: Text.AlignHCenter
wrapMode: Text.WordWrap
maximumLineCount: 2
@@ -49,4 +49,5 @@ Item {
minimumPointSize: theme.defaultFont.pointSize
fontSizeMode: Text.HorizontalFit
}
+ Component.onCompleted: print("osditem loaded..." + root.infoText);
}
diff --git a/tests/osd/osdtest.cpp b/tests/osd/osdtest.cpp
index 0a3872b..6f25720 100644
--- a/tests/osd/osdtest.cpp
+++ b/tests/osd/osdtest.cpp
@@ -37,7 +37,8 @@ OsdTest::~OsdTest()
void OsdTest::start()
{
QTimer::singleShot(5500, qApp, &QCoreApplication::quit);
- KScreen::OsdManager::self()->showOutputIdentifiers();
+// KScreen::OsdManager::self()->showOutputIdentifiers();
+ KScreen::OsdManager::self()->showOsd(QStringLiteral("preferences-desktop-display-randr"), \
QStringLiteral("OSD Showing Up")); }
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic