diff options
Diffstat (limited to 'SwifTools/Idle/XSSIdleQuerier.cpp')
-rw-r--r-- | SwifTools/Idle/XSSIdleQuerier.cpp | 36 |
1 files changed, 36 insertions, 0 deletions
diff --git a/SwifTools/Idle/XSSIdleQuerier.cpp b/SwifTools/Idle/XSSIdleQuerier.cpp new file mode 100644 index 0000000..2259620 --- /dev/null +++ b/SwifTools/Idle/XSSIdleQuerier.cpp @@ -0,0 +1,36 @@ +#include "SwifTools/Idle/XSSIdleQuerier.h" + +#include <cassert> +#include <iostream> + +namespace Swift { + +XSSIdleQuerier::XSSIdleQuerier() : display(NULL), info(NULL) { + display = XOpenDisplay(NULL); + assert(display); + rootWindow = DefaultRootWindow(display); + int event, error; + available = XScreenSaverQueryExtension(display, &event, &error); + if (available) { + info = XScreenSaverAllocInfo(); + } + else { + std::cerr << "Warning: XScreenSaver extension not found. Idle time detection will not work." << std::endl; + } +} + +XSSIdleQuerier::~XSSIdleQuerier() { + XFree(info); +} + +int XSSIdleQuerier::getIdleTimeSeconds() { + if (available) { + XScreenSaverQueryInfo(display, rootWindow, info); + return info->idle / 1000; + } + else { + return 0; + } +} + +} |