While Ion does not not have a truly object-oriented design
\footnote{the author doesn't like such artificial designs},
things that appear on the computer screen are, however, quite
-naturally expressed as such ''objects''. Therefore Ion implements
+naturally expressed as such ``objects''. Therefore Ion implements
a rather primitive OO system for these screen objects and some
other things.
For simplicity we consider only the essential-for-basic-configuration
Ioncore, \file{mod\_tiling} and \file{mod\_query} classes.
-See Appendix \ref{app:fullhierarchy} for the full class hierachy visible
+See Appendix \ref{app:fullhierarchy} for the full class hierarchy visible
to Lua side.
\subsection{Class hierarchy}
|-->WRegion
| |-->WClientWin
| |-->WWindow
- | | |-->WRootWin
| | |-->WMPlex
- | | | |-->WScreen
| | | |-->WFrame
+ | | | |-->WScreen
+ | | | |-->WRootWin
| | |-->WInput (mod_query)
| | |-->WEdln (mod_query)
| | |-->WMessage (mod_query)
screen. Each object of type \type{WRegion} has a size and position
relative to the parent \type{WRegion}. While a big part of Ion
operates on these instead of more specialised classes, \type{WRegion}
- is a ''virtual'' base class in that there are no objects of ''pure''
+ is a ``virtual'' base class in that there are no objects of ``pure''
type \type{WRegion}; all concrete regions are objects of some class
that inherits \type{WRegion}.
internal objects having an X window associated to them
(\type{WClientWins} also have X windows associated to them).
+ \item[\type{WMPlex}] is a base class for all regions that ``multiplex''
+ other regions. This means that of the regions managed by the multiplexer,
+ only one can be displayed at a time.
+
+ \item[\type{WScreen}]\indextype{WScreen} is an instance of \type{WMPlex}
+ for screens.
+
\item[\type{WRootWin}]\indextype{WRootWin} is the class for
root windows\index{root window} of X screens\index{screen!X}.
- Note that an ''X screen'' or root window is not necessarily a
- single physical screen\index{screen!physical} as a root window
- may be split over multiple screens when multi-head extensions
- such as Xinerama\index{Xinerama} are used. (Actually there
- can be only one \type{WRootWin} when Xinerama is used.)
-
- \item[\type{WMPlex}] is a base class for all regions that''multiplex''
- other regions. This means that of the regions managed by the multiplexer,
- only one can be displayed at a time. Classes that inhereit \type{WMPlex}
- include screens and frames.
+ It is an instance of \type{WScreen}.
+ Note that an ``X screen'' or root window is not necessarily a
+ single physical screen\index{screen!physical} as a root window
+ may be split over multiple screens when ugly hacks such as
+ Xinerama\index{Xinerama} are used. (Actually there can be only
+ one root window when Xinerama is used.)
- \item[\type{WScreen}]\indextype{WScreen} is the class for objects
- corresponding to physical screens. Screens may share a root
- window when Xinerama multihead extensions are used as explained
- above.
-
\item[\type{WFrame}]\indextype{WFrame} is the class for frames.
- While most Ion's objects have no graphical presentation, frames basically
- add to \type{WMPlex}es the decorations around client windows
- (borders, tabs).
+ While most Ion's objects have no graphical presentation, frames
+ basically add to \type{WMPlex}es the decorations around client
+ windows (borders, tabs).
\item[\type{WGroup}]\indextype{WGroup} is the base class for groups.
Particular types of groups are workspaces
\begin{description}
\item[\type{WInput}]\indextype{WInput} is a virtual base class for the
two classes below.
- \item[\type{WEdln}]\indextype{WEdln} is the class for the ''queries'',
+ \item[\type{WEdln}]\indextype{WEdln} is the class for the ``queries'',
the text inputs that usually appear at bottoms of frames and sometimes
- screens. Queries are the functional equivalent of ''mini buffers'' in
+ screens. Queries are the functional equivalent of ``mini buffers'' in
many text editors.
\item[\type{WMessage}]\indextype{WMessage} implements the boxes for
warning and other messages that Ion may wish to display to the user.
These also usually appear at bottoms of frames.
\end{description}
-There are also some other ''proxy'' classes that do not refer
+There are also some other ``proxy'' classes that do not refer
to objects on the screen. The only important one of these for
basic configuration is \type{WMoveresMode} that is used for
binding callbacks in the move and resize mode.
| |--> WClientWin
|-->WGroupWSs for workspaces
| |-->WTiling
- | | |-->possibly a WEdln, WMessage or WMenu
| | |-->WFrames
- | | |-->WGroupCWs (with contents as above)
+ | | | |-->WGroupCWs (with contents as above)
+ | | |-->possibly a WStatusBar or WDock
| |-->WFrames for floating content
+ | |-->possibly a WEdln, WMessage or WMenu
+ | |-->possibly a WStatusBar or WDock (if no tiling)
|-->WFrames for sticky stuff, such as the scratchpad
\end{verbatim}
\caption{Most common manager--managed relations}