warnings->import;
$x ||= i3test::X11->new;
+ # set the pointer to a predictable position in case a previous test has
+ # disturbed it
+ $x->root->warp_pointer(0, 0);
$cv->recv if $i3_autostart;
@_ = ($class);
sub wait_for_map {
my ($win) = @_;
my $id = (blessed($win) && $win->isa('X11::XCB::Window')) ? $win->id : $win;
- wait_for_event 2, sub {
+ wait_for_event 4, sub {
$_[0]->{response_type} == MAP_NOTIFY and $_[0]->{window} == $id
};
}
sub wait_for_unmap {
my ($win) = @_;
# my $id = (blessed($win) && $win->isa('X11::XCB::Window')) ? $win->id : $win;
- wait_for_event 2, sub {
+ wait_for_event 4, sub {
$_[0]->{response_type} == UNMAP_NOTIFY # and $_[0]->{window} == $id
};
sync_with_i3();
$args{name} //= 'Window ' . counter_window();
my $window = $x->root->create_child(%args);
+ $window->add_hint('input');
if ($before_map) {
# TODO: investigate why _create is not needed
for my $output (@outputs) {
next if $output->{name} eq '__i3';
# get the first CT_CON of each output
- my $content = first { $_->{type} == 2 } @{$output->{nodes}};
+ my $content = first { $_->{type} eq 'con' } @{$output->{nodes}};
@cons = (@cons, @{$content->{nodes}});
}
[ map { $_->{name} } @cons ]
@{$tree->{nodes}};
die "BUG: Could not find output $args{output}" unless defined($output);
# Get the focused workspace on that output and switch to it.
- my $content = first { $_->{type} == 2 } @{$output->{nodes}};
+ my $content = first { $_->{type} eq 'con' } @{$output->{nodes}};
my $focused = $content->{focus}->[0];
my $workspace = first { $_->{id} == $focused } @{$content->{nodes}};
$workspace = $workspace->{name};
my @workspaces;
for my $output (@outputs) {
# get the first CT_CON of each output
- my $content = first { $_->{type} == 2 } @{$output->{nodes}};
+ my $content = first { $_->{type} eq 'con' } @{$output->{nodes}};
@workspaces = (@workspaces, @{$content->{nodes}});
}
for my $output (@outputs) {
if (!defined($which)) {
@docked = (@docked, map { @{$_->{nodes}} }
- grep { $_->{type} == 5 }
+ grep { $_->{type} eq 'dockarea' }
@{$output->{nodes}});
} elsif ($which eq 'top') {
- my $first = first { $_->{type} == 5 } @{$output->{nodes}};
+ my $first = first { $_->{type} eq 'dockarea' } @{$output->{nodes}};
@docked = (@docked, @{$first->{nodes}}) if defined($first);
} elsif ($which eq 'bottom') {
- my @matching = grep { $_->{type} == 5 } @{$output->{nodes}};
+ my @matching = grep { $_->{type} eq 'dockarea' } @{$output->{nodes}};
my $last = $matching[-1];
@docked = (@docked, @{$last->{nodes}}) if defined($last);
}
=head2 cmd($command)
-Sends the specified command to i3.
+Sends the specified command to i3 and returns the output.
my $ws = unused_workspace;
cmd "workspace $ws";
my $tree = $i3->get_tree->recv;
my $focused = $tree->{focus}->[0];
my $output = first { $_->{id} == $focused } @{$tree->{nodes}};
- my $content = first { $_->{type} == 2 } @{$output->{nodes}};
+ my $content = first { $_->{type} eq 'con' } @{$output->{nodes}};
my $first = first { $_->{fullscreen_mode} == 1 } @{$content->{nodes}};
return $first->{name}
}
# event mask, it will get the ClientMessage.
$x->send_event(0, $root, EVENT_MASK_SUBSTRUCTURE_REDIRECT, $msg);
+ return $myrnd if $args{dont_wait_for_event};
+
# now wait until the reply is here
- return wait_for_event 2, sub {
+ return wait_for_event 4, sub {
my ($event) = @_;
# TODO: const
return 0 unless $event->{response_type} == 161;
=cut
sub get_socket_path {
my ($cache) = @_;
- $cache ||= 1;
+ $cache //= 1;
if ($cache && defined($_cached_socket_path)) {
return $_cached_socket_path;