#include <xcb/xcb_image.h>
#include <xcb/xcb_atom.h>
#include <xcb/xcb_aux.h>
-#include <xcb/composite.h>
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
#include <assert.h>
#include <err.h>
#include <time.h>
+#include <sys/time.h>
#include "cursors.h"
#include "unlock_indicator.h"
uint32_t mask = 0;
uint32_t values[3];
xcb_window_t win = xcb_generate_id(conn);
- xcb_window_t parent_win = scr->root;
-
- /* Check whether the composite extension is available */
- const xcb_query_extension_reply_t *extension_query = NULL;
- xcb_generic_error_t *error = NULL;
- xcb_composite_get_overlay_window_cookie_t cookie;
- xcb_composite_get_overlay_window_reply_t *composite_reply = NULL;
-
- extension_query = xcb_get_extension_data(conn, &xcb_composite_id);
- if (extension_query && extension_query->present) {
- /* When composition is used, we need to use the composite overlay
- * window instead of the normal root window to be able to cover
- * composited windows */
- cookie = xcb_composite_get_overlay_window(conn, scr->root);
- composite_reply = xcb_composite_get_overlay_window_reply(conn, cookie, &error);
-
- if (!error && composite_reply) {
- parent_win = composite_reply->overlay_win;
- }
-
- free(composite_reply);
- free(error);
- }
if (pixmap == XCB_NONE) {
mask |= XCB_CW_BACK_PIXEL;
xcb_create_window(conn,
XCB_COPY_FROM_PARENT,
- win, /* the window id */
- parent_win,
+ win, /* the window id */
+ scr->root, /* parent == root */
0, 0,
scr->width_in_pixels,
scr->height_in_pixels, /* dimensions */
xcb_grab_keyboard_cookie_t kcookie;
xcb_grab_keyboard_reply_t *kreply;
+ const suseconds_t screen_redraw_timeout = 100000; /* 100ms */
int tries = 10000;
/* Using few variables to trigger a redraw_screen() if too many tries */
bool redrawn = false;
- time_t start = clock();
+ struct timeval start;
+ if (gettimeofday(&start, NULL) == -1) {
+ err(EXIT_FAILURE, "gettimeofday");
+ }
while (tries-- > 0) {
pcookie = xcb_grab_pointer(
/* Make this quite a bit slower */
usleep(50);
- /* Measure elapsed time and trigger a screen redraw if elapsed > 250000 */
+ struct timeval now;
+ if (gettimeofday(&now, NULL) == -1) {
+ err(EXIT_FAILURE, "gettimeofday");
+ }
+
+ struct timeval elapsed;
+ timersub(&now, &start, &elapsed);
+
if (!redrawn &&
(tries % 100) == 0 &&
- (clock() - start) > 250000) {
+ elapsed.tv_usec >= screen_redraw_timeout) {
redraw_screen();
redrawn = true;
}
/* Make this quite a bit slower */
usleep(50);
- /* Measure elapsed time and trigger a screen redraw if elapsed > 250000 */
+ struct timeval now;
+ if (gettimeofday(&now, NULL) == -1) {
+ err(EXIT_FAILURE, "gettimeofday");
+ }
+
+ struct timeval elapsed;
+ timersub(&now, &start, &elapsed);
+
+ /* Trigger a screen redraw if 100ms elapsed */
if (!redrawn &&
(tries % 100) == 0 &&
- (clock() - start) > 250000) {
+ elapsed.tv_usec >= screen_redraw_timeout) {
redraw_screen();
redrawn = true;
}