From: Michael Stapelberg Date: Tue, 3 Oct 2017 08:02:41 +0000 (+0200) Subject: i3test: blockingly wait for events X-Git-Tag: 4.15~48^2~2 X-Git-Url: https://git.sur5r.net/?a=commitdiff_plain;h=7a672a9d41b60201534c17bc706f9c46dd20ad66;hp=8e528d2de8d75eb1b053ccac5b1f119292eb68dc;p=i3%2Fi3 i3test: blockingly wait for events …as polling the xcb file descriptor directly is not reliable. --- diff --git a/testcases/lib/i3test.pm.in b/testcases/lib/i3test.pm.in index 429e51d4..ed239241 100644 --- a/testcases/lib/i3test.pm.in +++ b/testcases/lib/i3test.pm.in @@ -193,29 +193,11 @@ received, etc. sub wait_for_event { my ($timeout, $cb) = @_; - my $cv = AE::cv; - $x->flush; - # unfortunately, there is no constant for this - my $ae_read = 0; - - my $guard = AE::io $x->get_file_descriptor, $ae_read, sub { - while (defined(my $event = $x->poll_for_event)) { - if ($cb->($event)) { - $cv->send(1); - last; - } - } - }; - - # Trigger timeout after $timeout seconds (can be fractional) - my $t = AE::timer $timeout, 0, sub { warn "timeout ($timeout secs)"; $cv->send(0) }; - - my $result = $cv->recv; - undef $t; - undef $guard; - return $result; + while (defined(my $event = $x->wait_for_event)) { + return 1 if $cb->($event); + } } =head2 wait_for_map($window)