Gambas Documentation - /doc/release/3.4.0

# Gambas 3.4.0

- What's new

  - Installation

  - Development environment

  - Interpreter & compiler

  - Components

- ChangeLog

- Compatibility

- Compilation and installation

## What's new

This new release fixes about 240 bugs and adds about 270 new features.

Note that many of these bugs have already been backported to the 3.3.x versions.

Here is a summary of the main changes:

### Installation

The default installation prefix is now `/usr`, and not `/usr/local` anymore.

If you compile Gambas 3.4 from sources, and if you have already compiled Gambas 3.3 or a previous version on the same system, you must remove the old version by hand:

    $ sudo rm -f /usr/local/bin/gb* /usr/local/bin/gambas*
    $ sudo rm -rf /usr/local/lib/gambas3
    $ sudo rm -rf /usr/local/share/gambas3

### Development environment

- The IDE is now provided with a "Gambas" terminal font. This font can be installed in your personal font directory directly from the option dialog.

- Automatic completion of file paths.

- The background picture is customizable.

- Libraries can have a maximum compatibility version so that the packager generates accurate dependencies on them.

- The subversion support has been enhanced, and has now its own management dialog.

- Project patching management dialogs.

- Shared MIME database is taken into account in the project file "open with" menu.

### Interpreter & compiler

- QUIT can now take the process return value as argument.

- RAISE can raise events defined in the parent class.

- Class overriding is now retrospective.

- IF...THEN...ELSE... syntax on the same line has been implemented.

- Debugging information is now emitted for variable initializations.

### Components

- `gb.args` is a new component that analyzes the command-line options, and automatically handles the `--help` option.

- `gb.map` is a new component allowing to display maps from many different sources (Google Maps, Open Street Map...).

- `gb.memcached` is a new component that implements a memcached client.

- `gb.httpd` is a new component that implements an embedded HTTP server for the interpreter.

- `gb.compress` drivers work again.

- `gb.db.sqlite3` now automatically handles busy databases.

- `gb.desktop` now has support for the freedesktop shared Mime database.

- The old drawing API has been deprecated. Now the Draw class is implemented on top of the Paint class. Consequently, the old Gambas 2 printing code now works with Gambas 3 without having to be rewritten.

- All the following controls are now implemented in Gambas: GridView, TreeView, ListView, ColumnView, IconView, ScrollArea, ListBox, HSplit, VSplit.

- Image.Fuzzy() is a new blur method based on the 'StackBlur' algorithm made by Mario Klingemann.

- `gb.qt4.webkit` component now implements DOM parsing and editing.

- The `gb.xml.rpc` component has been fixed.

## ChangeLog

    [CONFIGURATION]
    * BUG: The default prefix is /usr in component directories too.
    * BUG: Replace AM_CONFIG_HEADER with AC_CONFIG_HEADER, obsolete and removed with
      automake-1.13.
    * NEW: The default installation prefix is now /usr, and not /usr/local anymore.
    * NEW: Each component installation now generates all information files
      systematically, to fix possible dependencies between components written
      in Gambas.
    * NEW: Uninstall mime handler and mime icons in 'make uninstall'.
    * NEW: Remove the possible gambas part before installing a component.
    * NEW: Support for checking OS-specific extension of the library.
    * NEW: Redraw most of the control icons.

    [DEVELOPMENT ENVIRONMENT]
    * BUG: When scanning classes, detect the value of constants.
    * BUG: Automatic completion correctly follows the current edition again.
    * BUG: Fix a possible crash during automatic completion.
    * BUG: Clicking on the "Fixed font" check box in the Text property editor
      does not crash anymore.
    * BUG: Fix conversion of multiple array declarations on the same line in
      Gambas 2 projects.
    * BUG: The name of GridView controls is now always visible in the form
      editor.
    * BUG: Events of class written in Gambas are correctly detected now.
    * BUG: Automatic local variable declaration now correctly analyzes
      expressions like "A.B" in all cases.
    * BUG: Various fixes implied by the new TreeView control implementation.
    * BUG: Fix form editor background drawing.
    * BUG: Fix scrolling of code editor procedure list.
    * BUG: Automatic local variable declaration now works correctly when a
      method named "Get" is called inside the analyzed expression.
    * BUG: In form editor, rectangle selection is triggered by the left mouse
      button only.
    * BUG: Right mouse button can select controls again in form editor.
    * BUG: Remove duplicates in the automatic completion list.
    * BUG: The symbol syntax displayed in the help now correctly follows the
      "Keywords in uppercase" setting.
    * BUG: Correctly update the main toolbar through the ToolBar Configure
      event.
    * BUG: Can deal with void information files again.
    * BUG: Fix read-only project detection algorithm. They
      are no longer warned to be opened.
    * BUG: Fix an infinite loop when choosing a fixed font for the search list
      after the default font has been changed from the option dialog.
    * BUG: Fix the documentation pages of libraries and current project.
    * BUG: Be sure that the welcome dialog filter has the focus.
    * BUG: Remove uses of DrawingArea.Painted.
    * BUG: Don't loop endlessly if a class inherits itself.
    * BUG: The project tree control now uses the same icons as the main project
      tree view.
    * BUG: Help of not documented project classes having a parent class works
      as expected now.
    * BUG: Many dialogs and windows now use colors that are visible with a dark
      color theme.
    * BUG: Fix the 'next' and 'previous' translation buttons in the translation
      dialog.
    * BUG: Fix how documentation pages of code and libraries written in Gambas
      are generated.
    * BUG: Don't crash if 'svn info' date outputs cannot be interpreted.
    * BUG: Run subversion commands with C locale *and* UTF-8. Otherwise
      'svn commit' fails with non-ASCII characters.
    * BUG: Fix signature of methods written with Gambas in HTML help.
    * BUG: Correctly update the '~/.fonts.conf' file when installing the Gambas
      font.
    * BUG: Correctly initialize the help browser layout.
    * BUG: Don't crash if svn program is not installed.
    * BUG: Fix help on project classes and project property synonymous.
    * BUG: Profiler: Take recursitivity into account. Consequently, the
      duration of a function call in the line by line report does not include
      the duration of the called function anymore.
    * BUG: Sort profile by descending duration again.
    * BUG: Creating a source archive now uses a temporary intermediate file and
      displays an error message if something fails.
    * BUG: Correctly refresh the window title if the project conversion fails.
    * NEW: Use a GridView instead of a ListView for automatic completion, so
      that we get rid of the Qt4 "gray ListView" bug.
    * NEW: Updated Czech translation.
    * NEW: Support for the new 'Public' project virtual directory, which is
      '.public' on the disk.
    * NEW: Use 'open' icon for top-level project tree folders.
    * NEW: Draw the projet property dialog library list with a GridView.
    * NEW: Use a SidePanel to display the stack backtrace.
    * NEW: A new option that defines the default application font.
    * NEW: The font options have been redesigned.
    * NEW: Add a button to reset the default font in the option dialog.
    * NEW: Change the proportional font size list in the option dialog. Use a
      5% size increment.
    * NEW: Add a button to copy the value of a watched expression to the
      clipboard.
    * NEW: Add every supported desktop to the icon theme list in the option
      dialog.
    * NEW: Use a yellow star for marking exported classes.
    * NEW: Automatic completion of file paths.
    * NEW: Going backward and forward now works in the text editor.
    * NEW: The project filter buttons have been replaced by a popup menu that
      is triggered when you click on the gray magnifying glass.
    * NEW: Support for the help comments integrated into the *.info files by
      the compiler.
    * NEW: Use the help comments stored in libraries and display them in help
      tooltips.
    * NEW: Class help comments are now help comments located at the beginning
      of the source file. They start with three quotes and a space: `''' `.
    * NEW: Apply the default font and the console font to the help browsers.
    * NEW: Integrate the welcome dialog into the main window.
    * NEW: Generate a documentation page for components and libraries.
    * NEW: Some little changes in the welcome dialog.
    * NEW: In the CSV import dialog: When the import is finished, display the
      message tab and disable the "Import" button so that you don't click on it
      again unexpectedly. The button is enabled again when clicking on the
      first tab.
    * NEW: Use a smaller font for help viewer embedded in automatic completion
      or signature popups.
    * NEW: Revamp the option dialog.
    * NEW: Add an option to install the Gambas font to the user font folder
      (~/.fonts). That font is a custom version of the Terminus 6x12 bitmap
      font, with a bold version and more unicode characters.
    * NEW: Use DesktopMime.FromFile() method to handle project data files.
    * NEW: Publish the Gambas font under the SIL Open Font License, like the
      Terminus font it is based on. Update the welcome screen and the license
      message accordingly.
    * NEW: Put the translation dialog button into a menu, and add two new
      actions to export only the untranslated strings, only the translated
      strings, or all strings like before.
    * NEW: Updated Spanish translation.
    * NEW: Update error messages.
    * NEW: Update markup syntax with support for indexes.
    * NEW: Support for LCDLabel.
    * NEW: Use a big font for displaying cursor position in editors.
    * NEW: Updated German translation.
    * NEW: Add an option to choose the workspace background between predefined
      textures. A solid background is possible now for slow computers.
    * NEW: The subversion support has now its own dedicated dialog. It can now
      store the password in the user keyring, and is better at sending that
      password to the capricious 'svn' program.
    * NEW: A maximum compatibility version can be specified for library
      projects. That maximum version is used for the pakcage dependencies of a
      project using that library.
    * NEW: Do not jump to the first warning automatically.
    * NEW: When opening the project version control dialog, do not extract
      information for the remote repository. Do it only when clicking on the
      "Refresh information" button.
    * NEW: Display a tooltip to indicate the meaning of status icon in the
      component view of the project property dialog.
    * NEW: A button to copy local variables to the clipboard.
    * NEW: Local variables can be viewed by columns.
    * NEW: Start making property toolbars in the form editor.
    * NEW: Support for subversion 1.7.
    * NEW: System information window does not use a shell script anymore.
    * NEW: Use the new Image.Fuzzy() method to draw a drop shadow in the
      welcome screen text.
    * NEW: The selection color of the Gambas theme is lighter now.
    * NEW: Updated Spanish translation.
    * NEW: Remove 'PUBLIC' keyword from 'PUBLIC PROPERTY' in Gambas2 to Gambas3
      project conversion.
    * NEW: Enhance Gambas 2 -> Gambas 3 project conversion.
    * NEW: Add patch management.
    * OPT: Saving a form now refreshes the stack window only once.

    [WIKI CGI SCRIPT]
    * BUG: Automatic links work again.
    * BUG: Fix history page.
    * NEW: Czech translation updated.
    * NEW: Page whose title begins with "~" are class page synonymous.
    * NEW: Support for component help written in *.info files.

    [WEB SITE MAKER]
    * NEW: Czech translation updated.
    * NEW: Updates for 3.3.0 release.
    * NEW: Update for 3.3.2 version.
    * NEW: Update for 3.3.4.

    [EXAMPLES]
    * NEW: MapView: A new example on how to use the gb.map component.
    * BUG: MediaPlayer: Remove uses of the DrawingArea.Painted property.
    * BUG: MyWebCam: Fix form layout for small screens.
    * NEW: Updated czech translation for: GNUBoxWorld, WebBrowser, MoviePlayer,
      Gravity, Painting examples.
    * NEW: Example on how to use the gb.net.pop3 component.
    * NEW: Merge the new PDFViewer example made by Bernd Brinkmann.
    * NEW: Refactor the counter example. The code is much easier to understand.
    * NEW: Paiting example: add an example for rounded rectangles.
    * NEW: MyWebCam: Use a combo-box for the webcam screen size.
    * NEW: Updated German translations.
    * NEW: Chart: Add a button to fill the chart value randomly.
    * NEW: MediaPlayer: Support for media tags that are arrays.
    * NEW: Remove environment variables defined in all examples projects at
      installation.
    * NEW: Updated Object example for better understanding.

    [INTERPRETER]
    * BUG: Fix symbol table search that could sometimes fail with non ASCII
      characters.
    * BUG: Implicit array conversion now correctly preserves dimensions.
    * BUG: Fix class overriding routine.
    * BUG: The event handler check routine should not crash anymore.
    * BUG: Fix the order of component exported classes loading after the
      project has been loaded.
    * BUG: Fix GB.CanRaise() API.
    * BUG: Calling the _unknown method on an anonymous object reference won't
      crash anymore.
    * BUG: Fix profiling of WAIT instruction.
    * BUG: Array with no elements can be casted to any other array datatype.
    * BUG: Using Enum.Index outside of an enumeration now raises an error
      instead of crashing.
    * BUG: Fix a crash in String.Comp() when one of the two string is NULL.
    * BUG: NULL can be converted to a pointer now.
    * BUG: The GB.GetProperty() API has been fixed, and now use the datatype of
      the property for the return value.
    * BUG: Ensure that the interpreter temporary directory is owned by the
      current user and that its rights are accurate. Otherwise abort.
    * BUG: When creating the process temporary directory, check the permissions
      of both the top directory (gambas.<userid>) and the process directory
      inside.
    * BUG: Add the Even() and Odd() routines to the information file.
    * BUG: Do not leak memory if System.Shell is used.
    * BUG: Fix compilation on 32 bits systems.
    * BUG: Check process stack pointer with a bigger margin so that we get
      'Stack overflow' errors instead of segfaults.
    * BUG: Fixes of bugs detected by Coverity Scan.
    * BUG: Process output is correctly flushed at process exit now.
    * BUG: Fix memory leak in Class[].Signature property.
    * BUG: Ending a process was removing the watched file descriptors twice in
      some cases.
    * BUG: Collection cannot be converted to an array.
    * BUG: Fix structure field alignment mismatch that led to memory leaks.
    * BUG: Display an accurate error message if the project cannot be started.
    * NEW: The '-H' option now runs the interpreted program as a CGI script
      through an embedded HTTP server.
    * NEW: New API for getting information about a file.
    * NEW: Class overriding is retrospective now.
    * NEW: Support for new QUIT syntax.
    * NEW: Do not display overriding prefix in class names.
    * NEW: Accept event handlers with a variable number of arguments.
    * NEW: Class.Exist() is a new method that returns if a class has a specific
      symbol.
    * NEW: Move the '.SubCollection' virtual class to the gb.db component.
    * NEW: The RAISE instruction now can raise events defined in a parent
      class.
    * NEW: Timer: The Trigger method now does nothing if there is an already
      pending trigger. This behaviour is not backward-compatible, so it may be
      removed if problems arise.
    * NEW: The deprecated API message now displays the current code position.
    * NEW: Check at startup that temporary directories are really directories
      and not symbolic links.
    * NEW: Pointer can be converted to String like Integer or Long.
    * NEW: Raise a 'Filename too long' error now when a too long file path is
      detected inside a file management function.
    * NEW: System.TimeZone is a new property that returns the current timezone
      as an offset in seconds that must be added to a local time to get UTC.
    * OPT: Remove some useless table symbol parsing at class loading for native
      classes that do not raise events.

    [COMPILER]
    * BUG: Error messages are correctly printed when warnings are disabled.
    * BUG: Fix comments parser.
    * BUG: Don't declare virtual classes now present in the *.list files.
    * BUG: Prevent self-inheritance.
    * BUG: Do not emit inaccurate line number information for forms and global
      variables with no initialization.
    * BUG: Fixes of bugs detected by Coverity Scan.
    * BUG: Correctly raise an error if we use the New keyword inside an
      embedded array declaration.
    * NEW: Support for IF ... THEN ... ELSE syntax on the same line.
    * NEW: QUIT now can takes an optional argument which is the program return
      value.
    * NEW: "[]" now is compiled to return a array with no elements.
    * NEW: Support for help comments on public symbols. They are automatically
      integrated into the *.info information files.
    * NEW: The RAISE instruction now can raise events defined in a parent
      class.
    * NEW: Emit line positions in debugging information for global
      initializations.
    * NEW: The GB_PCODE_VERSION environment variable tells the compiler to use
      a different bytecode version that the current one. Use that hack only if
      you know exactly what you are doing.

    [ARCHIVER]
    * BUG: Fixes of bugs detected by Coverity Scan.
    * NEW: Add '.public' directory to executables.
    * NEW: A new '-i' option not to display warnings when an information file
      include fails.

    [INFORMER]
    * BUG: Put virtual classes in *.list files so that the IDE is aware of
      their existence.
    * BUG: Fixes of bugs detected by Coverity Scan.
    * NEW: gbi3 now displays include warnings only if the GBI_DEBUG environment
      variable is set to "1".

    [SCRIPTER]
    * BUG: Correctly deal with 'END' followed by a comment.
    * NEW: Support for a new '-f' option that compiles the script with JIT
      compilation enabled.

    [BENCHMARKS]
    * NEW: New 'Manderlbrot' benchmark.

    [GB.ARGS]
    * NEW: 'gb.args' is a new component that analyzes the command-line options,
      and automatically handles the "--help" option.
    * NEW: German translation

    [GB.COMPRESS]
    * BUG: Remove useless code never compiled.
    * BUG: Fixes of bugs detected by Coverity Scan.

    [GB.COMPRESS.BZLIB2]
    * BUG: Fix the driver that was not working anymore.

    [GB.COMPRESS.ZLIB]
    * BUG: Fix the driver that was not working anymore.
    * BUG: Fix a file handle mistake.

    [GB.DATA]
    * BUG: Correctly *cycle* with {Move,Find}{Next,Prev}()
    * BUG: Fix division by zero when read/write pointer is set on 0-length
      Circular (useless but legal).
    * NEW: Introduce List.Backwards - a virtual object to enumerate backwards
    * NEW: Don't use List.Current as enumeration pointer.
    * NEW: Begin enumeration at the first/last node.
    * NEW: Traverse backwards when given negative index to _get.
    * NEW: Make Current invalid by default.
    * NEW: Assign first/last element when MoveNext()/MovePrev() is issued on an
      invalid Current.
    * NEW: Use List.Current as pointer for the Find*() methods, too.
    * NEW: Assign first/last element when FindNext()/FindPrev() is issued on an
      invalid Current.
    * NEW: Don't return an index from Find*() methods because it is not the way
      linked list are dealt with.
    * NEW: Make insertion and removal of elements safe in enumerations.
    * NEW: When Current (or enumerator) is removed, the pointer remains relative
      to the beginning of the List but it never wraps around the end.
    * NEW: Finish the List class
    * NEW: Add List.Clear(). How could I go without since now?
    * NEW: Return NULL for an invalid List.Current instead of raising an error.
      However, the attempt to remove an invalid Current still results in that
      error.
    * OPT: Great overhaul of List algorithms. Beware: Still buggy.
    * OPT: Make list chunks carry multiple Variants to improve cache locality.
    * OPT: Don't traverse List forwards/backwards when the absolute value of
      index is past the half of Count.
    * OPT: FYI, Current and enumerators remain relative to the _beginning_ of
      the list if they're removed in order to can access all elements in an
      enumeration.
    * OPT: Remove unused function (reported by Coverity Scan/Emil Lenngren)

    [GB.DB]
    * BUG: DB.Quote(..., True) now does a table name quoting in all cases.
    * BUG: A failing table or user add does not leak memory anymore.
    * NEW: Move the '.SubCollection' virtual class to the gb.db component.

    [GB.DB.FORM]
    * BUG: The database controls now can handle table names that are reserved
      SQL keywords.
    * BUG: Correctly handle null values when sorting a DataSource.
    * BUG: DataSource.Table contents is automatically trimmed before being sent
      to the database driver.
    * BUG: Fix possible crash in DataView and DataBrowser.
    * NEW: DataView.Sorted is a new property that tells if the data can be
      sorted by clicking on the column headers.
    * NEW: DataView columns now show sort indicators, and data can be sorted in
      descending order.
    * NEW: DataSource.Ascending is a new property that defines the order of the
      sort defined by the DataSource.Sort property.

    [GB.DB.MYSQL]
    * BUG: Database charset is correctly reset when an automatic reconnect
      occurs.

    [GB.DB.SQLITE2]
    * BUG: Quote index name and primary key fields.

    [GB.DB.SQLITE3]
    * BUG: Detect serial fields correctly now.
    * BUG: Quote index name and primary key fields.
    * NEW: Requests are automatically retried during 30 seconds if the database
      is busy.

    [GB.DBUS]
    * BUG: Fix a possible memory leak in a debugging routine.

    [GB.DEBUG]
    * BUG: Fixes of bugs detected by Coverity Scan.

    [GB.DESKTOP]
    * BUG: Writing the Desktop.ActivateWindow property works now.
    * BUG: Remove _Desktop.ActivateWindow() method.
    * BUG: The .settings file must not be in subversion.
    * BUG: Out of bound on a test on suffix fixed.
    * BUG: Dont use the third argument on stock class.
    * BUG: Remove gb.form in the loaded components. so desktop can be compiled
      again.
    * BUG: Correctly return the common language.
    * BUG: DesktopFile.Run() now handle programs that does not specify any
      argument pattern (%u, %f, and so on) in its command description.
    * BUG: Desktop.OpenTerminal() now works on Gnome and Mate desktops.
    * BUG: Get rid of a 'qdbus' spurious debug message.
    * NEW: _Desktop.Time is a new property that returns the last X11 timestamp.
    * NEW: DesktopWindow.Activate() is a new method to activate a window.
    * NEW: A new class that return the type mime of a given file by using the
      freedesktop Shared Mime Database. This class also gives information about
      a given mimetype: extention pattern, icon, or applications that opens it.
    * NEW: New property PreciseSearch. If true it load the magic and generic
      icon files.
    * NEW: DesktopFile.FindMime() has been deprecated and replaced by
      Desktop.FromMime().
    * NEW: Desktop.GetFileIcon() is a new method that returns the icon
      associated with a specific file path. DesktopMime is used.

    [GB.DRAW]
    * BUG: Correctly check that there is a current paint device in all Paint
      methods and properties.
    * NEW: Add a RectF class, that is a rectangle with Float coordinates.
    * NEW: Add a Point class, that is just a point with two Integer
      coordinates.
    * NEW: Add a PointF class, that is just a point with two Float
      coordinates.
    * NEW: 'CDraw.c' and 'CDraw.h' source files have been renamed as 'cdraw.c'
      and 'cdraw.h'.
    * NEW: Rect.Center() and RectF.Center() are two new methods that return the
      center of the rectangle.
    * NEW: Paint.BrushOrigin is a new property that allows to define the origin
      of the brush.
    * NEW: Paint.FillRect is a new property equivalent to Draw.FillRect.
    * NEW: Paint.DrawImage() now takes a source rectangle.
    * NEW: Paint.DrawPicture() is a replacement for Draw.Picture().
    * NEW: Paint.ZoomImage() is a replacement for Draw.Zoom().
    * NEW: The Draw class has been removed.
    * NEW: Paint.Ellipse() is a new method that paints an ellipse.
    * NEW: Paint.TextSize() returns the bounding box of a text like
      Draw.TextWidth() and Draw.TextHeight() did, which is not the same thing
      as Paint.TextExtents().
    * NEW: Paint.RichTextSize() returns the bounding box of a rich text like
      Draw.RichTextWidth() and Draw.RichTextHeight() did, which is not the same
      thing as Paint.RichTextExtents().
    * NEW: Paint.FillRect() fills a rectangle with a specific color.
    * NEW: Paint.DrawImage() takes an extra 'Source' argument which is a
      rectangle describing a piece of the source image.
    * NEW: Paint.DrawPicture() now replaces the old Draw.Picture() method.
    * NEW: Paint.ZoomImage() now replaces the old Draw.Zoom() method.
    * NEW: The default line width after a Paint.Begin() is one pixel now.
    * NEW: Paint.Polygon() is a new method that paints a closed polygon.
    * NEW: Paint.Rectangle() now takes an optional radius argument. If its is
      specified with a value greater than zero, then a rounded rectangle is
      painted.
    * NEW: PaintMatrix is now creatable.
    * NEW: Paint.Arc() and Paint.Ellipse() take a new optional boolean argument
      that tells if a pie must be drawn instead of a chord.

    [GB.EVAL]
    * BUG: Fixes of bugs detected by Coverity Scan.

    [GB.EVAL.HIGHLIGHT]
    * NEW: Make the HighlightDiff class recognise hunks separated by the current
      `diff` command being echoed into the header. These can be (un)expanded in
      Editor now.
    * NEW: Diff: Separate hunks by their @@ lines to (un)expand them.

    [GB.FORM]
    * BUG: MaskBox and ButtonBox controls with no mask now should act like a
      normal TextBox for popup menu and focus events.
    * BUG: Support for Underline and Strikeout come back in FontChooser.
    * BUG: Allow icons with a point in the name.
    * BUG: Many fixes in icon retrieving routine.
    * BUG: Fix 'show preview' menu entry in FileChooser and DirChooser.
    * BUG: Don't show useless menus in the DirView popup menu of a DirChooser
      or FileChooser control.
    * BUG: Do not scroll the TabPanel tab bar if not really necessary.
    * BUG: TabPanel: Fix the algorithm ensuring that the current tab is
      visible.
    * BUG: Remove uses of DrawingArea.Painted.
    * BUG: A disabled Expander does not react to mouse events anymore.
    * BUG: ColorChooser with a border has an inner margin now.
    * BUG: SidePanel does not crash anymore when clicking on a side button.
    * BUG: FileView.Filter does not "eat" the filter array affected to the
      property anymore.
    * NEW: Czech translation updated.
    * NEW: Remove all controls that were moved to gb.gui.base.
    * NEW: FileView file size units are translatable now.
    * NEW: Add an hidden method to the ButtonBox class that allows to insert
      an already existing ToolButton in it.
    * NEW: New FontChooser control design.
    * NEW: Add a FontChooser Border property.
    * NEW: Now FileView use DesktopMime to set the files icon if it is loaded.
    * NEW: Stock: display warning on load fail only if GB_STOCK is set.
    * NEW: FileView: new ShowPreview property to enable or disable image
      preview.
    * NEW: Stock class now can find the mime icon directory if $(mime) is used
      inside the icon name.
    * NEW: DirChooser: add a ShowPreview property.
    * NEW: FileChooser: add a ShowPreview property.
    * NEW: TabStrip: support of right-to-left languages.
    * NEW: Stock: support for right-to-left icons.
    * NEW: FileChooser: tar archives now can be uncompressed.
    * NEW: IconPanel now is flat.
    * NEW: The FileChooser and DirChooser label that displays the current
      directory now "ellipsized" it if there is not enough room.
    * NEW: LCDLabel is a new control that displays its contents with sixteen
      segments LCD digits.
    * NEW: FileChooser: If the file text field contains a directory when the
      OK button is  clicked, the directory is changed accordingly, and the
      Select event is not raised. This prevents the user of FileChooser from
      receiving an unexpected directory in its file name.
    * NEW: Update of German translation
    * NEW: Take the DateChooser[].Font property into account.
    * NEW: DateChooser got a boolean Border property.
    * NEW: ColorChooser got a boolean Border property.
    * NEW: Use shadows in FileChooser and DirChooser.
    * NEW: TableView: Editing mode keyboard management now raises the Activate
      event if the Click  event is not implemented.
    * OPT: FileView: clean up icon retrieving function.
    * OPT: LCDLabel highlight is now drawn with the Image.Fuzzy() method.

    [GB.FORM.DIALOG]
    * NEW: Czech translation updated.

    [GB.FORM.MDI]
    * NEW: Czech translation updated.

    [GB.FORM.STOCK]
    * NEW: Support for right-to-left icons.

    [GB.GSL]
    * BUG: Remove useless code never compiled.

    [GB.GTK]
    * BUG: Fix the Control.Grab() method.
    * BUG: The Action.Register() method must not crash when called during class
      clean-up.
    * BUG: Fix event handling when a window has only invisible top-level menus.
    * BUG: Fix a possible crash in TrayIcon mouse wheel event handling.
    * BUG: Fix string to Font conversion for fonts whose name starts with
      "nan" or other special numeric strings.
    * BUG: Reparenting a container correctly keeps the visibility state of its
      children.
    * BUG: Foreground color is now correctly preserved when reparenting.
    * BUG: Fix crash in menu deletion.
    * BUG: Label, TextLabel, PictureBox and MovieBox now draw their plain
      border with the foreground color, like gb.qt4 does.
    * BUG: Scrollbar width is correctly respected.
    * BUG: Setting the background color of a Panel should not have spurious
      effects anymore (they were due to the internal reparenting).
    * BUG: Fix reparenting when there is a TabStrip in the process.
    * BUG: The mouse cursor is correctly inherited from the parent control if
      the Mouse property is set to Mouse.Default.
    * BUG: Fix management of multiple modal dialogs and popups.
    * BUG: Make gb.gtk compile with cairo version < 1.10.
    * BUG: Don't use the 'cairo_set_device_offset' method to draw on a
      DrawingArea, but a matrix translation.
    * BUG: All style drawing methods now draw at the correct position.
    * BUG: Fix a memory leak with Cairo in the border drawing routine.
    * BUG: Fix a memory leak with Cairo in the image drawing routine.
    * BUG: Fix control background drawing routine.
    * BUG: Drawing on a DrawingArea with a background color set to
      Color.Default means drawing with the DrawingArea background color.
    * BUG: Fix a possible crash if a menu is destroyed while being popped up.
    * BUG: Fix a possible crash if the control getting the focus is destroyed
      during the activation of its window.
    * BUG: Correctly close the path when drawing an arc or an ellipse.
    * BUG: Fix Desktop.Screenshot() method.
    * BUG: Fix some warnings with gcc 4.7.
    * BUG: Should compile again with older version of librsvg.
    * BUG: Style drawing methods should be correctly clipped now.
    * BUG: Compilation with older versions of librsvg should work now.
    * BUG: Setting the Paint.Font property with a control font has no side
      effects anymore.
    * BUG: Drawing richt text and getting rich text size now wrap the text the
      same way.
    * BUG: Fix menu bar layout when the window is shown for the first time.
    * BUG: Don't crash if Paint.End() is called whereas the paint device has
      been destroyed.
    * BUG: Slider and Scrollbar controls now raise the Change event only if the
      value has really changed.
    * NEW: New GB_INFO constant to return the last X11 timestamp to other
      components.
    * NEW: Remove TreeView, ListView and ColumnView.
    * NEW: Control.Tracking takes the proxy into account.
    * NEW: Remove the Gambas part.
    * NEW: The Container Find() method has been renamed as FindChild(). The
      _unknown method has been implemented to handle backward compatibility.
    * NEW: Add Window.Indent arrangement property.
    * NEW: Replace the old ListBox control by the one in gb.gui.base.
    * NEW: Remove useless source files of controls now implemented in the
      gb.gui.base component.
    * NEW: DragLeave is a new event raised by any control when the mouse leave
      a control during a DnD operation, or when the DnD operation terminates.
    * NEW: DragMove and DragLeave events take the proxy into account.
    * NEW: ComboBox.Border is a new property that tells if the ComboBox control
      should display a border.
    * NEW: Trying to set a font size lower or equal than zero now raises an
      error.
    * NEW: Support for the new Paint methods.
    * NEW: DrawingArea.Painted has been deprecated.
    * NEW: The old Draw.Style methods have been moved to the Style class.
    * NEW: You cannot draw on a Window anymore.
    * NEW: Replace deprecated Gdk drawing API by cairo.
    * NEW: Implement the new "Pie" argument of Paint.Arc() and Paint.Ellipse().
    * NEW: Remove the 'gDraw' class source code that implemented X11 drawing.
      It is not used anymore.
    * NEW: Slider control now used the tick marks implemented by GTK+.
    * NEW: A Separator whose width or height is one pixel, is now drawn with
      its foreground color.
    * NEW: Remove HSplit and VSplit controls.
    * NEW: Remove old GDK / X11 drawing code.
    * NEW: Implement a cairo surface cache in the Image class, so that drawing
      the same image several times trigger a GdkPixbuf -> Cairo surface
      conversion once.

    [GB.GUI.BASE]
    * BUG: GridView does not crash anymore if all rows are hidden (i.e. if
      their height is zero).
    * BUG: GridView is correctly updated now when the Border property is set.
    * BUG: Removing GridView rows correctly resets the row heights.
    * BUG: Fix ScrollArea.EnsureVisible() and GridView.EnsureVisible() methods.
    * BUG: GridView: support of right-to-left languages.
    * BUG: For backward-compatibility reasons, you can now set the value of
      any arbitrary positive column index of a ColumnView item.
    * BUG: Remove the overriden MouseDown event from the GridView class.
    * BUG: A DnD operation does not eat the next mouse click anymore in
      GridView, TreeView... controls.
    * BUG: ScrollArea: DragLeave event can be called whereas there was no
      DragMove event. So don't assume that.
    * BUG: GridView: multiple selection works again.
    * BUG: GridView now raises its Click event correctly, and so calling the
      TableView Edit() method during that event works correctly again.
    * BUG: GridView: Resizing a column or a row does not trigger the MouseDrag
      event anymore.
    * BUG: GridView: Using selection methods now takes the "Single" selection
      mode into account and refresh the view as expected.
    * BUG: GridView and TreeView controls should not lose any MouseDown event
      anymore.
    * BUG: Remove the useless GridView.Data.Draw property.
    * BUG: Remove the GridView KeyPress event override.
    * BUG: Fix the GridView Draw event signature.
    * BUG: GridView does not raise some key events twice.
    * BUG: Fix scrollbar layout of ScrollArea and all its descendants.
    * BUG: Don't set the background color of ScrollArea scrollbars.
    * BUG: ScrollArea.EnsureVisible() now takes the scrollbars into account.
    * BUG: ScrollArea now correctly takes the Style.ScrollBarSpacing property
      into account when computing the ClientWidth and ClientHeight properties.
    * NEW: gb.gui.base is a new hidden component that is automatically loaded
      by gb.qt4 and gb.gtk. It implements the following controls and classes
      entirely in Gambas: GridView, TreeView, ListView, ColumnView, IconView,
      Action, ScrollArea, ListBox, HSplit, VSplit. The old classes implemented
      elsewhere have been removed.
    * NEW: ScrollArea now raise a Resize event when the client area is resized
      because of changes in scrollbars visibility.
    * NEW: ScrollArea, GridView, TreeView... now automatically scroll during a
      DnD operation.
    * NEW: Implement a Draw static class based on the Paint class. That class
      replaces the current Draw class. As it will be based on the Paint class,
      it can act on Image and Printer, making the old Gambas 2 printing code
      works with Gambas 3 directly.
    * NEW: Do not highlight the sorted column in GridView, TreeView, ListBox...
      if there is only one column.
    * NEW: ScrollArea.Painted property is now deprecated.
    * OPT: ScrollArea scrollbars should not flicker anymore during a resizing
      operation.

    [GB.HTTPD]
    * BUG: Hide the component.
    * NEW: New hidden component that embeds an HTTP server that runs the
      project as a CGI script. It is activated by a new interpreter option.
      Warning! This is highly experimental. The HTTP server is based on the
      thttpd source code.
    * NEW: Reindent source files.
    * NEW: The embedded HTTP server now can serve static files located in the
      '.public' hidden project directory.
    * NEW: Define a custom exported HTTP server name.

    [GB.IMAGE]
    * BUG: Image.RotateRight() now really rotates to the right.
    * BUG: Fix Image.RotateRight() algorithm.
    * BUG: Fixes of bugs detected by Coverity Scan.
    * NEW: New API to return the image format as a string.
    * NEW: Image.Fuzzy() is a new blur method based on the 'StackBlur'
      algorithm made by Mario Klingemann.

    [GB.IMAGE.EFFECT]
    * BUG: Image.Histogram() now correctly handle ABGR images.
    * BUG: Fix the histogram inversion, and inversion in other effects with
      GTK+ images.
    * BUG: Fixes of bugs detected by Coverity Scan.

    [GB.JIT]
    * NEW: Support for new class overriding (the CLASS structure has lost one
      field).
    * BUG: Fix the argument order of E_NSYMBOL error message.
    * BUG: Fix some warnings by using 'llvm-config.h' instead of 'config.h'.
    * NEW: Compile for LLVM 3.2.
    * NEW: Support the new QUIT syntax with an exit code.
    * NEW: Support raising events in parent classes.

    [GB.MAP]
    * NEW: gb.map is a new component implementing the MapView control. It
      allows to display maps from many different sources (Google Maps, Open
      Street Map...), and to zoom them, move them.

    [GB.MEDIA]
    * BUG: Remove the useless MediaPlayer.Visualisation property.
    * BUG: Fix retrieving of media tags that are arrays of values.
    * NEW: Do not raise an error if a tag has an unsupported format. Just
      display a warning message.

    [GB.MEMCACHED]
    * NEW: gb.memcached is a new component that implements a memcached client.

    [GB.NET]
    * BUG: The type of the socket returned by SocketServer.Accept() method has
      now the same type than the server socket. Consequently, the RemoteHost,
      RemotePort, LocalHost and LocalPort properties return the expected
      values.
    * BUG: Remove useless code never compiled.

    [GB.NET.CURL]
    * BUG: Fix memory leaks when asynchronous clients are pending when quitting
      the program.
    * BUG: Remove useless code never compiled.

    [GB.NET.POP3]
    * BUG: Fixed a bug that prevented reusing a Pop3Client instance after
      executing Close().
    * NEW: Czech translation updated.
    * NEW: German translation updated.

    [GB.NET.SMTP]
    * BUG: Remove useless code never compiled.

    [GB.OPENGL]
    * BUG: Fix an error message in deprecated constants handler routine.

    [GB.OPENGL.GLU]
    * BUG: Fix typos in Glu.Project and associated methods.
    * NEW: Add Glu.Project, Glu.UnProject and Glu.UnProject4 methods. These
      methods are returning a Float array as the result. This Float[] can be
      NULL in case of failure or if the Arrays passed as parameter are not of
      the proper size; Modelview and Projection are 16 values Arrays, Viewport
      is a 4 values Array.

    [GB.PCRE]
    * BUG: Display an error when trying to compile an empty pattern.

    [GB.QT4]
    * BUG: Less flicker when showing fullscreen windows.
    * BUG: The Action.Register() method must not crash when called during class
      clean-up.
    * BUG: Don't crash if the debugger asks for enabling the grabs back whereas
      the grabber widgets have been destroyed.
    * BUG: KeyRelease event is not raised anymore if it comes from automatic
      repeating. That way gb.qt4 behaves like gb.gtk.
    * BUG: Paint.DrawRichText() now takes the color opacity into account.
    * BUG: Compilation with new gcc should be fixed.
    * BUG: Ensure that embedded windows emit their Open event before any Move,
      Resize events...
    * BUG: Clipboard.Type correctly returns Clipboard.Image after an image has
      been copied to the clipboard.
    * BUG: gb.qt4 now should compile again with Qt version < 4.8.
    * BUG: Drawing on a DrawingArea with a background color set to
      Color.Default means drawing with the DrawingArea background color.
    * BUG: The Container NewChild event is now raised after the new child
      control has been shown, like in gb.gtk.
    * BUG: Fix drawing of plain and etched borders.
    * BUG: Clipping now works when drawing pictures or images.
    * BUG: The drag & drop frame is now correctly hidden in all cases when dnd
      operation is finished.
    * NEW: New GB_INFO constant to return the last X11 timestamp to other
      components.
    * NEW: Remove TreeView, ListView and ColumnView.
    * NEW: Control.Tracking takes the proxy into account.
    * NEW: Remove the Gambas part.
    * NEW: The Container Find() method has been renamed as FindChild(). The
      _unknown method has been implemented to handle backward compatibility.
    * NEW: Add Window.Indent arrangement property.
    * NEW: Replace the old ListBox control by the one in gb.gui.base.
    * NEW: Remove useless source files of controls now implemented in the
      gb.gui.base component.
    * NEW: DragLeave is a new event raised by any control when the mouse leave
      a control during a DnD operation, or when the DnD operation terminates.
    * NEW: DragMove and DragLeave events take the proxy into account.
    * NEW: ComboBox.Border is a new property that tells if the ComboBox control
      should display a border.
    * NEW: Trying to set a font size lower or equal than zero now raises an
      error.
    * NEW: Support for the new Paint methods.
    * NEW: DrawingArea.Painted has been deprecated.
    * NEW: The old Draw.Style methods have been moved to the Style class.
    * NEW: You cannot draw on a Window anymore.
    * NEW: Implement the new "Pie" argument of Paint.Arc() and Paint.Ellipse().
    * NEW: A Separator whose width or height is one pixel, is now drawn with
      its foreground color.
    * NEW: Remove translation warning message at startup. It scares users.
    * NEW: Try to enforce tooltip move when setting a new tooltip while it is
      visible.
    * NEW: Remove HSplit and VSplit controls.
    * NEW: Remove any useless reference to Q3ScrollView.
    * NEW: The drag & drop frame is now transparent.
    * OPT: Some little optimizations in ScrollView.
    * OPT: Changing the geometry of a control whose Ignore property is set does
      not trigger parent arrangement routine anymore.
    * OPT: Optimize clipping when the clipping area is a rectangle.
    * OPT: Paint.ClipRect is now optimized when the clipping region is a single
      rectangle.

    [GB.QT4.EXT]
    * BUG: Fix undo/redo when deleting to the left (backspace key).
    * NEW: When the Editor loses the focus, it does not scroll to the cursor
      position automatically anymore.
    * NEW: Editor: undo/redo now take the cursor position and the selection
      into account.
    * NEW: Better undo/redo management.

    [GB.QT4.WEBKIT]
    * BUG: Fix WebHitTest.Editable property declaration.
    * NEW: WebElement is a new class that represents a DOM node. It allows to
      traverse, modify and search the entire document, and run any JavaScript
      code on any document element.
    * NEW: WebHitTest.XMLElement has been renamed as WebHitTest.HTML.
    * NEW: WebHitTest.Element is a new property that returns the hit
      WebElement.
    * NEW: WebFrame.Document returns the top DOM element of a frame.
    * NEW: WebView.Document returns the top DOM element of the view main frame.
    * NEW: WebElement.Paint() now takes an optional clipping rectangle
      argument.

    [GB.REPORT]
    * BUG: Reactivate OnePiece for backward compatibility.
    * BUG: Reinit the Default Height and Width of the ReportControls to 0 cm.
      It fixes the last seen default display.
    * BUG: Remove the uses of the deprecated Painted property.
    * NEW: Czech translation updated.
    * NEW: German translation updated.

    [GB.V4L]
    * BUG: Close and reopen the device when resizing the camera image.
    * BUG: Remove useless code never compiled.

    [GB.VB]
    * BUG: Fixes of bugs detected by Coverity Scan.

    [GB.WEB]
    * BUG: As the _init static class is always executed at startup for exported
      classes, delay the intialization of Session class the first time one of
      its properties is used.
    * BUG: If the SCRIPT_NAME CGI variable equals nothing or "/", set it to
      "/." so that it can be concatenated to any path and still gives a valid
      url.
    * BUG: Support for explicit URL ports.
    * BUG: Overriding a CGI variable with Null works now.
    * BUG: JSON.Encode() can encode arrays again.
    * NEW: Session.CookiePath is a new property that allows to define the URL
      path of the session cookie.
    * NEW: Application.Port is a new property that returns the port used by the
      HTTP request.
    * NEW: Request.Query and Request.Path can be modified now.

    [GB.WIKI]
    * NEW: Complete rewrite of the current doc.cgi wiki. Still needs a lot of
      work!

    [GB.XML]
    * BUG: The reader Node class now returns null node name, value and
      attributes if the current state is EndElement.
    * BUG: Fix compilation problem when disabling GCC optimizations.
    * BUG: The XmlElement.AppendChild does not crash anymore if a null element
      is sent.
    * BUG: The XmlReader.FromString() now raises an error if the input buffer
      is empty.
    * BUG: Fix some compilation warnings on XMLWriter.
    * BUG: Fix the XmlNode.GetChildrenByAttributeValue() search method.
    * NEW: Now available on OS X.
    * NEW: Adding a new XmlElement.RemoveAttribute() method.

    [GB.XML.RPC]
    * BUG: Ensure that the RpcClient adds a newline at the end of the data it
      sends, and that the "windows" newline sequence is used.
    * BUG: The built-in HTTP server now send its data in one shot, by using the
      Begin and Send methods of the Stream class.
    * BUG: Fix RpcClient hang while interpreting data.
    * BUG: RpcClient works again.

## Compatibility

All Gambas 3.x versions will be backward-compatible, i.e. a program written in Gambas 3.x version will be able to run unchanged with any Gambas 3.y version, provided that y > x.

But the contrary is false! a program written with a specific Gambas 3.x version will not run with an older version.

## Compilation and installation

Read the instructions there.

If everything was fine, type "gambas3" to run the development environment.

Enjoy it !

### See also

- Gambas 3.3.0