aboutsummaryrefslogtreecommitdiffstats
path: root/doc
diff options
context:
space:
mode:
authorCarsten Haitzler <raster@rasterman.com>2004-11-25 03:37:45 +0000
committerCarsten Haitzler <raster@rasterman.com>2004-11-25 03:37:45 +0000
commit5e2388c886b15923f2b1350191524f40b0e9050a (patch)
treeeeb93c0db03cb87075ed74cc31367f669e5f2e72 /doc
parentbye bye! (diff)
downloadenlightenment-5e2388c886b15923f2b1350191524f40b0e9050a.tar.gz
_ _ _ _ _____ ___
| | | | ___| | | | ___| __ ___ ___ _______ ___ / _ \__ _____ _ __ | |_| |/ _ \ | | | |_ | '__/ _ \/ _ \_ / _ \/ __| | | | \ \ / / _ \ '__| | _ | __/ | | | _|| | | __/ __// / __/\__ \ | |_| |\ V / __/ | |_| |_|\___|_|_| |_| |_| \___|\___/___\___||___/ \___/ \_/ \___|_| I put E17's wm code into cvs. Hell is freezing over. Duke Nukem Forever will be out next week. Snowballls take up residence in Hell. The Fat Lady sings. The End is nigh... :) SVN revision: 12247
Diffstat (limited to 'doc')
-rw-r--r--doc/Makefile.am7
-rw-r--r--doc/documentation.html451
-rw-r--r--doc/enlightenment.pngbin0 -> 74944 bytes
3 files changed, 458 insertions, 0 deletions
diff --git a/doc/Makefile.am b/doc/Makefile.am
new file mode 100644
index 000000000..698471c98
--- /dev/null
+++ b/doc/Makefile.am
@@ -0,0 +1,7 @@
+MAINTAINERCLEANFILES = Makefile.in
+filesdir = $(datadir)/enlightenment/doc
+files_DATA = \
+documentation.html \
+enlightenment.png
+
+EXTRA_DIST = $(files_DATA)
diff --git a/doc/documentation.html b/doc/documentation.html
new file mode 100644
index 000000000..8be581a68
--- /dev/null
+++ b/doc/documentation.html
@@ -0,0 +1,451 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<HTML>
+<HEAD>
+ <TITLE>Enlightenment Developer Documentation</TITLE>
+ <STYLE>
+ <!--
+ @page { size: 51pc 66pc }
+ P.western { font-size: 8pt }
+ P.cjk { font-family: "Bitstream Vera Sans"; font-size: 8pt }
+ A.western:link { font-size: 8pt }
+ A.cjk:link { font-family: "Bitstream Vera Sans"; font-size: 8pt }
+ A.sdfootnotesym-western { font-size: 8pt }
+ A.sdfootnotesym-cjk { font-family: "Bitstream Vera Sans"; font-size: 8pt }
+ A.sdendnotesym-western { font-size: 8pt }
+ A.sdendnotesym-cjk { font-family: "Bitstream Vera Sans"; font-size: 8pt }
+ -->
+ </STYLE>
+</HEAD>
+<BODY LANG="en-US" DIR="LTR">
+<TABLE WIDTH=100% BORDER=0 CELLPADDING=0 CELLSPACING=0 STYLE="page-break-before: always">
+ <COL WIDTH=256*>
+ <TR>
+ <TD WIDTH=100% VALIGN=TOP>
+ <P CLASS="western" ALIGN=CENTER STYLE="margin-bottom: 0pc"><IMG SRC="enlightenment.png" NAME="Graphic1" ALIGN=LEFT WIDTH=320 HEIGHT=320 BORDER=0><FONT FACE="Bitstream Vera Sans"><FONT SIZE=5><B>Enlightenment</B></FONT></FONT></P>
+ <P CLASS="western" STYLE="margin-bottom: 0pc"><BR>
+ </P>
+ <P CLASS="western" ALIGN=CENTER STYLE="margin-bottom: 0pc"><FONT FACE="Bitstream Vera Sans"><FONT SIZE=1 STYLE="font-size: 6pt">Version
+ 0.17.0 </FONT></FONT>
+ </P>
+ <P CLASS="western" STYLE="margin-bottom: 0pc"><BR>
+ </P>
+ <P CLASS="western"><FONT FACE="Bitstream Vera Sans"><FONT SIZE=1 STYLE="font-size: 8pt"><B>What
+ is Enlightenment?</B> </FONT></FONT>
+ </P>
+ <P CLASS="western"><FONT FACE="Bitstream Vera Sans"><FONT SIZE=1 STYLE="font-size: 8pt">Enlightenment
+ is a Window Manager for X11. This is the latest incarnation of
+ code of the Enlightenment window manager (often referred to in
+ short as WM). This WM is built on the EFL (Enlightenment
+ Foundation Libraries) that have been worked on very hard over the
+ last few years. These libraries provide a sound base on which to
+ build the WM and related tools, utilities, and applications.</FONT></FONT></P>
+ <P CLASS="western"><FONT FACE="Bitstream Vera Sans"><FONT SIZE=1 STYLE="font-size: 8pt">Right
+ now if you are just a &quot;user&quot; this code is NOT for you.
+ You're on your own. If you are a developer wanting to work on the
+ code - read on. But first we should take a break for some
+ history... </FONT></FONT>
+ </P>
+ </TD>
+ </TR>
+</TABLE>
+<HR>
+<P CLASS="western"><FONT FACE="Bitstream Vera Sans"><FONT SIZE=1 STYLE="font-size: 8pt"><B>A
+Brief History of Time... err Enlightenment</B></FONT></FONT></P>
+<P CLASS="western" STYLE="margin-left: 4.73pc"><FONT FACE="Bitstream Vera Sans"><FONT SIZE=1 STYLE="font-size: 8pt">In
+the past E has undergone 1 major rewrite since release DR
+(Development Release) 0.1. This rewrite occurred for DR 0.14). DR
+0.17 heralds another major rewrite. We have to be honest here. The
+reason for this is the fact that we got lazy. Design went out the
+window in favor of quick fixes and fast features. Too many people
+worked on the code with too little care and attention to detail.
+Large design mistakes were made, that to undo would be paramount to
+half a rewrite. Patches were accepted without taking care to look at
+them in detail, clean them or even reject them if not &ldquo;well
+done&rdquo; enough for E's code. Thus the decision was made to fix
+things once and for all and split things up, have well defined
+interfaces (the EFL library API's) and clean and consistent code and
+naming schemes. No it's not perfect - probably it will never be, but
+we are trying. It is a massive improvement over anything
+Enlightenment had before, and we are proud enough to probably say
+it's some of the better API's and code of any available in the world
+or used in any application or WM. It's not the best, but it's pretty
+good. In doing this rewrite and split, we aim to not make those
+mistakes again that happened before DR 0.17.0.</FONT></FONT></P>
+<P CLASS="western" STYLE="margin-left: 4.73pc"><FONT FACE="Bitstream Vera Sans"><FONT SIZE=1 STYLE="font-size: 8pt">With
+Enlightenment and EFL's massive break-up into smaller sized chunks,
+many users will complain about &ldquo;how hard it is to install&rdquo;
+because there are so many libraries and inter-dependencies to handle.
+We believe this is not our job, but the job of a package management
+system to handle. We have documented the dependencies for people to
+follow, but if anything, we aim to split things up more to make
+maintenance, in the long term, an easier task. So in an effort to
+avoid them, Here is a quick style and design guide for working on
+this code. Please follow it, and if what you want to do doesn't fit
+in, please discuss it first. Discuss your designs on the e-devel
+(enlightemment-devel@lists.sourceforge.net) mailing list. Make your
+code consistent and easy to follow - make it follow the style of the
+rest in function naming, variable naming, access functions etc. Use
+existing infrastructures - or extend them cleanly as needed. Just
+because an infrastructure or system doesn't provide an accessor or
+way of doing something does NOT mean you can't add it. Choose a clean
+&ldquo;correct&rdquo; implementation over a nasty hack, all the time.
+You get the idea. Now, on to the style guide.</FONT></FONT></P>
+<P CLASS="western"><FONT FACE="Bitstream Vera Sans"><FONT SIZE=1 STYLE="font-size: 8pt"><B>Enlightenment
+Stylin'</B></FONT></FONT></P>
+<P CLASS="western" STYLE="margin-left: 4.73pc"><FONT FACE="Bitstream Vera Sans"><FONT SIZE=1 STYLE="font-size: 8pt">Firstly
+comes naming. All functions are name spaced. The EFL libraries begin
+with library_something_something. It is object oriented naming so you
+will have system_subsystem_subsystem_object_verb() as a name. For
+example: e_config_load() or e_border_move() etc. All functions are
+all lower-case with underscores between &quot;words&quot;. All
+functions that are accessed outside a file must have a prototype in
+the file's header. All files have their code file (e_file.c) and a
+header (e_file.h). The main &quot;master&quot; header (e.h) includes
+all the smaller ones. All functions within that file are the same
+name as the file. i.e. e_frog.c contains functions called
+e_frog_something(). All internal functions only used within that file
+should be declared as static and should begin with an underscore.
+i.e. _e_frog_something(). All &quot;local&quot; globals (global to
+that file only) should be declared static and beginning with _e_frog
+just like functions. All static local functions should be at the end
+of the file. All static function prototypes should be first at the
+top of each file. All static local variables should come next, then
+followed by the accessible functions. Any system that has &quot;state&quot;
+should have an init and shutdown function. The init and shutdown
+functions should be called from e_main.c during startup and shutdown
+of the WM. It is encouraged that even systems that do not have state
+have an init and shutdown call pair, just in case in future they will
+gain state internally.</FONT></FONT></P>
+<P CLASS="western" STYLE="margin-left: 4.73pc"><FONT FACE="Bitstream Vera Sans"><FONT SIZE=1 STYLE="font-size: 8pt">Any
+system that returns objects (allocated structures) should probably
+use the E_Object system as a parent. See examples on its use in the
+code. E_Object provides a simple object wrapper with reference
+counting, object pointer and type checking and safety that should,
+runtime, trap a lot of potential problems and let the programmer know
+about them. Use the object type checking macros for checking if an
+object passed into a function as a parameter is a valid object.</FONT></FONT></P>
+<P CLASS="western" STYLE="margin-left: 4.73pc"><FONT FACE="Bitstream Vera Sans"><FONT SIZE=1 STYLE="font-size: 8pt">Keep
+to the indentation and spacing style thats there - it makes it easier
+to read if all the code matches. All functions called as &quot;callbacks&quot;
+should be called _e_system_cb_something. The &quot;cb&quot; denotes
+that that function may get called by other code, maybe unpredictably,
+at any time in response to an event, timer, or something mostly out
+of the control of the program itself. Functions such as the free
+function for an object aren't the same kind of callback, since they
+are predictable and controllable, so they do not get &quot;cb&quot;
+in their name.</FONT></FONT></P>
+<P CLASS="western" STYLE="margin-left: 4.73pc"><FONT FACE="Bitstream Vera Sans"><FONT SIZE=1 STYLE="font-size: 8pt">So
+that's the quick rundown on basic coding style. More will likely be
+added to this list, but the best way to put it all is &quot;look at
+what's there and follow the same style&quot;.</FONT></FONT></P>
+<P CLASS="western"><FONT FACE="Bitstream Vera Sans"><FONT SIZE=1 STYLE="font-size: 8pt"><B>Tree
+Layout</B></FONT></FONT></P>
+<P CLASS="western" STYLE="margin-left: 4.73pc"><FONT FACE="Bitstream Vera Sans"><FONT SIZE=1 STYLE="font-size: 8pt">The
+E17 source tree is well structured, with a location for everything.
+In the top-level directory you will find a src directory that is the
+master directory for all the C source code for the WM and components.
+You will also find a doc and data directories. The doc directory
+contains all documentation (this document for example).</FONT></FONT></P>
+<P CLASS="western" STYLE="margin-left: 4.73pc"><FONT FACE="Bitstream Vera Sans"><FONT SIZE=1 STYLE="font-size: 8pt">The
+data directory contains all cross-platform data needed for the WM to
+run as well as a basic default theme that it also needs to run.
+Currently the default theme is not complete at all and is no
+indication of Enlightenments final look when it is released. It is
+only just enough to make it work and demonstrate an example of how to
+make a theme. There is also other data used for things like low-level
+error dialogs (used for example if the theme doesn't work) as well as
+a default font and other system data such as data for the splash
+screen displayed while Enlightenment starts up.</FONT></FONT></P>
+<P CLASS="western" STYLE="margin-left: 4.73pc"><FONT FACE="Bitstream Vera Sans"><FONT SIZE=1 STYLE="font-size: 8pt">The
+src directory contains 3 main repositories of code. They are bin, lib
+and modules. The bin directory contains all the source code for the
+WM itself and any primary executables it uses curing execution. The
+modules directory contains all plug-in modules that E17 can load and
+unload dynamically at runtime, allowing the WM to be extended even
+after it has been compiled and installed by users, other developers
+or by the E development team itself. These modules are intended to
+provide clean modular boundaries for certain features of
+Enlightenment too, so if a feature isn't used it doesn't have to use
+any resources at all. Each module lives in its own subdirectory with
+the code and special module specific data like images, Edje .eet
+files etc. that are specific to that module. See further on for more
+information on modules.</FONT></FONT></P>
+<P CLASS="western"><FONT FACE="Bitstream Vera Sans"><FONT SIZE=1 STYLE="font-size: 8pt"><B>Design
+Ethos</B></FONT></FONT></P>
+<P CLASS="western" STYLE="margin-left: 4.73pc"><FONT FACE="Bitstream Vera Sans"><FONT SIZE=1 STYLE="font-size: 8pt">As
+for design, Enlightenment doesn't strictly follow a conservative WM
+design. It does some things quite differently, with the aim of
+providing more features with simpler internal design to achieve more
+features with more solidity than a conservative design. An example of
+this is the fact that E17 does away completely with the root window
+and puts all managed windows within a virtual root. Virtual roots are
+valid to be used in WM's but are rarely used and many client
+applications are badly written to hunt for windows on the screen
+ASSUMING there is no virtual root. These are bugs in the respective
+applications (some of which are: Mozilla, xwininfo, xprop, xkill)
+which when searching for an application window should walk the window
+tree correctly. The reason for Enlightenment to adopt virtual roots
+is not to make users annoyed or force application developers to
+change their code, but to allow certain things to be done much more
+efficiently. A virtual root allows the WM to scroll windows
+seamlessly and all in sync by using window gravity and resizing of
+the virtual root container. It also allows the WM to simulate
+different resolutions very easily since it can control the virtual
+root window, which is not normally possible to do with the real root
+window.</FONT></FONT></P>
+<P CLASS="western"><FONT FACE="Bitstream Vera Sans"><FONT SIZE=1 STYLE="font-size: 8pt"><B>Managers</B></FONT></FONT></P>
+<P CLASS="western" STYLE="margin-left: 4.73pc"><FONT FACE="Bitstream Vera Sans"><FONT SIZE=1 STYLE="font-size: 8pt">Managers
+are the basic unit of window management. One Manager object is create
+per root window to manage. For more people, even if they run Xinerama
+across multiple screens, there is only 1 root window, and thus E17
+will only ever have 1 Manager object. If the user runs traditional
+Multihead there will be 1 root window per screen, that may be a
+different size and color depth. E17 will create 1 Manager object per
+screen in this situation. The Manager object handles redirection WM
+specific events for the root window into the WM, thus effectively
+being able to trap several kinds of events before a client gets to
+perform them, thus enabling it to be a WM. A Manager object actually
+creates a window the size of the root window it manages and covers
+the root window up completely. Each Manager object may contain 1 or
+more Container objects which in-turn create their own child windows
+of the Manager window.</FONT></FONT></P>
+<P CLASS="western"><FONT FACE="Bitstream Vera Sans"><FONT SIZE=1 STYLE="font-size: 8pt"><B>Containers</B></FONT></FONT></P>
+<P CLASS="western" STYLE="margin-left: 4.73pc"><FONT FACE="Bitstream Vera Sans"><FONT SIZE=1 STYLE="font-size: 8pt">Container
+objects create their own windows to CONTAIN managed window frames,
+the desktop window (the desktop background is actually just a big
+window that is always kept below all frame windows that contains a
+canvas for displaying the desktop background and all desktop objects
+such as a launcher bar, file icons, etc. etc.). The Container is
+responsible for holding this together and also managing a list of
+&ldquo;obscuring&rdquo; objects that fully obscure the desktop
+canvas, so it can help optimize drawing to the desktop canvas by
+avoiding to draw parts of the desktop background canvas that cannot
+be seen at all. This list is also used to draw soft drop shadows on
+the desktop canvas by the Dropshadow module. The Container object
+managed the desktop background, which is actually a complete EDJE
+object. This may seem strange as a simple JPEG or PNG or GIF may be
+enough, but by using an EDJE object for the background, the desktop
+wallpaper can be animated, react to events and input, scale
+intelligently (not just &ldquo;stretch&rdquo; or &ldquo;tile&rdquo;),
+where the desktop wallpaper designer can specify what elements of the
+wallpaper scale, align, where and how, if they tile, overlay,
+underlay each other, and how.</FONT></FONT></P>
+<P CLASS="western" STYLE="margin-left: 4.73pc"><FONT FACE="Bitstream Vera Sans"><FONT SIZE=1 STYLE="font-size: 8pt">Currently
+the Container only responds to configuration change events to change
+the background, which needs to be a path to a Edje .eet file that
+contains a Edje group of the key &ldquo;desktop/background&rdquo;. It
+will load this group, if present in the file as the background. What
+it needs is a configuration tool that can browse the filing system
+and directories for .eet files that are like this, display thumbnails
+and previews, allow a user to select a new background and maybe
+specify if the background file should change between different
+virtual desktops (which are currently not implemented), and also be
+able to browse normal JPEG, PNG etc. files and &ldquo;import&rdquo;
+them into a users wallpaper database (a directory of wallpaper .eet
+files) and thus convert into a Edje .eet file, which now retains the
+scaling, tiling and other preferences the user selected within the
+file. The user can now give this file to others and it will retain
+the same information, without them needing to know if the wallpaper
+needs to tile as a pattern, stretch etc.</FONT></FONT></P>
+<P CLASS="western" STYLE="margin-left: 4.73pc"><FONT FACE="Bitstream Vera Sans"><FONT SIZE=1 STYLE="font-size: 8pt">The
+desktop canvas is also shared by many modules that may display things
+like battery meters, cpu load, launcher bars, drop shadows etc. on
+the desktop background. The desktop canvas lets this be a bit more
+organized than it would be with a &ldquo;free for all&rdquo; drawing
+to the root window under more conservative WM's.</FONT></FONT></P>
+<P CLASS="western"><FONT FACE="Bitstream Vera Sans"><FONT SIZE=1 STYLE="font-size: 8pt"><B>Borders</B></FONT></FONT></P>
+<P CLASS="western" STYLE="margin-left: 4.73pc"><FONT FACE="Bitstream Vera Sans"><FONT SIZE=1 STYLE="font-size: 8pt">Borders
+are the frame outside an application window that is controlled by the
+WM and that holds the application window within, and allows users to
+move, resize, shade, lower, close and otherwise control windows. This
+is currently buggy and not very useful and needs work in combination
+with the Manager system.</FONT></FONT></P>
+<P CLASS="western"><FONT FACE="Bitstream Vera Sans"><FONT SIZE=1 STYLE="font-size: 8pt"><B>Menus</B></FONT></FONT></P>
+<P CLASS="western" STYLE="margin-left: 4.73pc"><FONT FACE="Bitstream Vera Sans"><FONT SIZE=1 STYLE="font-size: 8pt">Enlightenment
+has its own Menu widget code to allow for highly themable menus that
+match your WM's theme. These menus are intended to act as ways to
+launch programs, select actions to perform with context sensitive
+menus and to provide basic on/off and option select options for
+simple enabling and disabling of features of states on objects. The
+menu code is fairly solid, but incomplete. It is efficient, able to
+let the user navigate with the keyboard, mouse wheel or mouse. It
+currently needs work to support shaped menu windows, be able to add,
+delete and modify menu items while the item is still realized, and a
+set of other things listed in the TODO list at the top of the
+e_menu.c source file.</FONT></FONT></P>
+<P CLASS="western"><FONT FACE="Bitstream Vera Sans"><FONT SIZE=1 STYLE="font-size: 8pt"><B>Modules</B></FONT></FONT></P>
+<P CLASS="western" STYLE="margin-left: 4.73pc"><FONT FACE="Bitstream Vera Sans"><FONT SIZE=1 STYLE="font-size: 8pt">Modules
+are a new and powerful way to extend E17 by being able to load and
+execute code during runtime that may be shipped with E17 or even
+developed after installation as enhancements and additions. This
+system still needs work in the configuration department, knowing what
+modules to load and not load, if they are to be enabled once they are
+loaded etc. It is possible to have &ldquo;dormant&rdquo; modules that
+are loaded but not enabled. They will use memory and resources for
+the module entry and the binary executable code loaded into memory,
+but nothing else. An enabled module will also use resources for
+objects, images, etc. etc.</FONT></FONT></P>
+<P CLASS="western"><FONT FACE="Bitstream Vera Sans"><FONT SIZE=1 STYLE="font-size: 8pt"><B>Dropshadow
+Module</B></FONT></FONT></P>
+<P CLASS="western" STYLE="margin-left: 4.73pc"><FONT FACE="Bitstream Vera Sans"><FONT SIZE=1 STYLE="font-size: 8pt">This
+module demonstrates the Container shape system allowing a module to
+monitor obscuring shapes in a container. This lets the module, in
+this case, draw soft shadows under these obscuring shapes. It is a
+fairly simple module and also demonstrates a module that has no
+visible elements on the screen you can click on or control directly
+with the mouse or keyboard. It could do with some optimization work
+with the blur algorithm, like clipping out the obscuring shape
+entirely from the blurring algorithm, and perhaps finding a way of
+blurring using a Gaussian blur that is faster.</FONT></FONT></P>
+<P CLASS="western"><FONT FACE="Bitstream Vera Sans"><FONT SIZE=1 STYLE="font-size: 8pt"><B>IBar
+Module</B></FONT></FONT></P>
+<P CLASS="western" STYLE="margin-left: 4.73pc"><FONT FACE="Bitstream Vera Sans"><FONT SIZE=1 STYLE="font-size: 8pt">The
+IBar module is a template for doing a &ldquo;launcher panel&rdquo; in
+E17. It allows the user to manage a list of frequently used
+applications to go into the IBar's panel. It is an attempt to unify
+the configuration of &ldquo;bars&rdquo; in E17 so if a user changes
+launcher bar modules, they can retain at least most of the basic
+configuration, like what applications are in the bar, and so-on. The
+IBar has some unique characteristics allowing a lot of applications
+to be held in a small bar, by having it auto-scroll on mouse over to
+the desired location in the list. It uses the Application interface
+to fetch a list of applications and monitor this list for changes on
+disk. The IBar also allows itself to be resized and dragged around
+the edges of the screen, set to fill a edge, auto-size to fit its
+contents, or be a fixed size.</FONT></FONT></P>
+<P CLASS="western" STYLE="margin-left: 4.73pc"><FONT FACE="Bitstream Vera Sans"><FONT SIZE=1 STYLE="font-size: 8pt">It
+needs work to be done on auto hide and auto show, so on an auto show
+it could signal other parts of E17, for example, to slide all windows
+out of the way, or other such features. It needs work to display
+application names, descriptions and other such information as well.
+It also needs to support the icon size changing on the fly as well as
+saving and loading its configuration, On of the largest pieces of
+work is to support subdirectories in the bar's application list. How
+best to do this is still up in the air. For now this isn't supported.</FONT></FONT></P>
+<P CLASS="western"><FONT FACE="Bitstream Vera Sans"><FONT SIZE=1 STYLE="font-size: 8pt"><B>Test
+Module</B></FONT></FONT></P>
+<P CLASS="western" STYLE="margin-left: 4.73pc"><FONT FACE="Bitstream Vera Sans"><FONT SIZE=1 STYLE="font-size: 8pt">This
+is just a test module for playing with new module features. It will
+not make its way into a final E17 release, but can be used as a bare
+skeleton for building a new module.</FONT></FONT></P>
+<P CLASS="western"><FONT FACE="Bitstream Vera Sans"><FONT SIZE=1 STYLE="font-size: 8pt"><B>Applications</B></FONT></FONT></P>
+<P CLASS="western" STYLE="margin-left: 4.73pc"><FONT FACE="Bitstream Vera Sans"><FONT SIZE=1 STYLE="font-size: 8pt">This
+subsystem is responsible for being able to list applications held in
+E17 specific application directories. This system can inform other
+parts of E17 and modules of changes, such as an application being
+deleted or added, its name or icon changed, the order of applications
+in a directory changing, an application being executed or displaying
+its window, or finishing execution. It can share the application
+lists between multiple systems to save RAM and CPU and I/O in loading
+them multiple times.</FONT></FONT></P>
+<P CLASS="western" STYLE="margin-left: 4.73pc"><FONT FACE="Bitstream Vera Sans"><FONT SIZE=1 STYLE="font-size: 8pt">It
+may be of surprise to find E17 is not loading the XML, .desktop
+entries etc. etc. than KDE and GNOME use. In all honesty that system
+is a little overcomplicated and hard to keep up with. It also is not
+as robust as E17's system. With E17's system the images for the icons
+are within the application file. They cannot be separately deleted.
+Also using an Edje .eet file for the application entry allows for
+fully scalable and animated icons as well, with excellent compression
+abilities. The intent is to have external tools that can import and
+create such files FROM existing system databases of applications and
+monitor these for changes, reflecting those changes in Enlightenments
+application directories.</FONT></FONT></P>
+<P CLASS="western"><FONT FACE="Bitstream Vera Sans"><FONT SIZE=1 STYLE="font-size: 8pt"><B>IPC</B></FONT></FONT></P>
+<P CLASS="western" STYLE="margin-left: 4.73pc"><FONT FACE="Bitstream Vera Sans"><FONT SIZE=1 STYLE="font-size: 8pt">IPC
+(inter process communication) is provided in E17 as a mechanism for
+another application to send commands and requests to Enlightenment
+and receive responses with information. This mechanism is intended to
+allow external utilities to be written and ask Enlightenment to do
+things via a communications channel built into the WM. E17 uses the
+Ecore IPC system to do this. So far it support no commands at all,
+but will accept clients connecting. Many commands need to be
+implemented here, such as being able to ask E17 to load or unload a
+module, change background, change focus mode, theme, restart etc.</FONT></FONT></P>
+<P CLASS="western"><FONT FACE="Bitstream Vera Sans"><FONT SIZE=1 STYLE="font-size: 8pt"><B>Objects</B></FONT></FONT></P>
+<P CLASS="western" STYLE="margin-left: 4.73pc"><FONT FACE="Bitstream Vera Sans"><FONT SIZE=1 STYLE="font-size: 8pt">This
+provides a basic Object Oriented handling system for E17. Any major
+&ldquo;object&rdquo; in E17 should use this system for handling
+reference counting, destruction and creation of objects, as it
+provides safety mechanisms to check if an object has accidentally
+been destroyed and still has a pointer to it, keep references on
+objects intact etc. This should be used as much as possible, as well
+as the macros it provides for checking on entry points into subsystem
+functions etc.</FONT></FONT></P>
+<P CLASS="western"><FONT FACE="Bitstream Vera Sans"><FONT SIZE=1 STYLE="font-size: 8pt"><B>Pointers</B></FONT></FONT></P>
+<P CLASS="western" STYLE="margin-left: 4.73pc"><FONT FACE="Bitstream Vera Sans"><FONT SIZE=1 STYLE="font-size: 8pt">This
+subsystem handles setting of X mouse cursors in an abstract fashion.
+In theory E just looks at a cursor as RGBA pixel data. In future
+Ecore will be expanded to be able to set full color cursors in X as
+well as monochrome versions of them. Currently it is very simplistic
+loading a fixed PNG as a cursor. This needs to be improved.</FONT></FONT></P>
+<P CLASS="western"><FONT FACE="Bitstream Vera Sans"><FONT SIZE=1 STYLE="font-size: 8pt"><B>Box</B></FONT></FONT></P>
+<P CLASS="western" STYLE="margin-left: 4.73pc"><FONT FACE="Bitstream Vera Sans"><FONT SIZE=1 STYLE="font-size: 8pt">This
+is a basic Evas Smart Object that acts as a horizontal or vertical
+box layout container. It needs more features for layout, like better
+non homogeneous layout. This is a handy object that is sued by menus
+and the IBar module for starters.</FONT></FONT></P>
+<P CLASS="western"><FONT FACE="Bitstream Vera Sans"><FONT SIZE=1 STYLE="font-size: 8pt"><B>Icons</B></FONT></FONT></P>
+<P CLASS="western" STYLE="margin-left: 4.73pc"><FONT FACE="Bitstream Vera Sans"><FONT SIZE=1 STYLE="font-size: 8pt">This
+is an Evas Smart Object that creates a icon display object That
+handles scaling the icon sensibly within the object bounds, so the
+application doesn't have to handle trying to retain aspect ratio for
+the object. This is a simple smart object and indicative of possibly
+more in future to go into E17's code to save time and effort.</FONT></FONT></P>
+<P CLASS="western"><FONT FACE="Bitstream Vera Sans"><FONT SIZE=1 STYLE="font-size: 8pt"><B>Paths</B></FONT></FONT></P>
+<P CLASS="western" STYLE="margin-left: 4.73pc"><FONT FACE="Bitstream Vera Sans"><FONT SIZE=1 STYLE="font-size: 8pt">This
+helps E17 find files in a list of paths/directories. There isn't a
+lot to say about this except that it works and may need some minimal
+expansion in future.</FONT></FONT></P>
+<P CLASS="western"><FONT FACE="Bitstream Vera Sans"><FONT SIZE=1 STYLE="font-size: 8pt"><B>User
+Information</B></FONT></FONT></P>
+<P CLASS="western" STYLE="margin-left: 4.73pc"><FONT FACE="Bitstream Vera Sans"><FONT SIZE=1 STYLE="font-size: 8pt">This
+returns information about a user such as their home directory. This
+will expand in future.</FONT></FONT></P>
+<P CLASS="western"><FONT FACE="Bitstream Vera Sans"><FONT SIZE=1 STYLE="font-size: 8pt"><B>Virtual
+and Multiple Desktops</B></FONT></FONT></P>
+<P CLASS="western" STYLE="margin-left: 4.73pc"><FONT FACE="Bitstream Vera Sans"><FONT SIZE=1 STYLE="font-size: 8pt">This
+is not implemented yet.</FONT></FONT></P>
+<P CLASS="western"><FONT FACE="Bitstream Vera Sans"><FONT SIZE=1 STYLE="font-size: 8pt"><B>Error
+Dialogs</B></FONT></FONT></P>
+<P CLASS="western" STYLE="margin-left: 4.73pc"><FONT FACE="Bitstream Vera Sans"><FONT SIZE=1 STYLE="font-size: 8pt">This
+displays very basic error dialogs right now, either as text in the
+console inf E17 isn't ready to run graphically yet, This needs to be
+made more robust, so it can display errors if it cannot find the font
+and images for the basic error dialog. It should also be expanded to
+support fully themed dialogs if the theme loads properly and properly
+supports theming of dialogs, so dialogs look good.</FONT></FONT></P>
+<P CLASS="western"><FONT FACE="Bitstream Vera Sans"><FONT SIZE=1 STYLE="font-size: 8pt"><B>Initialization
+Splash Screen</B></FONT></FONT></P>
+<P CLASS="western" STYLE="margin-left: 4.73pc"><FONT FACE="Bitstream Vera Sans"><FONT SIZE=1 STYLE="font-size: 8pt">This
+keeps the user amused while E17 starts up and launches all programs.
+For now it is artificially fixed to stay up for 4 seconds so you can
+enjoy its radiant splendor, as E17 starts so quickly you'd never see
+it, but in future it will stay up until the WM is all ready to go.</FONT></FONT></P>
+<P CLASS="western"><FONT FACE="Bitstream Vera Sans"><FONT SIZE=1 STYLE="font-size: 8pt"><B>Configuration</B></FONT></FONT></P>
+<P CLASS="western" STYLE="margin-left: 4.73pc"><FONT FACE="Bitstream Vera Sans"><FONT SIZE=1 STYLE="font-size: 8pt">Loading
+and saving configuration is a big task. E17 uses Ecore Config as its
+underlying layer for saving and loading configuration. The E17 Config
+system simply sets up all listeners for when configuration values
+change, loads all the initial configuration values, and saves them
+when and if they change internally. It needs work to make it much
+simpler as many more config values will be added and it needs to be
+more efficient ad loading them if they change runtime via a listener
+(the number of listeners needs to be reduced), so maybe loading
+config values in sections/groups and deferring a reload in a Ecore
+Job would limit the reloading effects. Also declaring config values
+and how to load and declare them is required. Maybe a big table with
+default values, min, max, step, descriptions etc.</FONT></FONT></P>
+<P CLASS="western"><FONT FACE="Bitstream Vera Sans"><FONT SIZE=1 STYLE="font-size: 8pt"><B>File
+Operations</B></FONT></FONT></P>
+<P CLASS="western" STYLE="margin-left: 4.73pc"><FONT SIZE=1 STYLE="font-size: 8pt"><FONT FACE="Bitstream Vera Sans">Files
+need to be accessed, listed, found, examined as part of E17 running.
+This file has simplified, easy-to-use functions for doing anything
+related to files. This file will expand over time as more file
+operations are needed.</FONT></FONT></P>
+<P CLASS="western"><FONT FACE="Bitstream Vera Sans"><FONT SIZE=1 STYLE="font-size: 8pt"><B>Miscellaneous
+Utilities</B></FONT></FONT></P>
+<P CLASS="western" STYLE="margin-left: 4.73pc"><FONT SIZE=1 STYLE="font-size: 8pt"><FONT FACE="Bitstream Vera Sans">Things
+that are useful in many places but do not have enough scope to have a
+file of their own go into this file.</FONT></FONT></P>
+</BODY>
+</HTML>
diff --git a/doc/enlightenment.png b/doc/enlightenment.png
new file mode 100644
index 000000000..47597a8d4
--- /dev/null
+++ b/doc/enlightenment.png
Binary files differ