Ticket #29: screensaver-x11-1.3.diff

File screensaver-x11-1.3.diff, 3.2 KB (added by neil@…, 19 years ago)

(1.3) detection changed to use "xscreensaver-command -version"

  • libs/libmyth/screensaver-x11.cpp

     
    88}
    99
    1010#include "mythcontext.h"
     11#include "util.h"
    1112
    1213class ScreenSaverX11Private
    1314{
     
    1920        int preferblank;
    2021        int allowexposure;
    2122        bool dpmsdisabled;
     23        bool xscreensaverRunning;
    2224    } state;
    2325
    2426    friend class ScreenSaverX11;
    2527};
    2628
     29ScreenSaverXSSTimer::ScreenSaverXSSTimer()
     30{
     31    resetTimer = new QTimer();
     32    connect(resetTimer, SIGNAL(timeout()), this, SLOT(resetSlot()));
     33}
     34
     35ScreenSaverXSSTimer::~ScreenSaverXSSTimer()
     36{
     37    delete resetTimer;
     38}
     39
     40void ScreenSaverXSSTimer::resetXSS()
     41{
     42    myth_system(QString("xscreensaver-command -deactivate >&- 2>&- &"));
     43}
     44
     45void ScreenSaverXSSTimer::resetSlot()
     46{
     47    resetXSS();
     48}
     49
    2750ScreenSaverX11::ScreenSaverX11()
    2851{
    2952    d = new ScreenSaverX11Private();
     53    d->state.xscreensaverRunning =
     54                (myth_system("xscreensaver-command -version >&- 2>&-") == 0);
     55    if (d->state.xscreensaverRunning)
     56    {
     57        t = new ScreenSaverXSSTimer();
     58        t->timeoutInterval = -1;
     59        VERBOSE(VB_GENERAL, QString("XScreenSaver support enabled"));
     60    }
    3061}
    3162
    3263ScreenSaverX11::~ScreenSaverX11()
    3364{
    3465    delete d;
     66    delete t;
    3567}
    3668
    3769void ScreenSaverX11::Disable(void)
     
    6395            VERBOSE(VB_GENERAL, "Disable DPMS");
    6496        }
    6597    }
     98
     99    if (d->state.xscreensaverRunning)
     100    {
     101        if (t->resetTimer)
     102        {
     103            t->resetTimer->stop();
     104        }
     105        if (t->timeoutInterval == -1)
     106        {
     107            t->timeoutInterval =
     108                gContext->GetNumSettingOnHost("xscreensaverInterval",
     109                                          gContext->GetHostName(),
     110                                          60) * 1000;
     111        }
     112        if (t->timeoutInterval > 0)
     113        {
     114            t->resetTimer->start(t->timeoutInterval, FALSE);
     115        }
     116    }
    66117}
    67118
    68119void ScreenSaverX11::Restore(void)
     
    84135            VERBOSE(VB_GENERAL, "Enable DPMS");
    85136        }
    86137    }
     138
     139    if (d->state.xscreensaverRunning)
     140    {
     141        if (t->resetTimer)
     142        {
     143            t->resetTimer->stop();
     144        }
     145    }
    87146}
    88147
    89148void ScreenSaverX11::Reset(void)
    90149{
    91150    XResetScreenSaver(qt_xdisplay());
     151    if (d->state.xscreensaverRunning)
     152    {
     153        t->resetXSS();
     154    }
    92155}
    93156
  • libs/libmyth/screensaver-x11.h

     
    33
    44#include "screensaver.h"
    55
     6#include <qobject.h>
     7#include <qtimer.h>
     8
     9class ScreenSaverXSSTimer : public QObject
     10{
     11    Q_OBJECT
     12public:
     13    ScreenSaverXSSTimer();
     14    ~ScreenSaverXSSTimer();
     15    void resetXSS(void);
     16    int timeoutInterval;
     17    QTimer *resetTimer;
     18
     19private slots:
     20    void resetSlot();
     21
     22};
     23
    624class ScreenSaverX11 : public ScreenSaverControl
    725{
    826public:
     
    1533
    1634protected:
    1735    class ScreenSaverX11Private *d;
     36    class ScreenSaverXSSTimer *t;
    1837};
    1938
    2039#endif // MYTH_SCREENSAVER_X11_H