Ticket #29: screensaver-x11-1.1.diff
| File screensaver-x11-1.1.diff, 4.7 KB (added by , 21 years ago) |
|---|
-
libs/libmyth/screensaver-x11.cpp
1 1 #define QT_CLEAN_NAMESPACE // no qt 1.x compatability, INT32 conflicts with X 2 2 3 #include "screensaver-x11.h" 3 4 5 #include <qdir.h> 6 #include <qfile.h> 7 4 8 #include <X11/Xlib.h> 5 9 10 6 11 extern "C" { 7 12 #include <X11/extensions/dpms.h> 8 13 } 9 14 10 15 #include "mythcontext.h" 16 #include "util.h" 11 17 18 #include <iostream> 19 #include <qstring.h> 20 #include <qstringlist.h> 21 #include <qregexp.h> 22 12 23 class ScreenSaverX11Private 13 24 { 14 25 struct … … 19 30 int preferblank; 20 31 int allowexposure; 21 32 bool dpmsdisabled; 33 bool xscreensaverRunning; 22 34 } state; 23 35 24 36 friend class ScreenSaverX11; 25 37 }; 26 38 39 bool ScreenSaverX11::processRunning(const QString& pName) 40 { 41 QDir procDir(QString("/proc")); 42 procDir.setFilter(QDir::Dirs | QDir::Readable); 43 if (procDir.exists()) 44 { 45 QStringList processes = procDir.entryList(); 46 for (QStringList::iterator i = processes.begin(); i != processes.end(); i++) 47 { 48 QString process = *i; 49 QRegExp rx( "^\\d+$" ); 50 if (rx.search(process) == 0) 51 { 52 QFile processStatFile(QString("/proc/%1/stat").arg(process)); 53 if (processStatFile.open(IO_ReadOnly)) 54 { 55 QTextStream stream(&processStatFile); 56 QString processName; 57 stream >> processName >> processName; 58 processStatFile.close(); 59 if (QString("(%1)").arg(pName) == processName) 60 { 61 return true; 62 } 63 } 64 } 65 } 66 } 67 return false; 68 } 69 70 ScreenSaverXSSTimer::ScreenSaverXSSTimer() 71 { 72 resetTimer = new QTimer(); 73 connect(resetTimer, SIGNAL(timeout()), this, SLOT(resetSlot())); 74 } 75 76 ScreenSaverXSSTimer::~ScreenSaverXSSTimer() 77 { 78 delete resetTimer; 79 } 80 81 void ScreenSaverXSSTimer::resetXSS() 82 { 83 myth_system(QString("xscreensaver-command -deactivate >&- 2>&- &")); 84 } 85 86 void ScreenSaverXSSTimer::resetSlot() 87 { 88 resetXSS(); 89 } 90 27 91 ScreenSaverX11::ScreenSaverX11() 28 92 { 29 93 d = new ScreenSaverX11Private(); 94 d->state.xscreensaverRunning = processRunning("xscreensaver"); 95 if (d->state.xscreensaverRunning) 96 { 97 t = new ScreenSaverXSSTimer(); 98 t->timeoutInterval = -1; 99 VERBOSE(VB_GENERAL, QString("XScreenSaver support enabled")); 100 } 30 101 } 31 102 32 103 ScreenSaverX11::~ScreenSaverX11() 33 104 { 34 105 delete d; 106 delete t; 35 107 } 36 108 37 109 void ScreenSaverX11::Disable(void) … … 63 135 VERBOSE(VB_GENERAL, "Disable DPMS"); 64 136 } 65 137 } 138 139 if (d->state.xscreensaverRunning) 140 { 141 if (t->resetTimer) 142 { 143 t->resetTimer->stop(); 144 } 145 if (t->timeoutInterval == -1) 146 { 147 t->timeoutInterval = 148 gContext->GetNumSettingOnHost("xscreensaverInterval", 149 gContext->GetHostName(), 150 60) * 1000; 151 } 152 if (t->timeoutInterval > 0) 153 { 154 t->resetTimer->start(t->timeoutInterval, FALSE); 155 } 156 } 66 157 } 67 158 68 159 void ScreenSaverX11::Restore(void) … … 84 175 VERBOSE(VB_GENERAL, "Enable DPMS"); 85 176 } 86 177 } 178 179 if (d->state.xscreensaverRunning) 180 { 181 if (t->resetTimer) 182 { 183 t->resetTimer->stop(); 184 } 185 } 87 186 } 88 187 89 188 void ScreenSaverX11::Reset(void) 90 189 { 91 190 XResetScreenSaver(qt_xdisplay()); 191 if (d->state.xscreensaverRunning) 192 { 193 t->resetXSS(); 194 } 92 195 } 93 196 -
libs/libmyth/screensaver-x11.h
3 3 4 4 #include "screensaver.h" 5 5 6 #include <qobject.h> 7 #include <qtimer.h> 8 9 class ScreenSaverXSSTimer : public QObject 10 { 11 Q_OBJECT 12 public: 13 ScreenSaverXSSTimer(); 14 ~ScreenSaverXSSTimer(); 15 void resetXSS(void); 16 int timeoutInterval; 17 QTimer *resetTimer; 18 19 private slots: 20 void resetSlot(); 21 22 }; 23 6 24 class ScreenSaverX11 : public ScreenSaverControl 7 25 { 8 26 public: … … 12 30 void Disable(void); 13 31 void Restore(void); 14 32 void Reset(void); 15 33 34 private: 35 bool processRunning(const QString& pName); 36 16 37 protected: 17 38 class ScreenSaverX11Private *d; 39 class ScreenSaverXSSTimer *t; 18 40 }; 19 41 20 42 #endif // MYTH_SCREENSAVER_X11_H
