]> git.sur5r.net Git - i3/i3/commitdiff
i3test: blockingly wait for events
authorMichael Stapelberg <michael@stapelberg.de>
Tue, 3 Oct 2017 08:02:41 +0000 (10:02 +0200)
committerMichael Stapelberg <michael@stapelberg.de>
Mon, 23 Oct 2017 19:06:07 +0000 (21:06 +0200)
…as polling the xcb file descriptor directly is not reliable.

testcases/lib/i3test.pm.in

index 429e51d4187e89b56f027195d51592f06e6bc42c..ed239241c84dadba0412c3609701d6cf957c5505 100644 (file)
@@ -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)