Add "mode" field in binding event

This does *not* go in the binding object to reflect the same hierarchy
of the config file: a mode is a collection of bindings.

Fixes #5323
This commit is contained in:
Orestis Floros
2022-12-14 13:19:00 +01:00
parent 1786b13f0d
commit d5c8319b6c
6 changed files with 41 additions and 4 deletions

View File

@@ -16,6 +16,7 @@
#
# Test that the binding event works properly
# Ticket: #1210
# Ticket: #5323
use i3test i3_autostart => 0;
my $keysym = 't';
@@ -28,6 +29,12 @@ my $config = <<EOT;
font -misc-fixed-medium-r-normal--13-120-75-75-C-70-iso10646-1
bindsym $binding_symbol $command
bindsym m mode some-mode
mode some-mode {
bindsym a nop
bindsym b mode default
}
EOT
SKIP: {
@@ -46,12 +53,13 @@ SKIP: {
qx(xdotool key $binding_symbol);
},
'binding');
is(scalar @events, 1, 'Received 1 event');
is($events[0]->{change}, 'run',
'the `change` field should indicate this binding has run');
is($events[0]->{mode}, 'default', 'the `mode` field should be "default"');
ok($events[0]->{binding},
'the `binding` field should be a hash that contains information about the binding');
@@ -69,6 +77,21 @@ SKIP: {
is($events[0]->{binding}->{input_code}, 0,
'the input_code should be the specified code if the key was bound with bindcode, and otherwise zero');
# Test that the mode field is correct
# See #5323.
@events = events_for(
sub {
qx(xdotool key m);
qx(xdotool key a);
qx(xdotool key b);
},
'binding');
is(scalar @events, 3, 'Received 3 events');
is($events[0]->{mode}, 'default', 'Event for binding to enter new mode is atributed to default mode');
is($events[1]->{mode}, 'some-mode', 'Event for binding while in mode is attributed to the non-default mode');
is($events[2]->{mode}, 'some-mode', 'Event for binding exiting mode is attributed to the non-default mode');
exit_gracefully($pid);
}