make LIBSN optional
[mikachu/openbox.git] / HACKING
1 Woop, a HACKING document for openbox at last!
2
3 dirs:
4         kernel - core of the WM
5         render - librender, rendering routines for the WM and for apps
6         cwmcc  - client-wm-client communication. netwm/icccm helper routines
7                  for the WM and apps
8         obcf   - openbox config format, generic parser for config files
9         plugins - various plugins
10
11 Beware the Client.transient_for. It can be set to a !NULL value of TRAN_GROUP,
12 which is not a valid pointer. You must ALWAYS check for TRAN_GROUP before
13 following transient_for. When TRAN_GROUP is found, Client.group will always
14 be !NULL. Some smart action should be taken using all members of the group in
15 this case.
16     Smart action idea:
17         Skip over members of the group that are also transients of the group
18         (have Client.transient_for set to TRAN_GROUP). These windows are not
19         ancestors and using them will also end up causing infinite loops!
20
21 When using coordinates/sizes of windows, make sure you use the right area. The
22 Client.area rect is the reference point and size of the *CLIENT* window. This
23 value is not what you see in any shape or form, and gravity is applied to it to
24 translate it into what you see. The Client.frame.area is the actual position
25 and size of the entire frame. This is usually the value you want to use, unless
26 you are in client.c (probably) and adjusting/using the position or size from
27 the client's perspective.