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(notifications)
|
||||
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
|
||||
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