Inhibit KDE screensavers as well as Gnome

Update issue #879
KDE support done.
This commit is contained in:
David Sansome 2010-10-12 21:27:31 +00:00
parent 5c81e4794d
commit 5d0a2ff5cd
6 changed files with 61 additions and 30 deletions

View File

@ -574,7 +574,7 @@ if(NOT APPLE AND NOT WIN32)
list(APPEND HEADERS devices/devicekitlister.h)
# Gnome Screensaver DBus interface
list(APPEND SOURCES ui/gnomescreensaver.cpp)
list(APPEND SOURCES ui/dbusscreensaver.cpp)
endif(NOT APPLE AND NOT WIN32)
# Libgpod device backend

View File

@ -1,10 +1,18 @@
#include "gnomescreensaver.h"
#include "dbusscreensaver.h"
#include <QCoreApplication>
#include <QDBusInterface>
#include <QDBusReply>
void GnomeScreensaver::Inhibit() {
DBusScreensaver::DBusScreensaver(const QString& service, const QString& path,
const QString& interface)
: service_(service),
path_(path),
interface_(interface)
{
}
void DBusScreensaver::Inhibit() {
QDBusInterface gnome_screensaver("org.gnome.ScreenSaver", "/", "org.gnome.ScreenSaver");
QDBusReply<quint32> reply =
gnome_screensaver.call("Inhibit", QCoreApplication::applicationName(), QObject::tr("Visualizations"));
@ -13,7 +21,7 @@ void GnomeScreensaver::Inhibit() {
}
}
void GnomeScreensaver::Uninhibit() {
void DBusScreensaver::Uninhibit() {
QDBusInterface gnome_screensaver("org.gnome.ScreenSaver", "/", "org.gnome.ScreenSaver");
gnome_screensaver.call("UnInhibit", cookie_);
}

24
src/ui/dbusscreensaver.h Normal file
View File

@ -0,0 +1,24 @@
#ifndef DBUSSCREENSAVER_H
#define DBUSSCREENSAVER_H
#include "screensaver.h"
#include <QString>
class DBusScreensaver : public Screensaver {
public:
DBusScreensaver(const QString& service, const QString& path,
const QString& interface);
void Inhibit();
void Uninhibit();
private:
QString service_;
QString path_;
QString interface_;
quint32 cookie_;
};
#endif

View File

@ -1,17 +0,0 @@
#ifndef GNOMESCREENSAVER_H
#define GNOMESCREENSAVER_H
#include "screensaver.h"
#include <QtGlobal>
class GnomeScreensaver : public Screensaver {
public:
void Inhibit();
void Uninhibit();
private:
quint32 cookie_;
};
#endif

View File

@ -3,28 +3,36 @@
#include <QtGlobal>
#ifdef Q_WS_X11
#include "gnomescreensaver.h"
#include <QDBusConnection>
#include <QDBusConnectionInterface>
#include "dbusscreensaver.h"
#include <QDBusConnection>
#include <QDBusConnectionInterface>
#endif
#ifdef Q_OS_DARWIN
#include "macscreensaver.h"
#include "macscreensaver.h"
#endif
#include <QtDebug>
const char* Screensaver::kGnomeService = "org.gnome.ScreenSaver";
const char* Screensaver::kGnomePath = "/";
const char* Screensaver::kGnomeInterface = "org.gnome.ScreenSaver";
const char* Screensaver::kKdeService = "org.kde.ScreenSaver";
const char* Screensaver::kKdePath = "/ScreenSaver/";
const char* Screensaver::kKdeInterface = "org.freedesktop.ScreenSaver";
Screensaver* Screensaver::screensaver_ = 0;
Screensaver* Screensaver::GetScreensaver() {
qDebug() << Q_FUNC_INFO;
if (!screensaver_) {
#if defined(Q_WS_X11)
if (QDBusConnection::sessionBus().interface()->isServiceRegistered("org.gnome.ScreenSaver")) {
screensaver_ = new GnomeScreensaver();
}
if (QDBusConnection::sessionBus().interface()->isServiceRegistered(kGnomeService)) {
screensaver_ = new DBusScreensaver(kGnomeService, kGnomePath, kGnomeInterface);
} else if (QDBusConnection::sessionBus().interface()->isServiceRegistered(kKdeService)) {
screensaver_ = new DBusScreensaver(kKdeService, kKdePath, kKdeInterface);
}
#elif defined(Q_OS_DARWIN)
screensaver_ = new MacScreensaver();
screensaver_ = new MacScreensaver();
#endif
}
return screensaver_;

View File

@ -5,6 +5,14 @@ class Screensaver {
public:
virtual ~Screensaver() {}
static const char* kGnomeService;
static const char* kGnomePath;
static const char* kGnomeInterface;
static const char* kKdeService;
static const char* kKdePath;
static const char* kKdeInterface;
virtual void Inhibit() = 0;
virtual void Uninhibit() = 0;