Fix fullscreen focus bug and corresponding test flaw
As the workspace might be reached via recursion (e.g. moving from the edge of a fullscreen split container), it's necessary to check for a fullscreen container whenever a workspace is reached.
This commit is contained in:
@ -1297,14 +1297,6 @@ void cmd_exec(I3_CMD, char *nosn, char *command) {
|
||||
*
|
||||
*/
|
||||
void cmd_focus_direction(I3_CMD, char *direction) {
|
||||
if (focused &&
|
||||
focused->type != CT_WORKSPACE &&
|
||||
focused->fullscreen_mode != CF_NONE) {
|
||||
LOG("Cannot change focus while in fullscreen mode.\n");
|
||||
ysuccess(false);
|
||||
return;
|
||||
}
|
||||
|
||||
DLOG("direction = *%s*\n", direction);
|
||||
|
||||
if (strcmp(direction, "left") == 0)
|
||||
@ -1331,14 +1323,6 @@ void cmd_focus_direction(I3_CMD, char *direction) {
|
||||
*
|
||||
*/
|
||||
void cmd_focus_window_mode(I3_CMD, char *window_mode) {
|
||||
if (focused &&
|
||||
focused->type != CT_WORKSPACE &&
|
||||
focused->fullscreen_mode != CF_NONE) {
|
||||
LOG("Cannot change focus while in fullscreen mode.\n");
|
||||
ysuccess(false);
|
||||
return;
|
||||
}
|
||||
|
||||
DLOG("window_mode = %s\n", window_mode);
|
||||
|
||||
Con *ws = con_get_workspace(focused);
|
||||
|
@ -466,6 +466,11 @@ static bool _tree_next(Con *con, char way, orientation_t orientation, bool wrap)
|
||||
/* Stop recursing at workspaces after attempting to switch to next
|
||||
* workspace if possible. */
|
||||
if (con->type == CT_WORKSPACE) {
|
||||
if (con_get_fullscreen_con(con, CF_GLOBAL) ||
|
||||
con_get_fullscreen_con(con, CF_OUTPUT)) {
|
||||
DLOG("Cannot change workspace while in fullscreen mode.\n");
|
||||
return false;
|
||||
}
|
||||
Output *current_output = get_output_containing(con->rect.x, con->rect.y);
|
||||
Output *next_output;
|
||||
|
||||
|
Reference in New Issue
Block a user