Handle EWMH requests to change current desktop

This request is used by pagers and bars to change the current
desktop likely as a result of some user action. We interpret this as
a request to focus the given workspace.

for more information see:

http://standards.freedesktop.org/wm-spec/latest/ar01s03.html#idm140251368135008
This commit is contained in:
Tony Crisci
2014-07-04 05:39:07 -04:00
committed by Michael Stapelberg
parent 196e748e94
commit 0514be8d4b
2 changed files with 66 additions and 0 deletions

View File

@ -71,6 +71,40 @@ is(current_desktop_index, 1, "Open on 0 and view 1");
cmd 'workspace 2';
is(current_desktop_index, 2, "Open and view empty");
#########################################################
# Test the _NET_CURRENT_DESKTOP client request
# This request is sent by pagers and bars to switch the current desktop (which
# is like an ersatz workspace) to the given index
#########################################################
sub send_current_desktop_request {
my ($idx) = @_;
my $msg = pack "CCSLLLLLL",
X11::XCB::CLIENT_MESSAGE, # response_type
32, # format
0, # sequence
0,
$_NET_CURRENT_DESKTOP,
$idx, # data32[0] (the desktop index)
0, # data32[1] (can be a timestamp)
0, # data32[2]
0, # data32[3]
0; # data32[4]
$x->send_event(0, $x->get_root_window(), X11::XCB::EVENT_MASK_SUBSTRUCTURE_REDIRECT, $msg);
}
send_current_desktop_request(1);
is(current_desktop_index, 1, 'current desktop request switched to desktop 1');
# note that _NET_CURRENT_DESKTOP is an index and that in this case, workspace 1
# is at index 1 as a convenience for the test
is(focused_ws, '1', 'current desktop request switched to workspace 1');
send_current_desktop_request(0);
is(current_desktop_index, 0, 'current desktop request switched to desktop 0');
is(focused_ws, '0', 'current desktop request switched to workspace 0');
exit_gracefully($pid);
done_testing;