diff --git a/kded/osd.h b/kded/osd.h index b00f0be..164bcc2 100644 --- a/kded/osd.h +++ b/kded/osd.h @@ -1,64 +1,64 @@ /* - * Copyright 2014 (c) Martin Klapetek + * Copyright 2014 Martin Klapetek * Copyright 2016 Sebastian Kügler * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #ifndef KSCREEN_OSD_H #define KSCREEN_OSD_H #include #include #include #include namespace KDeclarative { class QmlObject; } class QTimer; namespace KScreen { class Osd : public QObject { Q_OBJECT public: Osd(QObject *parent = nullptr); ~Osd() override; void showOutputIdentifier(const KScreen::OutputPtr output); private Q_SLOTS: void hideOsd(); private: void showOsd(); void updatePosition(); QString m_osdPath; QRect m_outputGeometry; KDeclarative::QmlObject *m_osdObject = nullptr; QTimer *m_osdTimer = nullptr; int m_timeout = 0; }; } // ns #endif // KSCREEN_OSD_H diff --git a/kded/osdmanager.cpp b/kded/osdmanager.cpp index 70fee23..f792643 100644 --- a/kded/osdmanager.cpp +++ b/kded/osdmanager.cpp @@ -1,92 +1,91 @@ /* * Copyright 2016 Sebastian Kügler * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #include "osdmanager.h" #include "osd.h" #include #include #include #include #include #include namespace KScreen { OsdManager* OsdManager::m_instance = 0; OsdManager::OsdManager(QObject *parent) : QObject(parent) , m_cleanupTimer(new QTimer(this)) { // free up memory when the osd hasn't been used for more than 1 minute m_cleanupTimer->setInterval(60000); m_cleanupTimer->setSingleShot(true); connect(m_cleanupTimer, &QTimer::timeout, this, [this]() { qDeleteAll(m_osds.begin(), m_osds.end()); m_osds.clear(); }); QDBusConnection::sessionBus().registerObject(QStringLiteral("/org/kde/kscreen/osdService"), this, QDBusConnection::ExportAllSlots | QDBusConnection::ExportAllSignals); } OsdManager::~OsdManager() { } OsdManager* OsdManager::self() { if (!OsdManager::m_instance) { m_instance = new OsdManager(); } - return m_instance; } void OsdManager::showOutputIdentifiers() { connect(new KScreen::GetConfigOperation(), &KScreen::GetConfigOperation::finished, this, &OsdManager::slotIdentifyOutputs); } void OsdManager::slotIdentifyOutputs(KScreen::ConfigOperation *op) { if (op->hasError()) { return; } const KScreen::ConfigPtr config = qobject_cast(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(this); m_osds.insert(output->name(), osd); } osd->showOutputIdentifier(output); } m_cleanupTimer->start(); } } diff --git a/kded/qml/Osd.qml b/kded/qml/Osd.qml index 7944de3..69f35d2 100644 --- a/kded/qml/Osd.qml +++ b/kded/qml/Osd.qml @@ -1,50 +1,51 @@ /* * Copyright 2014 Martin Klapetek + * Copyright 2016 Sebastian Kügler * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License as * published by the Free Software Foundation; either version 2 of * the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ import QtQuick 2.0 import QtQuick.Window 2.2 import org.kde.plasma.core 2.0 as PlasmaCore PlasmaCore.Dialog { id: root location: PlasmaCore.Types.Floating type: PlasmaCore.Dialog.OnScreenDisplay outputOnly: true // OSD Timeout in msecs - how long it will stay on the screen property int timeout: 5000 // Icon name to display property string icon property bool animateOpacity: false property string itemSource property string outputName property string modeName mainItem: Loader { source: itemSource onItemChanged: { if (item != undefined) { item.rootItem = root; } } } } diff --git a/kded/qml/OsdItem.qml b/kded/qml/OsdItem.qml index 6507cd1..7d239e3 100644 --- a/kded/qml/OsdItem.qml +++ b/kded/qml/OsdItem.qml @@ -1,51 +1,52 @@ /* * Copyright 2014 Martin Klapetek + * Copyright 2016 Sebastian Kügler * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License as * published by the Free Software Foundation; either version 2 of * the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ import QtQuick 2.5 import QtQuick.Window 2.2 import org.kde.plasma.core 2.0 as PlasmaCore import org.kde.plasma.extras 2.0 as PlasmaExtra Item { property QtObject rootItem PlasmaCore.IconItem { id: icon height: parent.height - label.height - ((units.smallSpacing/2) * 3) width: parent.width source: rootItem.icon } PlasmaExtra.Heading { id: label anchors { bottom: parent.bottom left: parent.left right: parent.right margins: Math.floor(units.smallSpacing / 2) } text: outputName horizontalAlignment: Text.AlignHCenter wrapMode: Text.WordWrap maximumLineCount: 2 elide: Text.ElideLeft minimumPointSize: theme.defaultFont.pointSize fontSizeMode: Text.HorizontalFit } }