eboxy Release Notes
-------------------

0.4.0-pre2
----------

Note: This is a pre-release version of eboxy 0.4.0. There are still a few
things that need to be ironed out, however this release gives people a chance
to test things before the final release. If you find a bug, or a mistake in
the documentation, please report it as soon as possible.

Changes since 0.4.0-pre1:

- Fixed crash bug when switching between pages with plugins loading and 
  unloading
- Fixed page OnShow/OnLoad events to be waited on

Changes since 0.3.9:

- There have been substantial internal changes to the code in this version.
  Most importantly, all of the SDL and SDL_gui specific code has been split
  out into an "interface plugin" system. Interface plugins are separate from
  eboxy's existing "generic" plugins, and an interface plugin is chosen when
  eboxy is started. In theory an interface plugin for any kind of
  input/output device could be created. Currently the only interface plugin
  available is the SDL_gui one, however future versions will add more.
- eboxy 0.4 is not backwards-compatible with existing generic plugins. The
  reason for this is that the way the old plugin code accepted returned
  strings from plugins was flawed in a way that resulted in memory leaks, as
  eboxy could not be sure if it was safe to free the memory associated with
  these strings. Fixing this required breaking compatibility, however it
  should not be difficult to fix any existing plugin code to work with 0.4.
  See the "eboxy Extension Guide" (extensionguide-html/index.html or
  extensionguide.txt in eboxy/docs/en/) for further details.
- The documentation has been converted to DocBook format, and the layout
  has changed slightly. The documentation is still in eboxy/docs/en, however
  the HTML versions are in their own subdirectories (userguide-html and
  extensionguide-html). Plain text versions are still provided.
- There is a new configure option --with-plugin-path which lets you specify
  the directory where eboxy should look for plugins. This is useful if you
  wish to run eboxy 0.4 side-by-side with eboxy 0.3.x. Generic plugins are
  loaded from their own subdirectory "generic" under this directory;
  likewise, interface plugins are in an "interface" subdirectory.
- eboxy 0.4.0 has much improved scripting language, particularly in the area
  of expressions - see the documentation for in-depth details. One change
  from previous versions is that you are no longer required to put quotes
  around numbers (they are now accepted as literals), and there are now
  literals for true and false as well.
  

0.3.9
-----

- This release fixes a long-standing build bug that forced people to link
  SDL_gui against libstdc++ at build time. The cause of this was eboxy's
  configure script, which attempted to test whether SDL_gui was installed
  using C instead of C++. This is now fixed, so you don't need to mess around
  with any special steps when installing SDL_gui anymore. My apologies for
  any inconvenience this silly bug caused.
- One new feature has been added - the textfield widget has a new validchars
  property, which allows you to specify a regular expression to verify
  entered characters against. For example, if you set validchars to "[0-9]"
  on a textfield, the user would only be able to enter numbers into that
  textfield. This does not have any effect on setting the text property of a
  textfield directly, however. The validchars property is available in the
  XML file and in scripts.
- The documentation has not been updated for this release, because my system
  is no longer capable of compiling the old LinuxDoc SGML format. (In the 0.4
  development version the documentation has already been converted to DocBook
  so this will not be an issue in future.)


0.3.8
-----

- This is a minor bugfix release only. See the changelog for details.


0.3.7
-----

- This release introduces a number of important new capabilities for plugin
  developers. These include dynamic widget and page creation at runtime,
  execution of script code, and the ability to query and enumerate various
  things that were previously not exposed.
- The widget type names (as returned by typeOfObject and the type property)
  have been changed to line up with the names used in the XML file. For most
  of the names this was just a change to lower-case.
- A number of other minor features have been added. See the changelog for
  more details.
- There were a significant number of bugs fixed in this release. For this
  reason, all users are recommended to upgrade.


0.3.6
-----

- This is primarily a bugfix and minor feature update release. See the
  changelog for the full list of changes. This should largely be a drop-in
  replacement for 0.3.5 with no modifications to the configuration required.


0.3.5
-----

- This version introduces configurable keyboard key bindings and a new action
  system. The names of some of the existing actions (previously only used
  when using a LIRC remote) have been changed, so if you use LIRC to control
  eboxy you will need to update your ~/.lircrc file. The changes from
  previous versions are as follows:

  Old Name       New Name
  ------------   -------------
  enter          accept
  up             prev
  down           next
  listprev       item_prev
  listnext       item_next
  listprevpage   item_prevpage
  listnextpage   item_nextpage
  listfirst      item_first
  listlast       item_last

  Many other actions have also been introduced. See the documentation for
  details. (In case you are wondering, the reason for changing the names of
  these was because they are now applicable to other widgets, eg.
  textfields).

- The default keyboard controls are different from the hard-coded ones used
  in previous versions. The new default keyboard key mapping is:

  Escape    quit
  Enter     accept
  Left      prev
  Right     next
  Up        item_prev
  Down      item_next
  PageUp    item_prevpage
  PageDown  item_nextpage
  Home      item_first
  End       item_last

  If you want to change the keyboard key bindings, edit the file
  ~/.eboxy/keys (eboxy needs to be run once in order to create it). Details
  of how to edit this file are in the user guide (eboxy/docs/en/index.html
  or index.txt).

- At long last, a file browser plugin has been added to eboxy. You can try 
  out a simple demo in skins/fontbrowser (double click or use the Enter key
  to select items in the list). See the documentation for the plugin
  (plugins/filebrowser/filebrowser.txt) for details.

- There is now a new way of loading plugins. It is described in full in the
  user guide, but basically instead of a line in a script, you put a
  <plugin> element into the XML, either within the page in which you wish to
  use it (only loaded while the page is visible) or in the system section
  (always loaded while eboxy is running). The major benefit of this is that
  it allows you to have scripts bound to events that the plugin fires. The
  old loadplugin script command still works as in previous versions, but the
  new method is the preferred way to use plugins. See the user guide for
  further details.

- The documentation has been updated with some information on working around
  problems with eboxy and window focus under X. See the "Known Issues"
  section of the user guide.

- 0.3.5 should be backwards-compatible with all plugins compiled for 0.3.4,
  and should work fine with existing XML skins.


0.3.4
-----

- This release breaks binary compatibility with plugins. This was necessary
  due to the changes to the way methods are handled. Methods can now have
  arguments passed into them, and can return values back. To bring existing
  plugins up to speed, you will need to link them against the updated plugin
  client library, include the updated header, and change your calls to
  registerMethodDL as appropriate. One important thing you need to do is to
  change the method function signatures. Previously, you would have had
  something like this:

    int methodfn(const char *sender)...

  Now, you need to change that to:

    const char *methodfn(const char *sender, int numargs, const char *args[])...

  Note that you _must_ do this or your code will cause a crash at some
  point - the compiler will not warn you about this, as the functions are
  dynamically loaded.

  As you can see, you now return a string from methods. This string can be
  got at in scripts. It is not mandatory, simply return and empty string ("")
  if you don't want to return anything. Do not return NULL, and be sure not
  to miss any "return 0" lines left over from the old code.

- One of the main motivations for introducing better methods was for
  the new listbox widgets. These should allow for much greater flexibility -
  you can now provide the user with a choice from a runtime-modifiable list
  of items. For example, you could make a plugin that used a listbox widget
  to provide a list of files to choose from.


0.3.3
-----

- This release fixes some major bugs; it is recommended that all users
  upgrade especially if you are currently using 0.3.2 (which introduced 
  several of the bugs fixed by 0.3.3).
- Plugins are no longer automatically unloaded when the application hides 
  (when exechide is used in a script) or when a new XML file is loaded.
  This should never have been done in the first place.


0.3.2
-----

General:
- There have been some major improvements in documentation for this release.
  There are two new LinuxDoc-style manuals to be found in eboxy/docs/en -
  index.html (or .txt) is the user manual and extensions.html (or .txt)
  describes how to extend eboxy with plugins.
- Events (other than the new system events) are now threaded. This means that
  you can run external programs and wait until they complete without freezing
  up the GUI, so if you want to you can now properly display status from a
  running application in eboxy.
- LIRC remote button events are now ignored when the application is hidden
  (while an application started using exechide in a script is running) or
  when eboxy does not have input focus, ie. if you are using another
  application. This is different to previous versions where running any
  external program from a script at all would disable LIRC events until the
  program finished execution.
- eboxy now initialises the audio device by default. If you do not want this
  then use the --noaudio switch.
- The system methods focusnext, focusprevious and selectfocused are now
  queued - that is when control returns to the script they are not guaranteed
  to have finished.
- The script parser now prints out the line number when an error occurs. The
  errors are still just as confusing, though (to be worked on).

For plugin developers:
- The plugin interface has changed significantly. See the new plugin API
  documentation in eboxy/docs/en/extensions.html (or .txt).
- The widget type names have changed: "ebButton" is now "Button", "ebText" is
  now "Label", "ebPicture" is now "Picture". You would only see these if you
  were developing a plugin and used typeOfObject() or findObject() with a
  type specified.

