Ticket #29: screensaver-x11-1.2.diff

File screensaver-x11-1.2.diff, 5.3 KB (added by neil@…, 21 years ago)

(1.2) processRunning moved to libmyth/util

  • libs/libmyth/util.h

     
    5454bool getUptime(time_t &uptime);
    5555bool getMemStats(int &totalMB, int &freeMB, int &totalVM, int &freeVM);
    5656
     57bool processRunning(const QString &pName);
     58
    5759#endif // UTIL_H_
  • 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 = processRunning("xscreensaver");
     54    if (d->state.xscreensaverRunning)
     55    {
     56        t = new ScreenSaverXSSTimer();
     57        t->timeoutInterval = -1;
     58        VERBOSE(VB_GENERAL, QString("XScreenSaver support enabled"));
     59    }
    3060}
    3161
    3262ScreenSaverX11::~ScreenSaverX11()
    3363{
    3464    delete d;
     65    delete t;
    3566}
    3667
    3768void ScreenSaverX11::Disable(void)
     
    6394            VERBOSE(VB_GENERAL, "Disable DPMS");
    6495        }
    6596    }
     97
     98    if (d->state.xscreensaverRunning)
     99    {
     100        if (t->resetTimer)
     101        {
     102            t->resetTimer->stop();
     103        }
     104        if (t->timeoutInterval == -1)
     105        {
     106            t->timeoutInterval =
     107                gContext->GetNumSettingOnHost("xscreensaverInterval",
     108                                          gContext->GetHostName(),
     109                                          60) * 1000;
     110        }
     111        if (t->timeoutInterval > 0)
     112        {
     113            t->resetTimer->start(t->timeoutInterval, FALSE);
     114        }
     115    }
    66116}
    67117
    68118void ScreenSaverX11::Restore(void)
     
    84134            VERBOSE(VB_GENERAL, "Enable DPMS");
    85135        }
    86136    }
     137
     138    if (d->state.xscreensaverRunning)
     139    {
     140        if (t->resetTimer)
     141        {
     142            t->resetTimer->stop();
     143        }
     144    }
    87145}
    88146
    89147void ScreenSaverX11::Reset(void)
    90148{
    91149    XResetScreenSaver(qt_xdisplay());
     150    if (d->state.xscreensaverRunning)
     151    {
     152        t->resetXSS();
     153    }
    92154}
    93155
  • libs/libmyth/util.cpp

     
    2828#include <qpainter.h>
    2929#include <qpixmap.h>
    3030#include <qfont.h>
     31#include <qdir.h>
     32#include <qfile.h>
     33#include <qregexp.h>
    3134
    3235// Myth headers
    3336#include "mythconfig.h"
     
    10681071
    10691072    return true;
    10701073}
     1074
     1075/** \fn processRunning(QString&)
     1076 *  \brief Returns the running state of a process.
     1077 *
     1078 *  \todo Add support for other platforms.
     1079 *  \return true if process is running, false otherwise.
     1080 */
     1081bool processRunning(const QString &pName)
     1082{
     1083#ifdef __linux__
     1084//  Parse /proc pseudo-fs for pid's
     1085    QDir procDir(QString("/proc"));
     1086    procDir.setFilter(QDir::Dirs | QDir::Readable);
     1087    if (procDir.exists())
     1088    {
     1089        QStringList processes = procDir.entryList();
     1090        for (QStringList::iterator i = processes.begin(); i != processes.end(); i++)
     1091        {
     1092            QString process = *i;
     1093            QRegExp rx( "^\\d+$" );
     1094            if (rx.search(process) == 0)
     1095            {
     1096//              Get process name from stat file
     1097                QFile processStatFile(QString("/proc/%1/stat").arg(process));
     1098                if (processStatFile.open(IO_ReadOnly))
     1099                {
     1100                    QTextStream stream(&processStatFile);
     1101                    QString processName;
     1102                    stream >> processName >> processName;
     1103                    processStatFile.close();
     1104                    if (QString("(%1)").arg(pName) == processName)
     1105                    {
     1106                        return true;
     1107                    }
     1108                }
     1109            }
     1110        }
     1111    }
     1112
     1113#else
     1114    VERBOSE(VB_IMPORTANT, "processRunning(): Error, "
     1115            "only linux supported");
     1116#endif
     1117
     1118    return false;
     1119}
  • 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