Support for inhibiting gnome screensaver.

Update issue #879
Gnome support done.
This commit is contained in:
John Maguire 2010-10-12 14:44:33 +00:00
parent 2d19c2899a
commit f0c3bf4332
6 changed files with 81 additions and 0 deletions

View File

@ -161,6 +161,7 @@ set(SOURCES
ui/organisedialog.cpp
ui/organiseerrordialog.cpp
ui/qtsystemtrayicon.cpp
ui/screensaver.cpp
ui/settingsdialog.cpp
ui/systemtrayicon.cpp
@ -569,6 +570,9 @@ if(NOT APPLE AND NOT WIN32)
# DeviceKit lister source
list(APPEND SOURCES devices/devicekitlister.cpp)
list(APPEND HEADERS devices/devicekitlister.h)
# Gnome Screensaver DBus interface
list(APPEND SOURCES ui/gnomescreensaver.cpp)
endif(NOT APPLE AND NOT WIN32)
# Libgpod device backend

View File

@ -0,0 +1,19 @@
#include "gnomescreensaver.h"
#include <QCoreApplication>
#include <QDBusInterface>
#include <QDBusReply>
void GnomeScreensaver::Inhibit() {
QDBusInterface gnome_screensaver("org.gnome.ScreenSaver", "/", "org.gnome.ScreenSaver");
QDBusReply<quint32> reply =
gnome_screensaver.call("Inhibit", QCoreApplication::applicationName(), QObject::tr("Visualizations"));
if (reply.isValid()) {
cookie_ = reply.value();
}
}
void GnomeScreensaver::Uninhibit() {
QDBusInterface gnome_screensaver("org.gnome.ScreenSaver", "/", "org.gnome.ScreenSaver");
gnome_screensaver.call("UnInhibit", cookie_);
}

17
src/ui/gnomescreensaver.h Normal file
View File

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

21
src/ui/screensaver.cpp Normal file
View File

@ -0,0 +1,21 @@
#include "screensaver.h"
#include "gnomescreensaver.h"
#ifdef Q_WS_X11
#include <QDBusConnection>
#include <QDBusConnectionInterface>
#endif
Screensaver* Screensaver::screensaver_ = 0;
Screensaver* Screensaver::GetScreensaver() {
if (!screensaver_) {
#ifdef Q_WS_X11
if (QDBusConnection::sessionBus().interface()->isServiceRegistered("org.gnome.ScreenSaver")) {
screensaver_ = new GnomeScreensaver();
}
#endif
}
return screensaver_;
}

15
src/ui/screensaver.h Normal file
View File

@ -0,0 +1,15 @@
#ifndef SCREENSAVER_H
#define SCREENSAVER_H
class Screensaver {
public:
virtual void Inhibit() = 0;
virtual void Uninhibit() = 0;
static Screensaver* GetScreensaver();
private:
static Screensaver* screensaver_;
};
#endif

View File

@ -21,6 +21,7 @@
#include "visualisationselector.h"
#include "engines/gstengine.h"
#include "ui/iconloader.h"
#include "ui/screensaver.h"
#include <QHBoxLayout>
#include <QSettings>
@ -245,6 +246,10 @@ void VisualisationContainer::keyReleaseEvent(QKeyEvent *event) {
void VisualisationContainer::ToggleFullscreen() {
setWindowState(windowState() ^ Qt::WindowFullScreen);
Screensaver* screensaver = Screensaver::GetScreensaver();
if (screensaver)
isFullScreen() ? screensaver->Inhibit() : screensaver->Uninhibit();
}
void VisualisationContainer::SetFps(int fps) {