std::chrono::milliseconds Xidle::operator()() const { XScreenSaverInfo ssi; if (!XScreenSaverQueryInfo(display, DefaultRootWindow(display), &ssi)) { throw std::runtime_error("could not get screen saver info"); } auto milliseconds = workaroundCreepyXServer(display, ssi.idle); return std::chrono::milliseconds{milliseconds}; }
long get() { if (NULL == dpy || NULL == ssi) { return -2; } if (!XScreenSaverQueryInfo(dpy, DefaultRootWindow(dpy), ssi)) { return -1; } return workaroundCreepyXServer(dpy, ssi->idle); }
int main(int argc, char *argv[]) { XScreenSaverInfo *ssi; Display *dpy; int event_basep, error_basep; if (argc != 1) { usage(argv[0]); return 1; } dpy = XOpenDisplay(NULL); if (dpy == NULL) { fprintf(stderr, "couldn't open display\n"); return 1; } if (!XScreenSaverQueryExtension(dpy, &event_basep, &error_basep)) { fprintf(stderr, "screen saver extension not supported\n"); return 1; } ssi = XScreenSaverAllocInfo(); if (ssi == NULL) { fprintf(stderr, "couldn't allocate screen saver info\n"); return 1; } if (!XScreenSaverQueryInfo(dpy, DefaultRootWindow(dpy), ssi)) { fprintf(stderr, "couldn't query screen saver info\n"); return 1; } printf("%lu\n", workaroundCreepyXServer(dpy, ssi->idle)); XFree(ssi); XCloseDisplay(dpy); return 0; }
unsigned long getIdleTime() { XScreenSaverInfo ssi; Display *dpy; int event_basep, error_basep; dpy = XOpenDisplay(NULL); if (dpy == NULL) { //fprintf(stderr, "Couldn't open display\n"); return -1; } if (!XScreenSaverQueryExtension(dpy, &event_basep, &error_basep)) { //fprintf(stderr, "Screen saver extension not supported\n"); return -1; } if (!XScreenSaverQueryInfo(dpy, DefaultRootWindow(dpy), &ssi)) { //fprintf(stderr, "Couldn't query screen saver info\n"); return -1; } return workaroundCreepyXServer(dpy, ssi.idle); }