2014-03-08 14:18:56 +01:00
|
|
|
#!perl
|
|
|
|
# vim:ts=4:sw=4:expandtab
|
|
|
|
#
|
|
|
|
# Please read the following documents before working on tests:
|
|
|
|
# • http://build.i3wm.org/docs/testsuite.html
|
|
|
|
# (or docs/testsuite)
|
|
|
|
#
|
|
|
|
# • http://build.i3wm.org/docs/lib-i3test.html
|
|
|
|
# (alternatively: perldoc ./testcases/lib/i3test.pm)
|
|
|
|
#
|
|
|
|
# • http://build.i3wm.org/docs/ipc.html
|
|
|
|
# (or docs/ipc)
|
|
|
|
#
|
|
|
|
# • http://onyxneon.com/books/modern_perl/modern_perl_a4.pdf
|
|
|
|
# (unless you are already familiar with Perl)
|
|
|
|
#
|
|
|
|
# Verifies that windows with properties that indicate they should be floating
|
|
|
|
# are indeed opened floating.
|
|
|
|
# Ticket: #1182
|
|
|
|
# Bug still in: 4.7.2-97-g84fc808
|
|
|
|
use i3test;
|
|
|
|
use X11::XCB qw(PROP_MODE_REPLACE);
|
|
|
|
|
|
|
|
sub open_with_type {
|
|
|
|
my $window_type = shift;
|
|
|
|
|
|
|
|
my $window = open_window(
|
|
|
|
window_type => $x->atom(name => $window_type),
|
|
|
|
);
|
|
|
|
return $window;
|
|
|
|
}
|
|
|
|
|
|
|
|
sub open_with_state {
|
|
|
|
my $window_state = shift;
|
|
|
|
|
|
|
|
my $window = open_window(
|
|
|
|
before_map => sub {
|
|
|
|
my ($window) = @_;
|
|
|
|
|
|
|
|
my $atomname = $x->atom(name => '_NET_WM_STATE');
|
|
|
|
my $atomtype = $x->atom(name => 'ATOM');
|
|
|
|
$x->change_property(
|
|
|
|
PROP_MODE_REPLACE,
|
|
|
|
$window->id,
|
|
|
|
$atomname->id,
|
|
|
|
$atomtype->id,
|
|
|
|
32,
|
|
|
|
1,
|
|
|
|
pack('L1', $x->atom(name => $window_state)->id),
|
|
|
|
);
|
|
|
|
},
|
|
|
|
);
|
|
|
|
|
|
|
|
return $window;
|
|
|
|
}
|
|
|
|
|
|
|
|
sub open_with_fixed_size {
|
|
|
|
# The type of the WM_NORMAL_HINTS property is WM_SIZE_HINTS
|
|
|
|
# http://tronche.com/gui/x/icccm/sec-4.html#s-4.1.2.3
|
|
|
|
my $XCB_ICCCM_SIZE_HINT_P_MIN_SIZE = 0x32;
|
|
|
|
my $XCB_ICCCM_SIZE_HINT_P_MAX_SIZE = 0x16;
|
|
|
|
|
|
|
|
my $flags = $XCB_ICCCM_SIZE_HINT_P_MIN_SIZE | $XCB_ICCCM_SIZE_HINT_P_MAX_SIZE;
|
|
|
|
|
2016-11-28 22:09:39 +01:00
|
|
|
my $min_width = 150;
|
|
|
|
my $max_width = 150;
|
|
|
|
my $min_height = 100;
|
|
|
|
my $max_height = 100;
|
2014-03-08 14:18:56 +01:00
|
|
|
|
|
|
|
my $pad = 0x00;
|
|
|
|
|
|
|
|
my $window = open_window(
|
|
|
|
before_map => sub {
|
|
|
|
my ($window) = @_;
|
|
|
|
|
|
|
|
my $atomname = $x->atom(name => 'WM_NORMAL_HINTS');
|
|
|
|
my $atomtype = $x->atom(name => 'WM_SIZE_HINTS');
|
|
|
|
$x->change_property(
|
|
|
|
PROP_MODE_REPLACE,
|
|
|
|
$window->id,
|
|
|
|
$atomname->id,
|
|
|
|
$atomtype->id,
|
|
|
|
32,
|
|
|
|
12,
|
2016-11-28 22:09:39 +01:00
|
|
|
pack('C5N7', $flags, $pad, $pad, $pad, $pad, 0, 0, 0, $min_width, $min_height, $max_width, $max_height),
|
2014-03-08 14:18:56 +01:00
|
|
|
);
|
|
|
|
},
|
|
|
|
);
|
|
|
|
|
|
|
|
return $window;
|
|
|
|
}
|
|
|
|
|
|
|
|
my $ws = fresh_workspace;
|
|
|
|
|
|
|
|
my $window = open_with_type '_NET_WM_WINDOW_TYPE_DIALOG';
|
|
|
|
is(get_ws($ws)->{floating_nodes}[0]->{nodes}[0]->{window}, $window->id, 'Dialog window opened floating');
|
|
|
|
$window->unmap;
|
|
|
|
|
|
|
|
$window = open_with_type '_NET_WM_WINDOW_TYPE_UTILITY';
|
|
|
|
is(get_ws($ws)->{floating_nodes}[0]->{nodes}[0]->{window}, $window->id, 'Utility window opened floating');
|
|
|
|
$window->unmap;
|
|
|
|
|
|
|
|
$window = open_with_type '_NET_WM_WINDOW_TYPE_TOOLBAR';
|
|
|
|
is(get_ws($ws)->{floating_nodes}[0]->{nodes}[0]->{window}, $window->id, 'Toolbar window opened floating');
|
|
|
|
$window->unmap;
|
|
|
|
|
|
|
|
$window = open_with_type '_NET_WM_WINDOW_TYPE_SPLASH';
|
|
|
|
is(get_ws($ws)->{floating_nodes}[0]->{nodes}[0]->{window}, $window->id, 'Splash window opened floating');
|
|
|
|
$window->unmap;
|
|
|
|
|
|
|
|
$window = open_with_state '_NET_WM_STATE_MODAL';
|
|
|
|
is(get_ws($ws)->{floating_nodes}[0]->{nodes}[0]->{window}, $window->id, 'Modal window opened floating');
|
|
|
|
$window->unmap;
|
|
|
|
|
|
|
|
$window = open_with_fixed_size;
|
|
|
|
is(get_ws($ws)->{floating_nodes}[0]->{nodes}[0]->{window}, $window->id, 'Fixed size window opened floating');
|
2016-11-28 22:09:39 +01:00
|
|
|
is(get_ws($ws)->{floating_nodes}[0]->{nodes}[0]->{window_rect}->{width}, 150, 'Fixed size window opened with minimum width');
|
|
|
|
is(get_ws($ws)->{floating_nodes}[0]->{nodes}[0]->{window_rect}->{height}, 100, 'Fixed size window opened with minimum height');
|
2014-03-08 14:18:56 +01:00
|
|
|
$window->unmap;
|
|
|
|
|
|
|
|
done_testing;
|