]> git.sur5r.net Git - i3/i3/blobdiff - src/tree.c
Merge pull request #2680 from Airblader/feature-2677
[i3/i3] / src / tree.c
index 5a6129ac86e60f2df9107b0522656ec1d876553d..d2fe4e07972327b1da827acddad5a87c43de346a 100644 (file)
@@ -1,5 +1,3 @@
-#undef I3__FILE__
-#define I3__FILE__ "tree.c"
 /*
  * vim:ts=4:sw=4:expandtab
  *
@@ -266,11 +264,8 @@ bool tree_close_internal(Con *con, kill_window_t kill_window, bool dont_kill_par
             add_ignore_event(cookie.sequence, 0);
         }
         ipc_send_window_event("close", con);
-        FREE(con->window->class_class);
-        FREE(con->window->class_instance);
-        i3string_free(con->window->name);
-        FREE(con->window->ran_assignments);
-        FREE(con->window);
+        window_free(con->window);
+        con->window = NULL;
     }
 
     Con *ws = con_get_workspace(con);
@@ -328,6 +323,18 @@ bool tree_close_internal(Con *con, kill_window_t kill_window, bool dont_kill_par
     free(con->name);
     FREE(con->deco_render_params);
     TAILQ_REMOVE(&all_cons, con, all_cons);
+    while (!TAILQ_EMPTY(&(con->swallow_head))) {
+        Match *match = TAILQ_FIRST(&(con->swallow_head));
+        TAILQ_REMOVE(&(con->swallow_head), match, matches);
+        match_free(match);
+        free(match);
+    }
+    while (!TAILQ_EMPTY(&(con->marks_head))) {
+        mark_t *mark = TAILQ_FIRST(&(con->marks_head));
+        TAILQ_REMOVE(&(con->marks_head), mark, marks);
+        FREE(mark->name);
+        FREE(mark);
+    }
     free(con);
 
     /* in the case of floating windows, we already focused another container
@@ -474,7 +481,7 @@ static void mark_unmapped(Con *con) {
     TAILQ_FOREACH(current, &(con->nodes_head), nodes)
     mark_unmapped(current);
     if (con->type == CT_WORKSPACE) {
-        /* We need to call mark_unmapped on floating nodes aswell since we can
+        /* We need to call mark_unmapped on floating nodes as well since we can
          * make containers floating. */
         TAILQ_FOREACH(current, &(con->floating_head), floating_windows)
         mark_unmapped(current);