]> git.sur5r.net Git - i3/i3/blobdiff - include/tree.h
Merge branch 'release-4.16.1'
[i3/i3] / include / tree.h
index 6376ed9241d5bc6c931ec2e979456187f4745b53..41a630366bfca43411f7934e696b57be975a81ab 100644 (file)
@@ -1,9 +1,15 @@
 /*
  * vim:ts=4:sw=4:expandtab
+ *
+ * i3 - an improved dynamic tiling window manager
+ * © 2009 Michael Stapelberg and contributors (see also: LICENSE)
+ *
+ * tree.c: Everything that primarily modifies the layout tree data structure.
+ *
  */
+#pragma once
 
-#ifndef _TREE_H
-#define _TREE_H
+#include <config.h>
 
 extern Con *croot;
 /* TODO: i am not sure yet how much access to the focused container should
@@ -18,13 +24,13 @@ extern struct all_cons_head all_cons;
  * assigning a workspace to each RandR output.
  *
  */
-void tree_init();
+void tree_init(xcb_get_geometry_reply_t *geometry);
 
 /**
  * Opens an empty container in the current container
  *
  */
-Con *tree_open_con(Con *con);
+Con *tree_open_con(Con *con, i3Window *window);
 
 /**
  * Splits (horizontally or vertically) the given container by creating a new
@@ -34,29 +40,23 @@ Con *tree_open_con(Con *con);
 void tree_split(Con *con, orientation_t orientation);
 
 /**
- * Moves focus one level up.
+ * Moves focus one level up. Returns true if focus changed.
  *
  */
-void level_up();
+bool level_up(void);
 
 /**
- * Moves focus one level down.
+ * Moves focus one level down. Returns true if focus changed.
  *
  */
-void level_down();
+bool level_down(void);
 
 /**
  * Renders the tree, that is rendering all outputs using render_con() and
  * pushing the changes to X11 using x_push_changes().
  *
  */
-void tree_render();
-
-/**
- * Closes the current container using tree_close().
- *
- */
-void tree_close_con();
+void tree_render(void);
 
 /**
  * Changes focus in the given way (next/previous) and given orientation
@@ -66,22 +66,37 @@ void tree_close_con();
 void tree_next(char way, orientation_t orientation);
 
 /**
- * Moves the current container in the given way (next/previous) and given
- * orientation (horizontal/vertical).
+ * Closes the given container including all children.
+ * Returns true if the container was killed or false if just WM_DELETE was sent
+ * and the window is expected to kill itself.
+ *
+ * The dont_kill_parent flag is specified when the function calls itself
+ * recursively while deleting a containers children.
+ *
+ * The force_set_focus flag is specified in the case of killing a floating
+ * window: tree_close_internal() will be invoked for the CT_FLOATINGCON (the parent
+ * container) and focus should be set there.
  *
  */
-void tree_move(char way, orientation_t orientation);
+bool tree_close_internal(Con *con, kill_window_t kill_window, bool dont_kill_parent);
 
 /**
- * Closes the given container including all children
+ * Loads tree from ~/.i3/_restart.json (used for in-place restarts).
  *
  */
-void tree_close(Con *con, bool kill_window, bool dont_kill_parent);
+bool tree_restore(const char *path, xcb_get_geometry_reply_t *geometry);
 
 /**
- * Loads tree from ~/.i3/_restart.json (used for in-place restarts).
+ * tree_flatten() removes pairs of redundant split containers, e.g.:
+ *       [workspace, horizontal]
+ *   [v-split]           [child3]
+ *   [h-split]
+ * [child1] [child2]
+ * In this example, the v-split and h-split container are redundant.
+ * Such a situation can be created by moving containers in a direction which is
+ * not the orientation of their parent container. i3 needs to create a new
+ * split container then and if you move containers this way multiple times,
+ * redundant chains of split-containers can be the result.
  *
  */
-bool tree_restore(const char *path);
-
-#endif
+void tree_flatten(Con *child);