When moving window from other (not current) workspace to another
workspace with criteria we should stay on current workspace.
And we should exit early when criteria was specified but didn't
match any window.
This is now restricted according to the already defined fullscreen
focus constraints. Test case 157 was removed, as we don't prevent
level up/down in fullscreen anymore. Those commands are properly
tested in fullscreen by test case 156.
Fixes: #612
Basically, a focus change can't escape a fullscreen container. The
only exception is per-output fullscreen containers, as you should
be able to focus a container in a different workspace in this case.
This is an improvement on 4eab046e, now considering the difference
between global and per-output fullscreen and taking the tree
structure into account to determine what escaping the fullscreen
container means. It only affects targeted focus commands in the
form "for_window [...] focus", but it lays the foundation for
forthcoming fixes to all other focus commands.
If the target is in a different workspace, there's no reason why
we wouldn't allow the user to focus it. We already allow this when
focusing a workspace, for example.
calling workspace by number now also checks for switching back and forth
and creates a new workspace if no workspace starting with that number is
found
also removed the obsolete tree_render() in favor of setting
cmd_output->needs_tree_render to true
When calculating coordinates we should multiply at first otherwise
we lose precision when i3 is compiled without sse2 support.
The following code prints "Res1: 348 Res2: 349" when compiled with
-O0 -mno-sse2 and "Res1: 349 Res2: 349" with -O0 -msee2.
Note that -msse2 is default flag on 64bit OSes.
int main() {
double a = 349.0 / 768;
double b = 349.0 * 768;
int res1 = a * 768;
int res2 = b / 768;
printf("Res1: %d Res2: %d\n", res1, res2);
return 0;
}
Thanks guys for helping me to hunt down this one.