Ticket #8357: screensaver-xdg.2.cpp

File screensaver-xdg.2.cpp, 3.0 KB (added by Johnny Walker <johnnyjboss@…>, 14 years ago)

corrected tab stops and other misc. items

Line 
1
2// Own header
3#include "screensaver-xdg.h"
4
5// QT headers
6#include <QWidget>
7#include <QDateTime>
8#include <QTimer>
9#include <QX11Info>
10#include <QString>
11
12// Mythdb headers
13#include "mythverbose.h"
14#include "mythdb.h"
15
16// Mythui headers
17#include "mythsystem.h"
18#include "mythxdisplay.h"
19#include "mythmainwindow.h"
20
21// X11 headers
22#include <X11/Xlib.h>
23
24extern "C" {
25#include <X11/extensions/dpms.h>
26}
27
28#define LOC      QString("ScreenSaverXDGPrivate: ")
29#define LOC_WARN QString("ScreenSaverXDGPrivate, Warning: ")
30#define LOC_ERR  QString("ScreenSaverXDGPrivate, Error: ")
31
32class ScreenSaverXDGPrivate
33{
34    friend class ScreenSaverXDG;
35
36public:
37    ScreenSaverXDGPrivate(ScreenSaverXDG *outer) :
38        m_xdgscreensaverRunning(false),
39        m_display(NULL)
40    {
41        m_xdgscreensaverRunning =
42                myth_system("xdg-screensaver --version >&- 2>&-") == 0;
43
44        if (IsScreenSaverRunning())
45        {
46            if (m_xdgscreensaverRunning){
47                VERBOSE(VB_GENERAL, LOC + "XDGScreenSaver support enabled");
48            }
49
50        }
51
52        m_display = OpenMythXDisplay();
53        if (!m_display)
54            VERBOSE(VB_IMPORTANT, LOC_ERR + "Failed to open connection to X11 server");
55    }
56
57    ~ScreenSaverXDGPrivate()
58    {
59        delete m_display;
60    }
61
62    bool IsScreenSaverRunning(void) const
63    {
64        return m_xdgscreensaverRunning;
65    }
66
67    QString getXWindowId(void)
68    {
69        //return window id
70        WId myWId = GetMythMainWindow()->winId();
71        QString windowId = QString("0x%1").arg(myWId, 0, 16);
72        VERBOSE(VB_GENERAL, QString("XDG: xwindowid of MythMainWindow at this time is: %1").arg(windowId));
73        return windowId;
74    }
75
76    void ResetScreenSaver(void)
77    {
78        //nothing to do in this implementation
79    }
80
81private:
82    bool m_xdgscreensaverRunning;
83
84    MythXDisplay *m_display;
85};
86
87ScreenSaverXDG::ScreenSaverXDG() :
88            d(new ScreenSaverXDGPrivate(this))
89{
90}
91
92ScreenSaverXDG::~ScreenSaverXDG()
93{
94    delete d;
95}
96
97bool ScreenSaverXDG::isXDGInstalled(void)
98{
99    bool result = myth_system("xdg-screensaver --version >&- 2>&-") == 0;
100    if (result)
101    {
102        VERBOSE(VB_GENERAL, "XDG: XDG-screensaver is supported.");
103    }
104    else
105    {
106        VERBOSE(VB_GENERAL, "XDG: xdg-utils are NOT installed. Failing back to timers and pokes");
107    }
108    return result;
109}
110
111void ScreenSaverXDG::Disable(void)
112{
113        if (d->m_display)
114        {
115                VERBOSE(VB_GENERAL, "XDG: Calling xdg-screensaver suspend windowID");
116                myth_system(QString("xdg-screensaver suspend %1 >&- 2>&- &").arg(d->getXWindowId()));
117        }
118}
119
120void ScreenSaverXDG::Restore(void)
121{
122        if (d->m_display)
123        {
124                VERBOSE(VB_GENERAL, "XDG: Calling xdg-screensaver resume windowID");
125                myth_system(QString("xdg-screensaver resume %1 >&- 2>&- &").arg(d->getXWindowId()));
126        }
127}
128
129void ScreenSaverXDG::Reset(void)
130{
131        //nothing to do in this implementation
132}
133
134bool ScreenSaverXDG::Asleep(void)
135{
136    return false;
137}
138
139void ScreenSaverXDG::resetSlot(void)
140{
141    d->ResetScreenSaver();
142}