Bugfix: Don’t close workspace when there are still floating windows on it (Thanks noxxun) (+test)

Fixes: #595
next
Michael Stapelberg 2011-12-20 18:43:52 +00:00
parent 32fb917948
commit d963018990
2 changed files with 28 additions and 2 deletions

View File

@ -1061,8 +1061,7 @@ static void con_on_remove_child(Con *con) {
/* For workspaces, close them only if they're not visible anymore */
if (con->type == CT_WORKSPACE) {
int children = con_num_children(con);
if (children == 0 && !workspace_is_visible(con)) {
if (TAILQ_EMPTY(&(con->focus_head)) && !workspace_is_visible(con)) {
LOG("Closing old workspace (%p / %s), it is empty\n", con, con->name);
tree_close(con, DONT_KILL_WINDOW, false, false);
ipc_send_event("workspace", I3_IPC_EVENT_WORKSPACE, "{\"change\":\"empty\"}");

View File

@ -32,4 +32,31 @@ my $otmp = fresh_workspace;
ok(workspace_exists($otmp), "new workspace $otmp exists");
ok(workspace_exists($tmp), "old workspace $tmp still exists");
################################################################################
# 2: Similar test: Have two floating windows on a workspace, close one of them.
# The workspace should not be closed. Regression present until (including) commit
# 1f2c9306a27cced83ad960e929bb9e9a163b7843
################################################################################
$tmp = fresh_workspace;
ok(workspace_exists($tmp), "workspace $tmp exists");
# Create a floating window which is smaller than the minimum enforced size of i3
my $first = open_floating_window;
my $second = open_floating_window;
ok($first->mapped, 'Window is mapped');
ok($second->mapped, 'Window is mapped');
$otmp = fresh_workspace;
ok(workspace_exists($otmp), "new workspace $otmp exists");
ok(workspace_exists($tmp), "old workspace $tmp still exists");
$first->unmap;
wait_for_unmap $first;
ok(workspace_exists($otmp), "new workspace $otmp exists");
ok(workspace_exists($tmp), "old workspace $tmp still exists");
done_testing;