
\chapter{Preliminaries: Key concepts and relations}
\label{chap:prelim}

The purpose of this chapter to explain some of key concepts and
relations you need to understand before reading the following
chapters. These include modules explained in section \ref{sec:modules}
and the Ion class and object hierarchies, section \ref{sec:objects}.


\section{Modules}
\label{sec:modules}

Ion has been designed so that the 'ion' executable only implements some
basic services on top of which very different kinds of window managers
could be build by loading the appropriate 'modules'. On modern system
these modules are simply dynamically loaded \file{.so} libraries. On 
more primitive systems, or if you want to squeeze total size of the 
executable and libraries, the modules can optionally be statically 
linked to the main binary, but must nevertheless be loaded with the
\fnref{dopath} function. Modules may also include Lua code.

If no modules are loaded, all client windows appear in full screen mode.
To get better window management support, one or more workspace modules
should be loaded. Currently Ion provides the following modules:

\begin{description}
    \item[\file{mod\_tiling}] Tilings for workspaces of the original tiled
       Ion kind.
    \item[\file{mod\_query}] Queries (for starting programs and so on)
      and message boxes.
    \item[\file{mod\_menu}] Support for menus, both pull-down and
      keyboard-operated in-frame menus.
    \item[\file{mod\_statusbar}] Module that implements a statusbar that
      can be adaptively embedded in each workspace's layout.
    \item[\file{mod\_dock}] Module for docking Window Maker dock-apps.
      The dock can both float and be embedded as the statusbar.
    \item[\file{mod\_sp}] This module implements a scratchpad frame that can
      be toggled on/off everywhere. Think of the 'console' in some 
      first-person shooters.
    \item[\file{mod\_sm}] Session management support module.
      \emph{Loaded automatically when needed!}
\end{description}

So-called drawing engines are also implemented as a modules,
but they are not discussed here; see chapter \ref{chap:gr}.

The stock configuration for the \file{ion3} executable loads all of the 
modules mentioned above except \file{mod\_dock}.
The stock configuration for the \file{pwm3} executable (which differs
from the \file{ion3} executable in a few configuration details)
loads another set of modules.


\input{objects}
