diff --git a/docs/lifetimes.md b/docs/lifetimes.md index df773d19..680e942b 100644 --- a/docs/lifetimes.md +++ b/docs/lifetimes.md @@ -12,7 +12,7 @@ TODO complain loudly if Destroying a control with a parent The rules for lifetimes are simple: - Removing a control from a container (for instance, with `uiBoxDelete()` or `uiTabDeletePage()`) does NOT destroy the control. -- Destroying a container (`uiWindowDestroy()`, `uiControlDestroy()` on a uiBox or uiTab, et.c) WILL destroy children. +- Destroying a container (`uiWindowDestroy()`, `uiControlDestroy()` on a uiBox or uiTab, etc.) WILL destroy children. - Otherwise, a control stays alive. - It is an error to destroy a control while it is part of a container. - It is an error to add a control to more than one container at once. @@ -23,7 +23,9 @@ Currently, breaking these rules results in undefined behavior. Error checks will Note that control implementations generally don't need to worry about backend-specific information; these are handled by the backends's convenience functions. If you bypass those, however, you *will* need to worry. -### Backend-Agnostic (uiBox, uiGrid) +### General + +### Containers (uiBox, uiGrid) ### Windows @@ -39,6 +41,8 @@ The destruction process is simple: 3. Any child windows are destroyed. 4. The window receives `WM_NCDESTROY`. +TODO write this + ### Unix All GtkWidgets are initially created "floating" (referenceless but unowned). When adding to a GtkContainer, the reference count is increased. When removing from a GtkContainer, the reference count is decreased. When the reference count drops back to zero, the widget is destroyed. Since containers are also widgets, when a container is destroyed, its children are removed (TODO verify this).