Added a plugin to inhibit the screensaver when a device is connected.
The inhibition is lifted when the plugin disconnects. REVIEW: 121692
This commit is contained in:
parent
917104ff99
commit
0779377337
6 changed files with 152 additions and 0 deletions
|
@ -11,6 +11,7 @@ add_subdirectory(mousepad)
|
||||||
add_subdirectory(share)
|
add_subdirectory(share)
|
||||||
add_subdirectory(notifications)
|
add_subdirectory(notifications)
|
||||||
add_subdirectory(sftp)
|
add_subdirectory(sftp)
|
||||||
|
add_subdirectory(screensaver-inhibit)
|
||||||
|
|
||||||
#FIXME: If we split notifications in several files, they won't appear in the same group in the Notifications KCM
|
#FIXME: If we split notifications in several files, they won't appear in the same group in the Notifications KCM
|
||||||
install(FILES kdeconnect.notifyrc DESTINATION ${DATA_INSTALL_DIR}/kdeconnect)
|
install(FILES kdeconnect.notifyrc DESTINATION ${DATA_INSTALL_DIR}/kdeconnect)
|
||||||
|
|
10
plugins/screensaver-inhibit/CMakeLists.txt
Normal file
10
plugins/screensaver-inhibit/CMakeLists.txt
Normal file
|
@ -0,0 +1,10 @@
|
||||||
|
set(kdeconnect_screensaver_inhibit_SRCS
|
||||||
|
screensaverinhibitplugin.cpp
|
||||||
|
)
|
||||||
|
|
||||||
|
kde4_add_plugin(kdeconnect_screensaver_inhibit ${kdeconnect_screensaver_inhibit_SRCS})
|
||||||
|
|
||||||
|
target_link_libraries(kdeconnect_screensaver_inhibit kdeconnectcore ${KDE4_KDEUI_LIBS})
|
||||||
|
|
||||||
|
install(TARGETS kdeconnect_screensaver_inhibit DESTINATION ${PLUGIN_INSTALL_DIR} )
|
||||||
|
install(FILES kdeconnect_screensaver_inhibit.desktop DESTINATION ${SERVICES_INSTALL_DIR} )
|
3
plugins/screensaver-inhibit/README
Normal file
3
plugins/screensaver-inhibit/README
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
This plugin inhibits the screensaver from kicking in when the device is connected
|
||||||
|
to kdeconnect, it then uninhibits the screensaver if the device was to go out of
|
||||||
|
range or be disconnected.
|
|
@ -0,0 +1,15 @@
|
||||||
|
[Desktop Entry]
|
||||||
|
Encoding=UTF-8
|
||||||
|
Type=Service
|
||||||
|
ServiceTypes=KdeConnect/Plugin
|
||||||
|
X-KDE-Library=kdeconnect_screensaver_inhibit
|
||||||
|
X-KDE-PluginInfo-Author=Pramod Dematagoda
|
||||||
|
X-KDE-PluginInfo-Email=pmdematagoda@mykolab.ch
|
||||||
|
X-KDE-PluginInfo-Name=kdeconnect_screensaver_inhibit
|
||||||
|
X-KDE-PluginInfo-Version=0.1
|
||||||
|
X-KDE-PluginInfo-Website=http://albertvaka.wordpress.com
|
||||||
|
X-KDE-PluginInfo-License=GPL
|
||||||
|
X-KDE-PluginInfo-EnabledByDefault=false
|
||||||
|
Icon=preferences-desktop-screensaver
|
||||||
|
Name=Inhibit screensaver
|
||||||
|
Comment=Inhibit the screensaver when the device is connected
|
78
plugins/screensaver-inhibit/screensaverinhibitplugin.cpp
Normal file
78
plugins/screensaver-inhibit/screensaverinhibitplugin.cpp
Normal file
|
@ -0,0 +1,78 @@
|
||||||
|
/**
|
||||||
|
* Copyright 2014 Pramod Dematagoda <pmdematagoda@mykolab.ch>
|
||||||
|
*
|
||||||
|
* 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) version 3 or any later version
|
||||||
|
* accepted by the membership of KDE e.V. (or its successor approved
|
||||||
|
* by the membership of KDE e.V.), which shall act as a proxy
|
||||||
|
* defined in Section 14 of version 3 of the license.
|
||||||
|
*
|
||||||
|
* 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 <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "screensaverinhibitplugin.h"
|
||||||
|
|
||||||
|
#include <KNotification>
|
||||||
|
#include <KIcon>
|
||||||
|
#include <KLocalizedString>
|
||||||
|
|
||||||
|
#include <core/kdebugnamespace.h>
|
||||||
|
#include <core/device.h>
|
||||||
|
#include <QDBusConnection>
|
||||||
|
#include <QDBusInterface>
|
||||||
|
|
||||||
|
K_PLUGIN_FACTORY( KdeConnectPluginFactory, registerPlugin< ScreensaverInhibitPlugin >(); )
|
||||||
|
K_EXPORT_PLUGIN( KdeConnectPluginFactory("kdeconnect_screensaver_inhibit", "kdeconnect-plugins") )
|
||||||
|
|
||||||
|
const QString INHIBIT_SERVICE = "org.freedesktop.ScreenSaver";
|
||||||
|
const QString INHIBIT_INTERFACE = INHIBIT_SERVICE;
|
||||||
|
const QString INHIBIT_PATH = "/ScreenSaver";
|
||||||
|
const QString INHIBIT_METHOD = "Inhibit";
|
||||||
|
const QString UNINHIBIT_METHOD = "UnInhibit";
|
||||||
|
const QString SIMULATE_ACTIVITY_METHOD = "SimulateUserActivity";
|
||||||
|
|
||||||
|
ScreensaverInhibitPlugin::ScreensaverInhibitPlugin(QObject* parent, const QVariantList& args)
|
||||||
|
: KdeConnectPlugin(parent, args)
|
||||||
|
{
|
||||||
|
QDBusInterface inhibitInterface(INHIBIT_SERVICE, INHIBIT_PATH, INHIBIT_INTERFACE);
|
||||||
|
|
||||||
|
QDBusMessage reply = inhibitInterface.call(INHIBIT_METHOD, "kdeconnect", "Phone is connected");
|
||||||
|
|
||||||
|
if (reply.errorMessage() != NULL) {
|
||||||
|
kDebug(debugArea()) << "Unable to inhibit the screensaver: " << reply.errorMessage();
|
||||||
|
} else {
|
||||||
|
// Store the cookie we receive, this will be sent back when sending the uninhibit call.
|
||||||
|
this->inhibitCookie = reply.arguments().first().toUInt();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
ScreensaverInhibitPlugin::~ScreensaverInhibitPlugin()
|
||||||
|
{
|
||||||
|
QDBusInterface inhibitInterface(INHIBIT_SERVICE, INHIBIT_PATH, INHIBIT_INTERFACE);
|
||||||
|
inhibitInterface.call(UNINHIBIT_METHOD, this->inhibitCookie);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Simulate user activity because what ever manages the screensaver does not seem to start the timer
|
||||||
|
* automatically when all inhibitions are lifted and the user does nothing which results in an
|
||||||
|
* unlocked desktop which would be dangerous. Ideally we should not be doing this and the screen should
|
||||||
|
* be locked anyway.
|
||||||
|
*/
|
||||||
|
inhibitInterface.call(SIMULATE_ACTIVITY_METHOD);
|
||||||
|
}
|
||||||
|
|
||||||
|
void ScreensaverInhibitPlugin::connected()
|
||||||
|
{}
|
||||||
|
|
||||||
|
bool ScreensaverInhibitPlugin::receivePackage(const NetworkPackage& np)
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
45
plugins/screensaver-inhibit/screensaverinhibitplugin.h
Normal file
45
plugins/screensaver-inhibit/screensaverinhibitplugin.h
Normal file
|
@ -0,0 +1,45 @@
|
||||||
|
/**
|
||||||
|
* Copyright 2014 Pramod Dematagoda <pmdematagoda@mykolab.ch>
|
||||||
|
*
|
||||||
|
* 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) version 3 or any later version
|
||||||
|
* accepted by the membership of KDE e.V. (or its successor approved
|
||||||
|
* by the membership of KDE e.V.), which shall act as a proxy
|
||||||
|
* defined in Section 14 of version 3 of the license.
|
||||||
|
*
|
||||||
|
* 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 <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef SCREENSAVERINHIBITPLUGIN_H
|
||||||
|
#define SCREENSAVERINHIBITPLUGIN_H
|
||||||
|
|
||||||
|
#include <QObject>
|
||||||
|
|
||||||
|
#include <core/kdeconnectplugin.h>
|
||||||
|
|
||||||
|
class KDE_EXPORT ScreensaverInhibitPlugin
|
||||||
|
: public KdeConnectPlugin
|
||||||
|
{
|
||||||
|
Q_OBJECT
|
||||||
|
|
||||||
|
public:
|
||||||
|
explicit ScreensaverInhibitPlugin(QObject *parent, const QVariantList &args);
|
||||||
|
virtual ~ScreensaverInhibitPlugin();
|
||||||
|
|
||||||
|
public Q_SLOTS:
|
||||||
|
virtual bool receivePackage(const NetworkPackage& np);
|
||||||
|
virtual void connected();
|
||||||
|
|
||||||
|
private:
|
||||||
|
uint inhibitCookie;
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif
|
Loading…
Reference in a new issue