hacking-howto: Update 'data structures' section

- Includes updated bigpicture.png from dump-asy.pl script
- The X11 root window is not a container
- Adds some extra information

bigpicture.png is created by converting the .asy to an .eps with `asy
bigpicture .eps` and then using the following gs command:
gs -dSAFER -dBATCH -dNOPAUSE -dEPSCrop -r600 -sDEVICE=pngalpha -sOutputFile=bigpicture.png bigpicture.eps
next
Orestis Floros 2020-05-02 14:48:57 +02:00
parent c7b6edf810
commit cdf5ccbed8
No known key found for this signature in database
GPG Key ID: A09DBD7D3222C1C3
4 changed files with 46 additions and 26 deletions

19
docs/bigpicture.asy Normal file
View File

@ -0,0 +1,19 @@
import drawtree;
treeLevelStep = 2cm;
TreeNode n94457831379296 = makeNode("``root'' (splith) []");
TreeNode n94457831380944 = makeNode(n94457831379296, "``\_\_i3'' (output) []");
TreeNode n94457831384048 = makeNode(n94457831380944, "``content'' (splith) []");
TreeNode n94457831387184 = makeNode(n94457831384048, "``\_\_i3\_scratch'' (splith) []");
TreeNode n94457831390576 = makeNode(n94457831379296, "``eDP-1'' (output) []");
TreeNode n94457831393744 = makeNode(n94457831390576, "``topdock'' (dockarea) []");
TreeNode n94457831396992 = makeNode(n94457831390576, "``content'' (splith) []");
TreeNode n94457831628304 = makeNode(n94457831396992, "``1'' (splith) []");
TreeNode n94457831571040 = makeNode(n94457831628304, "``Hacking i3: How To - Mozilla Firefox'' (leaf) []");
TreeNode n94457831246384 = makeNode(n94457831628304, "``vim'' (leaf) []");
TreeNode n94457831461088 = makeNode(n94457831396992, "``Named workspace'' (splith) []");
TreeNode n94457831471424 = makeNode(n94457831461088, "``[Empty]'' (tabbed) []");
TreeNode n94457831570576 = makeNode(n94457831471424, "``contrib/dump-asy.pl --no-gv'' (leaf) [Marks go here]");
TreeNode n94457831645488 = makeNode(n94457831471424, "``ipython'' (leaf) []");
TreeNode n94457831400192 = makeNode(n94457831390576, "``bottomdock'' (dockarea) []");
TreeNode n94457831424848 = makeNode(n94457831400192, "``i3bar for output eDP-1'' (leaf) []");
draw(n94457831379296, (0, 0));

Binary file not shown.

Before

Width:  |  Height:  |  Size: 9.0 KiB

After

Width:  |  Height:  |  Size: 330 KiB

Binary file not shown.

View File

@ -246,37 +246,39 @@ A file containing all X11 atoms which i3 uses. This file will be included
various times (for defining, requesting and receiving the atoms), each time various times (for defining, requesting and receiving the atoms), each time
with a different definition of xmacro(). with a different definition of xmacro().
== Data structures == Data structures
See +include/data.h+ for documented data structures. The most important ones are
explained here.
See include/data.h for documented data structures. The most important ones are The following picture is generated by the +contrib/dump-asy.pl+ script.
explained right here.
///////////////////////////////////////////////////////////////////////////////// image:bigpicture.png["The Big Picture",width=1000,link="bigpicture.png"]
// TODO: update image
image:bigpicture.png[The Big Picture] The hierarchy is:
///////////////////////////////////////////////////////////////////////////////// . *Root container*
. *Output containers*: +eDP-1+ in this example and the internal +__i3++ output
So, the hierarchy is: . *Content and 2 dockarea containers*
. *Workspaces*: Numbered workspace ``1'' and a ``Named workspace''
. *X11 root window*, the root container . *Split containers*: One horizontal in the first workspace and a tabbed one in
. *Output container* (LVDS1 in this example) the named one.
. *Content container* (there are also containers for dock windows) . *Leaf containers*: Windows like vim and an i3bar dock.
. *Workspaces* (Workspace 1 in this example, with horizontal orientation)
. *Split container* (vertically split)
. *X11 window containers*
The data type is +Con+, in all cases. The data type is +Con+, in all cases.
=== X11 root window === Root container
The X11 root window is a single window per X11 display (a display is identified The root container (global variable +croot+) is the up-most ascendant of every i3
by +:0+ or +:1+ etc.). The root window is what you draw your background image container. It can be used to iterate over the whole tree structure. E.g., it is
on. It spans all the available outputs, e.g. +VGA1+ is a specific part of the used to reply to the +GET_WORKSPACES+ request, iterating over it's children to
root window and +LVDS1+ is a specific part of the root window. find all workspaces. This is different from the X11 root window.
The X11 root window (global variable +root+) is a single window per X11 display
(a display is identified by +:0+ or +:1+ etc.). The root window is what you draw
your background image on. It spans all the available outputs, e.g. +VGA1+ is a
specific part of the root window and +LVDS1+ is a specific part of the root
window.
=== Output container === Output container
@ -298,8 +300,8 @@ currently on.
=== Content container === Content container
Each output has multiple children. Two of them are dock containers which hold Each output has multiple children. Two of them are dock containers which hold
dock clients. The other one is the content container, which holds the actual the top and bottom dock clients. The other one is the content container, which
content (workspaces) of this output. holds the actual content (workspaces) of this output.
=== Workspace === Workspace
@ -318,10 +320,9 @@ vertical) and a layout.
Split containers (and X11 window containers, which are a subtype of split Split containers (and X11 window containers, which are a subtype of split
containers) can have different border styles. containers) can have different border styles.
=== X11 window container === Leaf containers
An X11 window container holds exactly one X11 window. These are the leaf nodes A leaf container holds exactly one X11 window. They can't have any children.
of the layout tree, they cannot have any children.
== List/queue macros == List/queue macros