[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