From 1c97a8484723b7db6c96c3b7bfa4c86c26f47b5a Mon Sep 17 00:00:00 2001 From: eplanet Date: Wed, 28 Sep 2016 03:39:52 +0200 Subject: Displaying locking message when grabbing the pointer/keyboard. (#88) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Display "locking…" message when grabbing the pointer/keyboard, after at least 250 ms of unfruitful attempts. If grabbing eventually fails, application will not fork and return 1. --- xcb.c | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) (limited to 'xcb.c') diff --git a/xcb.c b/xcb.c index 3e8cd07..92c7846 100644 --- a/xcb.c +++ b/xcb.c @@ -18,8 +18,10 @@ #include #include #include +#include #include "cursors.h" +#include "unlock_indicator.h" xcb_connection_t *conn; xcb_screen_t *screen; @@ -170,6 +172,10 @@ void grab_pointer_and_keyboard(xcb_connection_t *conn, xcb_screen_t *screen, xcb int tries = 10000; + /* Using few variables to trigger a redraw_screen() if too many tries */ + bool redrawn = false; + time_t start = clock(); + while (tries-- > 0) { pcookie = xcb_grab_pointer( conn, @@ -190,6 +196,14 @@ void grab_pointer_and_keyboard(xcb_connection_t *conn, xcb_screen_t *screen, xcb /* Make this quite a bit slower */ usleep(50); + + /* Measure elapsed time and trigger a screen redraw if elapsed > 250000 */ + if (!redrawn && + (tries % 100) == 0 && + (clock() - start) > 250000) { + redraw_screen(); + redrawn = true; + } } while (tries-- > 0) { @@ -209,6 +223,14 @@ void grab_pointer_and_keyboard(xcb_connection_t *conn, xcb_screen_t *screen, xcb /* Make this quite a bit slower */ usleep(50); + + /* Measure elapsed time and trigger a screen redraw if elapsed > 250000 */ + if (!redrawn && + (tries % 100) == 0 && + (clock() - start) > 250000) { + redraw_screen(); + redrawn = true; + } } if (tries <= 0) -- cgit v1.1