X-Git-Url: http://challenge-bot.com/repos/?a=blobdiff_plain;f=idle_x11.cpp;h=4984cdf8b9124e9b3713d4979a039e0ed2c050ab;hb=3cc6b22c52cc533287fba6954aead590209eb374;hp=1b5e6e4f9105cf38df54c40096f56a02ae9e0460;hpb=4f219a9f3ebe898145cce69ce2ecf8ce3366a4fd;p=ozzloy%40gmail.com%2Foble diff --git a/idle_x11.cpp b/idle_x11.cpp index 1b5e6e4..4984cdf 100644 --- a/idle_x11.cpp +++ b/idle_x11.cpp @@ -23,108 +23,18 @@ #include #include -static Display *dpy = NULL; -static void get_alarm(XSyncAlarm *alarm, XSyncCounter counter, XSyncTestType type, XSyncValue value) +int reset_idle_time() { - XSyncAlarmAttributes attrs; - - XSyncValue delta; - XSyncIntToValue(&delta, 0); - - static const unsigned long flags = XSyncCACounter | XSyncCATestType | XSyncCAValue | XSyncCADelta; - - attrs.trigger.counter = counter; - attrs.trigger.test_type = type; - attrs.trigger.wait_value = value; - attrs.delta = delta; - - if (*alarm) - XSyncChangeAlarm(dpy, *alarm, flags, &attrs); - else - *alarm = XSyncCreateAlarm(dpy, flags, &attrs); -} - -static void die(const char *errstr) -{ - fputs(errstr, stderr); - fflush(stderr); - exit(EXIT_FAILURE); -} - -bool wait_for_idle_time(int idle_time) -{ - static int xsync_event_base; - static XSyncAlarm idle_alarm = None; - static XSyncAlarm reset_alarm = None; - static XSyncCounter idle = None; - static XSyncValue idle_timeout; - - if (idle == None) { - if (!(dpy = XOpenDisplay(NULL))) - die("Could not open X11 display; exiting.\n"); - - int dummy; - if (!XQueryExtension(dpy, "XTEST", &dummy, &dummy, &dummy)) - die("XTEST extension not available; cannot reset idle time\n"); - - int xsync_error_base; - int xsync_major = SYNC_MAJOR_VERSION; - int xsync_minor = SYNC_MINOR_VERSION; - - if (!XSyncQueryExtension(dpy, &xsync_event_base, &xsync_error_base) || !XSyncInitialize(dpy, &xsync_major, &xsync_minor)) - die("No XSync extension; exiting.\n"); - - int i; - XSyncSystemCounter *counters = XSyncListSystemCounters(dpy, &i); - while (i--) - if (!strcmp(counters[i].name, "IDLETIME")) - idle = counters[i].counter; - XSyncFreeSystemCounterList(counters); - - if (idle == None) - die("No IDLETIME counter! xorg-server 1.3 and higher should support it. Exiting.\n"); - - XSyncIntToValue(&idle_timeout, idle_time * 1000); - get_alarm(&idle_alarm, idle, XSyncPositiveComparison, idle_timeout); - } - - XEvent ev; - - while (!XNextEvent(dpy, &ev)) { - if (ev.type == xsync_event_base + XSyncAlarmNotify) { - XSyncAlarmNotifyEvent *e = (XSyncAlarmNotifyEvent*)&ev; - - if (e->alarm == idle_alarm) { - int overflow; - XSyncValue reset_timeout; - XSyncValue minus_one; - - XSyncIntToValue(&minus_one, -1); - XSyncValueAdd(&reset_timeout, e->counter_value, minus_one, &overflow); - get_alarm(&reset_alarm, idle, XSyncNegativeComparison, reset_timeout); - - return true; - } else if (e->alarm == reset_alarm) { - get_alarm(&idle_alarm, idle, XSyncPositiveComparison, idle_timeout); - } - } - } - - return false; -} - -void reset_idle_time() -{ - if (!dpy) { + Display *display = NULL; + if (!display) { if (!(dpy = XOpenDisplay(NULL))) { fputs("Could not open X11 display.\n", stderr); return; } } - - XScreenSaverSuspend(dpy, True); - XSync(dpy, False); - XScreenSaverSuspend(dpy, False); - XSync(dpy, False); + int x_force_screen_saver; + int screen_saver_mode = ScreenSaverReset; + x_force_screen_saver = XForceScreenSaver(dpy, screen_saver_mode); + return x_force_screen_saver; }