PowerComponentX11.cpp 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. #include <stdlib.h>
  2. #include "PowerComponentX11.h"
  3. ///////////////////////////////////////////////////////////////////////////////////////////////////
  4. PowerComponentX11::PowerComponentX11() : PowerComponent(0)
  5. {
  6. m_timer = new QTimer(this);
  7. connect(m_timer, &QTimer::timeout, this, &PowerComponentX11::onTimer);
  8. m_timer->setInterval(15 * 1000);
  9. }
  10. ///////////////////////////////////////////////////////////////////////////////////////////////////
  11. void PowerComponentX11::onTimer()
  12. {
  13. if (!m_process && !m_broken)
  14. {
  15. m_process = new QProcess(this);
  16. m_process->setProcessChannelMode(QProcess::ForwardedChannels);
  17. connect(m_process, (void (QProcess::*)(int,QProcess::ExitStatus))&QProcess::finished,
  18. this, &PowerComponentX11::onProcessFinished);
  19. connect(m_process, (void (QProcess::*)(QProcess::ProcessError))&QProcess::error,
  20. this, &PowerComponentX11::onProcessError);
  21. m_process->start("xdg-screensaver", {"reset"});
  22. }
  23. }
  24. ///////////////////////////////////////////////////////////////////////////////////////////////////
  25. void PowerComponentX11::onProcessFinished(int exitCode, QProcess::ExitStatus exitStatus)
  26. {
  27. if (m_process)
  28. m_process->deleteLater();
  29. m_process = 0;
  30. }
  31. ///////////////////////////////////////////////////////////////////////////////////////////////////
  32. void PowerComponentX11::onProcessError(QProcess::ProcessError error)
  33. {
  34. qCritical() << "Disabling screensaver is not working. Make sure xdg-screensaver is installed.";
  35. m_broken = true;
  36. onProcessFinished(-1, QProcess::CrashExit);
  37. }
  38. ///////////////////////////////////////////////////////////////////////////////////////////////////
  39. void PowerComponentX11::doDisableScreensaver()
  40. {
  41. m_timer->start();
  42. }
  43. ///////////////////////////////////////////////////////////////////////////////////////////////////
  44. void PowerComponentX11::doEnableScreensaver()
  45. {
  46. m_timer->stop();
  47. }