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:
parent
8ea67d0488
commit
dc351fb291
|
@ -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;
|
||||||
|
|
|
@ -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.
|
||||||
|
|
Loading…
Reference in New Issue