tests: move set_wm_class to X11::XCB::Window
This code was duplicated way too often for a long time :)
This commit is contained in:
parent
031de8f720
commit
8d38529bcd
|
@ -9,7 +9,7 @@ WriteMakefile(
|
||||||
PREREQ_PM => {
|
PREREQ_PM => {
|
||||||
'AnyEvent' => 0,
|
'AnyEvent' => 0,
|
||||||
'AnyEvent::I3' => '0.14',
|
'AnyEvent::I3' => '0.14',
|
||||||
'X11::XCB' => '0.03',
|
'X11::XCB' => '0.09',
|
||||||
'Inline' => 0,
|
'Inline' => 0,
|
||||||
'ExtUtils::PkgConfig' => 0,
|
'ExtUtils::PkgConfig' => 0,
|
||||||
'Test::More' => '0.94',
|
'Test::More' => '0.94',
|
||||||
|
|
|
@ -17,7 +17,6 @@
|
||||||
# Tests all kinds of matching methods
|
# Tests all kinds of matching methods
|
||||||
#
|
#
|
||||||
use i3test;
|
use i3test;
|
||||||
use X11::XCB qw(PROP_MODE_REPLACE);
|
|
||||||
|
|
||||||
my $tmp = fresh_workspace;
|
my $tmp = fresh_workspace;
|
||||||
|
|
||||||
|
@ -61,39 +60,10 @@ is_num_children($tmp, 0, 'window killed');
|
||||||
|
|
||||||
$tmp = fresh_workspace;
|
$tmp = fresh_workspace;
|
||||||
|
|
||||||
# TODO: move to X11::XCB
|
my $left = open_window(wm_class => 'special', name => 'left');
|
||||||
sub set_wm_class {
|
|
||||||
my ($id, $class, $instance) = @_;
|
|
||||||
|
|
||||||
# Add a _NET_WM_STRUT_PARTIAL hint
|
|
||||||
my $atomname = $x->atom(name => 'WM_CLASS');
|
|
||||||
my $atomtype = $x->atom(name => 'STRING');
|
|
||||||
|
|
||||||
$x->change_property(
|
|
||||||
PROP_MODE_REPLACE,
|
|
||||||
$id,
|
|
||||||
$atomname->id,
|
|
||||||
$atomtype->id,
|
|
||||||
8,
|
|
||||||
length($class) + length($instance) + 2,
|
|
||||||
"$instance\x00$class\x00"
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
sub open_special {
|
|
||||||
my %args = @_;
|
|
||||||
my $wm_class = delete($args{wm_class}) || 'special';
|
|
||||||
|
|
||||||
return open_window(
|
|
||||||
%args,
|
|
||||||
before_map => sub { set_wm_class($_->id, $wm_class, $wm_class) },
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
my $left = open_special(name => 'left');
|
|
||||||
ok($left->mapped, 'left window mapped');
|
ok($left->mapped, 'left window mapped');
|
||||||
|
|
||||||
my $right = open_special(name => 'right');
|
my $right = open_window(wm_class => 'special', name => 'right');
|
||||||
ok($right->mapped, 'right window mapped');
|
ok($right->mapped, 'right window mapped');
|
||||||
|
|
||||||
# two windows should be here
|
# two windows should be here
|
||||||
|
@ -111,7 +81,7 @@ is_num_children($tmp, 1, 'one window still there');
|
||||||
|
|
||||||
$tmp = fresh_workspace;
|
$tmp = fresh_workspace;
|
||||||
|
|
||||||
$left = open_special(name => 'left', wm_class => 'special7');
|
$left = open_window(name => 'left', wm_class => 'special7');
|
||||||
ok($left->mapped, 'left window mapped');
|
ok($left->mapped, 'left window mapped');
|
||||||
is_num_children($tmp, 1, 'window opened');
|
is_num_children($tmp, 1, 'window opened');
|
||||||
|
|
||||||
|
@ -125,7 +95,7 @@ is_num_children($tmp, 0, 'window killed');
|
||||||
|
|
||||||
$tmp = fresh_workspace;
|
$tmp = fresh_workspace;
|
||||||
|
|
||||||
$left = open_special(name => 'ä 3', wm_class => 'special7');
|
$left = open_window(name => 'ä 3', wm_class => 'special7');
|
||||||
ok($left->mapped, 'left window mapped');
|
ok($left->mapped, 'left window mapped');
|
||||||
is_num_children($tmp, 1, 'window opened');
|
is_num_children($tmp, 1, 'window opened');
|
||||||
|
|
||||||
|
|
|
@ -49,29 +49,9 @@ wait_for_unmap $window;
|
||||||
cmp_ok(@content, '==', 0, 'no more nodes');
|
cmp_ok(@content, '==', 0, 'no more nodes');
|
||||||
diag('content = '. Dumper(\@content));
|
diag('content = '. Dumper(\@content));
|
||||||
|
|
||||||
|
|
||||||
# TODO: move this to X11::XCB::Window
|
|
||||||
sub set_wm_class {
|
|
||||||
my ($id, $class, $instance) = @_;
|
|
||||||
|
|
||||||
# Add a _NET_WM_STRUT_PARTIAL hint
|
|
||||||
my $atomname = $x->atom(name => 'WM_CLASS');
|
|
||||||
my $atomtype = $x->atom(name => 'STRING');
|
|
||||||
|
|
||||||
$x->change_property(
|
|
||||||
PROP_MODE_REPLACE,
|
|
||||||
$id,
|
|
||||||
$atomname->id,
|
|
||||||
$atomtype->id,
|
|
||||||
8,
|
|
||||||
length($class) + length($instance) + 2,
|
|
||||||
"$instance\x00$class\x00"
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
$window = open_window(
|
$window = open_window(
|
||||||
name => 'Borderless window',
|
name => 'Borderless window',
|
||||||
before_map => sub { set_wm_class($_->id, 'borderless', 'borderless') },
|
wm_class => 'borderless',
|
||||||
);
|
);
|
||||||
|
|
||||||
@content = @{get_ws_content($tmp)};
|
@content = @{get_ws_content($tmp)};
|
||||||
|
@ -190,7 +170,7 @@ $tmp = fresh_workspace;
|
||||||
|
|
||||||
$window = open_window(
|
$window = open_window(
|
||||||
name => 'usethis',
|
name => 'usethis',
|
||||||
before_map => sub { set_wm_class($_->id, 'borderless', 'borderless') },
|
wm_class => 'borderless',
|
||||||
);
|
);
|
||||||
|
|
||||||
@content = @{get_ws_content($tmp)};
|
@content = @{get_ws_content($tmp)};
|
||||||
|
@ -208,8 +188,7 @@ sync_with_i3;
|
||||||
cmp_ok(@content, '==', 0, 'no nodes on this workspace now');
|
cmp_ok(@content, '==', 0, 'no nodes on this workspace now');
|
||||||
|
|
||||||
$window->_create;
|
$window->_create;
|
||||||
|
$window->wm_class('borderless');
|
||||||
set_wm_class($window->id, 'borderless', 'borderless');
|
|
||||||
$window->name('notthis');
|
$window->name('notthis');
|
||||||
$window->map;
|
$window->map;
|
||||||
wait_for_map $window;
|
wait_for_map $window;
|
||||||
|
@ -238,7 +217,8 @@ $tmp = fresh_workspace;
|
||||||
|
|
||||||
$window = open_window(
|
$window = open_window(
|
||||||
name => 'usethis',
|
name => 'usethis',
|
||||||
before_map => sub { set_wm_class($_->id, 'bar', 'foo') },
|
wm_class => 'bar',
|
||||||
|
instance => 'foo',
|
||||||
);
|
);
|
||||||
|
|
||||||
@content = @{get_ws_content($tmp)};
|
@content = @{get_ws_content($tmp)};
|
||||||
|
@ -264,7 +244,8 @@ $tmp = fresh_workspace;
|
||||||
|
|
||||||
$window = open_window(
|
$window = open_window(
|
||||||
name => 'usethis',
|
name => 'usethis',
|
||||||
before_map => sub { set_wm_class($_->id, 'bar', 'foo') },
|
wm_class => 'bar',
|
||||||
|
instance => 'foo',
|
||||||
);
|
);
|
||||||
|
|
||||||
@content = @{get_ws_content($tmp)};
|
@content = @{get_ws_content($tmp)};
|
||||||
|
@ -292,7 +273,8 @@ $tmp = fresh_workspace;
|
||||||
|
|
||||||
$window = open_window(
|
$window = open_window(
|
||||||
name => 'usethis',
|
name => 'usethis',
|
||||||
before_map => sub { set_wm_class($_->id, 'bar', 'foo') },
|
wm_class => 'bar',
|
||||||
|
instance => 'foo',
|
||||||
);
|
);
|
||||||
|
|
||||||
@content = @{get_ws_content($tmp)};
|
@content = @{get_ws_content($tmp)};
|
||||||
|
|
|
@ -17,37 +17,16 @@
|
||||||
# Tests if assignments work
|
# Tests if assignments work
|
||||||
#
|
#
|
||||||
use i3test i3_autostart => 0;
|
use i3test i3_autostart => 0;
|
||||||
use X11::XCB qw(PROP_MODE_REPLACE);
|
|
||||||
|
|
||||||
# TODO: move to X11::XCB
|
|
||||||
sub set_wm_class {
|
|
||||||
my ($id, $class, $instance) = @_;
|
|
||||||
|
|
||||||
# Add a _NET_WM_STRUT_PARTIAL hint
|
|
||||||
my $atomname = $x->atom(name => 'WM_CLASS');
|
|
||||||
my $atomtype = $x->atom(name => 'STRING');
|
|
||||||
|
|
||||||
$x->change_property(
|
|
||||||
PROP_MODE_REPLACE,
|
|
||||||
$id,
|
|
||||||
$atomname->id,
|
|
||||||
$atomtype->id,
|
|
||||||
8,
|
|
||||||
length($class) + length($instance) + 2,
|
|
||||||
"$instance\x00$class\x00"
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
sub open_special {
|
sub open_special {
|
||||||
my %args = @_;
|
my %args = @_;
|
||||||
my $wm_class = delete($args{wm_class}) || 'special';
|
|
||||||
$args{name} //= 'special window';
|
$args{name} //= 'special window';
|
||||||
|
|
||||||
# We use dont_map because i3 will not map the window on the current
|
# We use dont_map because i3 will not map the window on the current
|
||||||
# workspace. Thus, open_window would time out in wait_for_map (2 seconds).
|
# workspace. Thus, open_window would time out in wait_for_map (2 seconds).
|
||||||
my $window = open_window(
|
my $window = open_window(
|
||||||
%args,
|
%args,
|
||||||
before_map => sub { set_wm_class($_->id, $wm_class, $wm_class) },
|
wm_class => 'special',
|
||||||
dont_map => 1,
|
dont_map => 1,
|
||||||
);
|
);
|
||||||
$window->map;
|
$window->map;
|
||||||
|
|
|
@ -18,37 +18,16 @@
|
||||||
# assigned to an invisible workspace
|
# assigned to an invisible workspace
|
||||||
#
|
#
|
||||||
use i3test i3_autostart => 0;
|
use i3test i3_autostart => 0;
|
||||||
use X11::XCB qw(PROP_MODE_REPLACE);
|
|
||||||
|
|
||||||
# TODO: move to X11::XCB
|
|
||||||
sub set_wm_class {
|
|
||||||
my ($id, $class, $instance) = @_;
|
|
||||||
|
|
||||||
# Add a _NET_WM_STRUT_PARTIAL hint
|
|
||||||
my $atomname = $x->atom(name => 'WM_CLASS');
|
|
||||||
my $atomtype = $x->atom(name => 'STRING');
|
|
||||||
|
|
||||||
$x->change_property(
|
|
||||||
PROP_MODE_REPLACE,
|
|
||||||
$id,
|
|
||||||
$atomname->id,
|
|
||||||
$atomtype->id,
|
|
||||||
8,
|
|
||||||
length($class) + length($instance) + 2,
|
|
||||||
"$instance\x00$class\x00"
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
sub open_special {
|
sub open_special {
|
||||||
my %args = @_;
|
my %args = @_;
|
||||||
my $wm_class = delete($args{wm_class}) || 'special';
|
|
||||||
$args{name} //= 'special window';
|
$args{name} //= 'special window';
|
||||||
|
|
||||||
# We use dont_map because i3 will not map the window on the current
|
# We use dont_map because i3 will not map the window on the current
|
||||||
# workspace. Thus, open_window would time out in wait_for_map (2 seconds).
|
# workspace. Thus, open_window would time out in wait_for_map (2 seconds).
|
||||||
my $window = open_window(
|
my $window = open_window(
|
||||||
%args,
|
%args,
|
||||||
before_map => sub { set_wm_class($_->id, $wm_class, $wm_class) },
|
wm_class => 'special',
|
||||||
dont_map => 1,
|
dont_map => 1,
|
||||||
);
|
);
|
||||||
$window->map;
|
$window->map;
|
||||||
|
|
|
@ -18,44 +18,13 @@
|
||||||
# window is shown on another workspace.
|
# window is shown on another workspace.
|
||||||
#
|
#
|
||||||
use i3test;
|
use i3test;
|
||||||
use List::Util qw(first);
|
|
||||||
use X11::XCB qw(:all);
|
|
||||||
|
|
||||||
my $i3 = i3(get_socket_path());
|
my $i3 = i3(get_socket_path());
|
||||||
my $tmp = fresh_workspace;
|
my $tmp = fresh_workspace;
|
||||||
|
|
||||||
# TODO: move to X11::XCB
|
|
||||||
sub set_wm_class {
|
|
||||||
my ($id, $class, $instance) = @_;
|
|
||||||
|
|
||||||
# Add a _NET_WM_STRUT_PARTIAL hint
|
|
||||||
my $atomname = $x->atom(name => 'WM_CLASS');
|
|
||||||
my $atomtype = $x->atom(name => 'STRING');
|
|
||||||
|
|
||||||
$x->change_property(
|
|
||||||
PROP_MODE_REPLACE,
|
|
||||||
$id,
|
|
||||||
$atomname->id,
|
|
||||||
$atomtype->id,
|
|
||||||
8,
|
|
||||||
length($class) + length($instance) + 2,
|
|
||||||
"$instance\x00$class\x00"
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
sub open_special {
|
|
||||||
my %args = @_;
|
|
||||||
my $wm_class = delete($args{wm_class}) || 'special';
|
|
||||||
|
|
||||||
return open_window(
|
|
||||||
%args,
|
|
||||||
before_map => sub { set_wm_class($_->id, $wm_class, $wm_class) },
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
my $win = open_window;
|
my $win = open_window;
|
||||||
|
|
||||||
my $scratch = open_special;
|
my $scratch = open_window(wm_class => 'special');
|
||||||
cmd '[class="special"] move scratchpad';
|
cmd '[class="special"] move scratchpad';
|
||||||
|
|
||||||
is_num_children($tmp, 1, 'one window on current ws');
|
is_num_children($tmp, 1, 'one window on current ws');
|
||||||
|
|
|
@ -19,7 +19,6 @@
|
||||||
# Ticket: #909
|
# Ticket: #909
|
||||||
# Bug still in: 4.4-69-g6856b23
|
# Bug still in: 4.4-69-g6856b23
|
||||||
use i3test i3_autostart => 0;
|
use i3test i3_autostart => 0;
|
||||||
use X11::XCB qw(:all);
|
|
||||||
|
|
||||||
my $config = <<EOT;
|
my $config = <<EOT;
|
||||||
# i3 config file (v4)
|
# i3 config file (v4)
|
||||||
|
@ -31,28 +30,10 @@ EOT
|
||||||
|
|
||||||
my $pid = launch_with_config($config);
|
my $pid = launch_with_config($config);
|
||||||
|
|
||||||
sub set_wm_class {
|
|
||||||
my ($id, $class, $instance) = @_;
|
|
||||||
|
|
||||||
# Add a _NET_WM_STRUT_PARTIAL hint
|
|
||||||
my $atomname = $x->atom(name => 'WM_CLASS');
|
|
||||||
my $atomtype = $x->atom(name => 'STRING');
|
|
||||||
|
|
||||||
$x->change_property(
|
|
||||||
PROP_MODE_REPLACE,
|
|
||||||
$id,
|
|
||||||
$atomname->id,
|
|
||||||
$atomtype->id,
|
|
||||||
8,
|
|
||||||
length($class) + length($instance) + 2,
|
|
||||||
"$instance\x00$class\x00"
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
# We use dont_map because i3 will not map the window on the current
|
# We use dont_map because i3 will not map the window on the current
|
||||||
# workspace. Thus, open_window would time out in wait_for_map (2 seconds).
|
# workspace. Thus, open_window would time out in wait_for_map (2 seconds).
|
||||||
my $window = open_window(
|
my $window = open_window(
|
||||||
before_map => sub { set_wm_class($_->id, '__i3-test-window', '__i3-test-window') },
|
wm_class => '__i3-test-window',
|
||||||
dont_map => 1,
|
dont_map => 1,
|
||||||
);
|
);
|
||||||
$window->map;
|
$window->map;
|
||||||
|
|
|
@ -20,41 +20,11 @@
|
||||||
# Ticket: #913
|
# Ticket: #913
|
||||||
# Bug still in: 4.4-97-gf767ac3
|
# Bug still in: 4.4-97-gf767ac3
|
||||||
use i3test;
|
use i3test;
|
||||||
use X11::XCB qw(:all);
|
|
||||||
|
|
||||||
# TODO: move to X11::XCB
|
|
||||||
sub set_wm_class {
|
|
||||||
my ($id, $class, $instance) = @_;
|
|
||||||
|
|
||||||
# Add a _NET_WM_STRUT_PARTIAL hint
|
|
||||||
my $atomname = $x->atom(name => 'WM_CLASS');
|
|
||||||
my $atomtype = $x->atom(name => 'STRING');
|
|
||||||
|
|
||||||
$x->change_property(
|
|
||||||
PROP_MODE_REPLACE,
|
|
||||||
$id,
|
|
||||||
$atomname->id,
|
|
||||||
$atomtype->id,
|
|
||||||
8,
|
|
||||||
length($class) + length($instance) + 2,
|
|
||||||
"$instance\x00$class\x00"
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
sub open_special {
|
|
||||||
my %args = @_;
|
|
||||||
my $wm_class = delete($args{wm_class}) || 'special';
|
|
||||||
|
|
||||||
return open_window(
|
|
||||||
%args,
|
|
||||||
before_map => sub { set_wm_class($_->id, $wm_class, $wm_class) },
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
my $tmp = fresh_workspace;
|
my $tmp = fresh_workspace;
|
||||||
|
|
||||||
# Open a new window which we can identify later on based on its WM_CLASS.
|
# Open a new window which we can identify later on based on its WM_CLASS.
|
||||||
my $scratch = open_special;
|
my $scratch = open_window(wm_class => 'special');
|
||||||
|
|
||||||
my $tmp2 = fresh_workspace;
|
my $tmp2 = fresh_workspace;
|
||||||
|
|
||||||
|
|
|
@ -19,7 +19,6 @@
|
||||||
# Ticket: #1027
|
# Ticket: #1027
|
||||||
# Bug still in: 4.5.1-90-g6582da9
|
# Bug still in: 4.5.1-90-g6582da9
|
||||||
use i3test i3_autostart => 0;
|
use i3test i3_autostart => 0;
|
||||||
use X11::XCB qw(PROP_MODE_REPLACE);
|
|
||||||
|
|
||||||
my $config = <<'EOT';
|
my $config = <<'EOT';
|
||||||
# i3 config file (v4)
|
# i3 config file (v4)
|
||||||
|
@ -31,28 +30,9 @@ EOT
|
||||||
|
|
||||||
my $pid = launch_with_config($config);
|
my $pid = launch_with_config($config);
|
||||||
|
|
||||||
# TODO: move this to X11::XCB::Window
|
|
||||||
sub set_wm_class {
|
|
||||||
my ($id, $class, $instance) = @_;
|
|
||||||
|
|
||||||
# Add a _NET_WM_STRUT_PARTIAL hint
|
|
||||||
my $atomname = $x->atom(name => 'WM_CLASS');
|
|
||||||
my $atomtype = $x->atom(name => 'STRING');
|
|
||||||
|
|
||||||
$x->change_property(
|
|
||||||
PROP_MODE_REPLACE,
|
|
||||||
$id,
|
|
||||||
$atomname->id,
|
|
||||||
$atomtype->id,
|
|
||||||
8,
|
|
||||||
length($class) + length($instance) + 2,
|
|
||||||
"$instance\x00$class\x00"
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
my $window = open_window(
|
my $window = open_window(
|
||||||
name => 'Borderless window',
|
name => 'Borderless window',
|
||||||
before_map => sub { set_wm_class($_->id, 'special', 'special') },
|
wm_class => 'special',
|
||||||
dont_map => 1,
|
dont_map => 1,
|
||||||
);
|
);
|
||||||
$window->map;
|
$window->map;
|
||||||
|
|
|
@ -21,37 +21,16 @@
|
||||||
# Ticket: #1086
|
# Ticket: #1086
|
||||||
# Bug still in: 4.6-62-g7098ef6
|
# Bug still in: 4.6-62-g7098ef6
|
||||||
use i3test i3_autostart => 0;
|
use i3test i3_autostart => 0;
|
||||||
use X11::XCB qw(:all);
|
|
||||||
|
|
||||||
# TODO: move to X11::XCB
|
|
||||||
sub set_wm_class {
|
|
||||||
my ($id, $class, $instance) = @_;
|
|
||||||
|
|
||||||
# Add a _NET_WM_STRUT_PARTIAL hint
|
|
||||||
my $atomname = $x->atom(name => 'WM_CLASS');
|
|
||||||
my $atomtype = $x->atom(name => 'STRING');
|
|
||||||
|
|
||||||
$x->change_property(
|
|
||||||
PROP_MODE_REPLACE,
|
|
||||||
$id,
|
|
||||||
$atomname->id,
|
|
||||||
$atomtype->id,
|
|
||||||
8,
|
|
||||||
length($class) + length($instance) + 2,
|
|
||||||
"$instance\x00$class\x00"
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
sub open_special {
|
sub open_special {
|
||||||
my %args = @_;
|
my %args = @_;
|
||||||
my $wm_class = delete($args{wm_class}) || 'special';
|
|
||||||
$args{name} //= 'special window';
|
$args{name} //= 'special window';
|
||||||
|
|
||||||
# We use dont_map because i3 will not map the window on the current
|
# We use dont_map because i3 will not map the window on the current
|
||||||
# workspace. Thus, open_window would time out in wait_for_map (2 seconds).
|
# workspace. Thus, open_window would time out in wait_for_map (2 seconds).
|
||||||
my $window = open_window(
|
my $window = open_window(
|
||||||
%args,
|
%args,
|
||||||
before_map => sub { set_wm_class($_->id, $wm_class, $wm_class) },
|
wm_class => 'special',
|
||||||
dont_map => 1,
|
dont_map => 1,
|
||||||
);
|
);
|
||||||
$window->add_hint('urgency');
|
$window->add_hint('urgency');
|
||||||
|
|
Loading…
Reference in New Issue