Prevent workspace change during global fullscreen

While in global fullscreen, the workspace could be changed leaving the
fullscreen container still visible on top but losing its focus.
This commit is contained in:
Mats 2014-11-29 18:22:56 +01:00 committed by Michael Stapelberg
parent 8ea67d0488
commit dc351fb291
2 changed files with 44 additions and 0 deletions

View File

@ -958,6 +958,12 @@ void cmd_workspace(I3_CMD, char *which) {
DLOG("which=%s\n", which); DLOG("which=%s\n", which);
if (con_get_fullscreen_con(croot, CF_GLOBAL)) {
LOG("Cannot switch workspace while in global fullscreen\n");
ysuccess(false);
return;
}
if (strcmp(which, "next") == 0) if (strcmp(which, "next") == 0)
ws = workspace_next(); ws = workspace_next();
else if (strcmp(which, "prev") == 0) else if (strcmp(which, "prev") == 0)
@ -986,6 +992,12 @@ void cmd_workspace(I3_CMD, char *which) {
void cmd_workspace_number(I3_CMD, char *which) { void cmd_workspace_number(I3_CMD, char *which) {
Con *output, *workspace = NULL; Con *output, *workspace = NULL;
if (con_get_fullscreen_con(croot, CF_GLOBAL)) {
LOG("Cannot switch workspace while in global fullscreen\n");
ysuccess(false);
return;
}
long parsed_num = ws_name_to_number(which); long parsed_num = ws_name_to_number(which);
if (parsed_num == -1) { if (parsed_num == -1) {
@ -1020,6 +1032,12 @@ void cmd_workspace_number(I3_CMD, char *which) {
* *
*/ */
void cmd_workspace_back_and_forth(I3_CMD) { void cmd_workspace_back_and_forth(I3_CMD) {
if (con_get_fullscreen_con(croot, CF_GLOBAL)) {
LOG("Cannot switch workspace while in global fullscreen\n");
ysuccess(false);
return;
}
workspace_back_and_forth(); workspace_back_and_forth();
cmd_output->needs_tree_render = true; cmd_output->needs_tree_render = true;
@ -1038,6 +1056,12 @@ void cmd_workspace_name(I3_CMD, char *name) {
return; return;
} }
if (con_get_fullscreen_con(croot, CF_GLOBAL)) {
LOG("Cannot switch workspace while in global fullscreen\n");
ysuccess(false);
return;
}
DLOG("should switch to workspace %s\n", name); DLOG("should switch to workspace %s\n", name);
if (maybe_back_and_forth(cmd_output, name)) if (maybe_back_and_forth(cmd_output, name))
return; return;

View File

@ -191,6 +191,26 @@ is($x->input_focus, $window->id, 'fullscreen window focused');
cmd 'focus left'; cmd 'focus left';
is($x->input_focus, $window->id, 'fullscreen window still focused'); is($x->input_focus, $window->id, 'fullscreen window still focused');
################################################################################
# Verify that changing workspace while in global fullscreen does not work.
################################################################################
$tmp = fresh_workspace;
$window = open_window;
cmd 'fullscreen global';
is($x->input_focus, $window->id, 'window focused');
is(focused_ws(), $tmp, 'workspace selected');
$other = get_unused_workspace;
cmd "workspace $other";
is($x->input_focus, $window->id, 'window still focused');
is(focused_ws(), $tmp, 'workspace still selected');
# leave global fullscreen so that is does not interfere with the other tests
$window->fullscreen(0);
sync_with_i3;
################################################################################ ################################################################################
# Verify that fullscreening a window on a second workspace and moving it onto # Verify that fullscreening a window on a second workspace and moving it onto
# the first workspace unfullscreens the first window. # the first workspace unfullscreens the first window.