doc • release • 3.5.0

Gambas 3.5.0

What's new

This new release fixes more than 240 bugs and adds more than 270 new features (yes, the same numbers as in Gambas 3.4).

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

Here is a summary of the main changes:

Development environment

  • The menu editor has been fixed.

  • A new image editor is provided.

  • The database editor now can remember an arbitrary number of SQL requests for each connection.

  • Subversion support has been fixed.

  • If the IDE raises an unexpected Gambas error, all modified files are automatically saved before quitting.

  • Web application can be debugged by the IDE through the embedded http server component gb.httpd.

Interpreter & compiler

  • Application.Priority is a new property that allows to define the scheduling priority of the current process (or task).

  • MATCH is a new operator that automatically load the gb.pcre component to implement PCRE pattern matching.

  • Global error handler support. See Application.

  • ARM support has been fixed, and Gambas should be reliable now on that architecture.

  • New .[xxx] and !xxx syntax that can be used inside a WITH...END WITH structure as array accessor shortcuts.


  • gb.clipper is a new component based on the Clipper library.

  • gb.openssl is a new component to wrap cryptographic functions of libcrypto from the OpenSSL project.

  • FileProperties is a new control that displays the properties of a specific file or directory.

  • ImageView is a new control that allows to view an image inside a scrolled view, at different zoom levels.

  • SliderBox is a new control that displays a Slider and a SpinBox, both being synchronized.

  • Horizontal toolbars now can grow vertically if there is not enough space for toolbar elements.

  • gb.gmp is a new component based on the Gnu Multiple Precision Arithmetic Library that implements BigInt and Rational numbers.

  • The gb.image component has new methods to apply balance effects to an image.

  • now is based on GStreamer 1.0. The MediaPlayer control now can take a screenshot of the current video frame.

  • gb.openal is a new component based on the OpenAL 3D audio library.

  • gb.opengl.sge is new component that implements a simple OpenGL game engine based on the MD2 format.

  • gb.xml.rpc is now far more reliable.


* BUG: Uninstall should honor XDG_UTILS variable during 'make uninstall'.
  This fix building in ArchLinux.
* NEW: The TRUNK_VERSION macro is now defined to the overall SVN repository
  revision if Gambas is compiled from inside a repository. The value is
  detected by the Makefiles and passed as a command line definition to gcc.
* NEW: The trunk version is now put in the 'config.h' file of the /main
  source directory. No compilation flag is used anymore.
* NEW: All Gambas executables return the trunk revision number when they
  are called with the '-V' option.
* NEW: The trunk version is now generated at compilation time through
  custom rules and a generated include in the file.
* NEW: Components can have a new state: "Deprecated".
* NEW: Update copyright year to 2013.
* NEW: Update the README file, and add a copy of the wiki installation
  instructions in the INSTALL.html file.

* BUG: Selecting two different libraries with the same name is not possible
* BUG: Correctly raise an error when opening a void form file.
* BUG: Do not crash when checking for completion in text editor.
* BUG: Icon selection dialog filter works correctly again.
* BUG: An arrangement icon has been forgotten.
* BUG: Fix Undo/Redo of newly created controls having a Text property.
* BUG: If the master of the form editor selection is removed, select a new
  master in the renaming selection if possible. Otherwise, the selection is
  not in a coherent state, which makes undo/redo crash.
* BUG: If the desktop password wallet is not available, do not crash
  anymore, but display an error message instead.
* BUG: Subversion support now correctly handles project directories that
  have symbolic links in it.
* BUG: The '.lang' directory should be correctly put under version control
  when a project become translatable.
* BUG: Correctly save profiling preferences when closing the project
  property dialog.
* BUG: Do not crash if a file cannot be associated with any mime type.
* BUG: Fix the frame position when dragging a control from the toolbar to
  a container.
* BUG: Fix the local variable view when they are displayed in columns.
* BUG: CSV Import: Take the charset into account when displaying the file
* BUG: Don't automatically hide the console tab when displaying the
  database editor.
* BUG: Detect structure definition help comments.
* BUG: New menu are translatable by default.
* BUG: Fix menu editor.
* BUG: Use "dpkg-buildpackage -d -rfakeroot" instead of
  "fakeroot dpkg-buildpackage -d". It seems that the first one sometimes
  does not work for unknown reasons.
* BUG: Some file path automatic completion fixes.
* BUG: The Backspace key now works correctly with autocompletion of project
  paths (i.e. strings beginning with "./").
* BUG: Don't crash in the project version control dialog if storing
  passwords is not possible on the current desktop.
* BUG: Always use "svn --force" when deleting a file in a project under
  version control.
* BUG: Automatically unfold procedures while doing a text search.
  Consequently, search & replace now works correctly when procedures are
* BUG: Do not crash if examples are not installed.
* BUG: Fix language environment when running subversion.
* BUG: Add the missing component descriptions.
* BUG: Use the "title font" for form editor and image editor toolbars.
* BUG: Fix a typo in tips french translation.
* NEW: The subversion dialog is not closed automatically anymore when
  hitting ENTER.
* NEW: Search result list now displays the procedure name.
* NEW: System information now tells libcurl version.
* NEW: Add translations for details of the E_CHILD error message.
* NEW: The 'Project -> Refresh' menu entry now reloads the symbol
  information of all components and libraries used by the project.
* NEW: Display a warning at project loading when some libraries are missing.
* NEW: Allow a component to have a requirement on the XML implementation
  feature (i.e. 'gb.xml' or 'gb.libxml').
* NEW: Added "lxterminal" to the list of xterminal options
* NEW: "Compress all" and "Uncompress all" action on project sub-
* NEW: If the IDE throws an uncatched error, try to save all modified files
  before aborting.
* NEW: Highlight the background of special methods in the code editor
  procedure list.
* NEW: Update czech translation.
* NEW: When installing the Gambas font, don't use the deprecated
  '~/.fonts.conf' file anymore.
* NEW: The file information dialog now allows to revert it individually (if
  the project is managed by subversion).
* NEW: The project file properties dialog is now based on the new
  FileProperties control.
* NEW: Project statistics came back in the file property dialog.
* NEW: Add a file properties view in the CSV import dialog.
* NEW: New design of the system information dialog.
* NEW: The system information dialog searches for more libraries.
* NEW: Add a filter to the component tab of the project property dialog.
* NEW: When the 'gb.web' component is selected, a new option is available
  in the project property dialog: "Run in an embedded HTTP server".
* NEW: Add a menu item in the "Debug" menu to define in one click if an
  embedded HTTP server must be used.
* NEW: The 'gb.httpd' component can be checked explicitely.
* NEW: New image editor.
* NEW: Hitting "[" just after a "." now hides the automatic completion.
  This is for the new ".[xxx]" syntax.
* NEW: Allow more possible shortcuts in menu editor.
* NEW: Menu items can be non-translatable.
* NEW: Add Islandic language.
* NEW: Name some unnamed components.
* NEW: Automatic completion of icon paths (i.e. strings beginning with
* NEW: Complete the french translation.
* NEW: Javascript compressor: between "// <verbatim>" and "// </verbatim>"
  comments, no symbol is compressed.
* NEW: If a variable beginning with "$" is unknown, it is now declared as a
  private global variable, not a local variable.
* NEW: The file creation dialog now can create javascript files.
* NEW: Database connection editor: SQL request now can be stored with the
* NEW: Database editor: Support for metadata in field and index
  definitions. Metadata are enabled if the corresponding check-box is
  checked in the connection properties dialog.
* NEW: Database editor: Some redesign of the sql queries editor.
* NEW: Use 'script' icon for javascript files.
* NEW: Autocomplete INHERITS keyword with classes.
* NEW: Locking a form does not hide the "event" menu anymore. But it shows
  the existing event handlers only.
* NEW: Update error messages translation.
* NEW: Add a new background image.

* BUG: Fix an english mistake without altering the translations.
* BUG: Correctly handle boolean constants.
* BUG: Fix the "search" link.
* NEW: The indexes are more compact now.

* BUG: Translations came back.

* BUG: Fix PdfPresentation example.
* BUG: Lighttable: Correct renaming of files if ScrollView is expanded
* BUG: GSLSpline: Remove deprecated Painted property from Form definition.
* BUG: Fractal: commit a missing new file.
* BUG: MapView: Temporaly disable map effects because they are too
* BUG: Fix Wizard example.
* NEW: Add 'Pong' in the Games section.
* NEW: Pong: Make ball fly faster with every paddle hit.
* NEW: Update czech translation.
* NEW: Pong: Use gb.ncurses improvements
* NEW: Invaders: New example for gb.ncurses showing some variant of Space
  Invaders. Most internal code is right, only the surface needs polishing.
* NEW: Use the new HttpClient Progress event and its properties in the
  HttpGet networking example.
* NEW: The Fractal example now uses eight background tasks to draw the
* NEW: MediaPlayer: Add a button to display the contents of the first video
  device (/dev/video0).
* NEW: MediaPlayer: Display error messages in the interface.
* NEW: The MediaPlayer example now has a panel to configure the image
* NEW: MediaPlayer: Allow to choose the video device.
* NEW: Md2Model: New gb.sge example. Draw a lot of models (up to about
  240000 vertices, the maximum I can draw in 1/50th second on my Core i5
  @ 3.4 GHz).
* NEW: MediaPlayer: Add a button to take a screen-shot of the current video
* OPT: Lighttable: Allow double-click on DirChooser

* BUG: GB.Stream.SetBytesRead() now increments the internal number of read
  bytes, so that the 'Line Input' buffer is taken into account.
* BUG: When the parent of an observer is detected invalid while raising an
  event, detach the observer and not the observed object!
* BUG: When the default date format associated with the current locale is
  not a numeric one, use the American format. It was done for 'en_PH'
* BUG: Don't flush the process output at process end if the process stream
  has already been closed.
* BUG: Correctly free things then something bad happens while starting a
  child process.
* BUG: Fix a memory leak when trying to run a non-existant program with
* BUG: Void string constants work correctly now.
* BUG: Don't wait for a stream to be ready for reading if the stream has no
  underlying file descriptor.
* BUG: Correctly handle functions with a variable number of arguments when
  an array conversion occurs during argument parsing.
* BUG: The debugger now correctly displays and modifies arguments of
  functions having a variable number of arguments.
* BUG: Don't crash when calling a dynamic _call special method in a static
  context. Raise an error instead.
* BUG: In File.Load(), workaround virtual files (like those located in
  '/sys') whose official size is not their real size.
* BUG: A stream redirected through the 'Begin' method checks that stream is
  ready for writing only when the 'Send' method is called. Between the
  'Begin' and 'Send' calls, the PRINT and WRITE instructions will always
* BUG: GB.NextEnum() does not return stopped enumerations anymore.
* BUG: UnBase64() works correctly now. It does not add extra null bytes
* BUG: Process management is now reliable against processes killed and
  started during process event handlers.
* BUG: Disable read watch when reading a stream fails for any reason: i/o
  error, end-of-file...
* BUG: Do not stop watching when reading up to a specified number of bytes.
* BUG: Fix a possible false error when using LINE INPUT on non-blocking
* BUG: Class reimplementation of Abs() now can return an object or a
  floating-point number.
* BUG: Fix a crash when an error is raised while the startup class is not
* BUG: Fix alignment of structure declarations for ARM architecture.
* BUG: Time() with one argument correctly converts it to a date.
* NEW: Enumeration objects are immediately freed when the enumeration is
* NEW: A new interpreter API that allows a component to tell that its
  custom stream data is immediately available.
* NEW: GB.Stream.Eof() is a new API that returns if there is something to
  read on a stream, by taking the 'Line Input' internal buffer into
* NEW: Defining the PWD environment variable in a SHELL or EXEC instruction
  changes the working directory of the child process.
* NEW: If the program name of EXEC is an absolute path, immediately raise
  an error if it does not exist.
* NEW: Clean up allocation macros.
* NEW: Clean up object referencement macros.
* NEW: --version also prints the SVN revision number when gbx3 was compiled
  from a SVN repository.
* NEW: If a static public method named Application_Error() is defined in
  the startup class, then this method will be called when an unhandled
  error is thrown, just before the program is aborted.
* NEW: GB.OnErrorBegin() and GB.OnErrorEnd() are two new APIs that allow to
  register cleanup routines that are called when an error is raised between
  the GB.OnErrorBegin() call and the GB.OnErrorEnd() call.
* NEW: MATCH is a new operator that automatically load the gb.pcre
  component to implement PCRE pattern matching. The syntax is the same as
  the LIKE operator.
* NEW: GB.ReturnSingle() is a new API that allows to return a Single from a
  method or property implementation routine.
* NEW: The option '-H' is assumed if the project depends on the 'gb.httpd'
  component explicitly.
* NEW: Process.Ignore is a new boolean property that tells the interpreter
  to not wait for the process end. If the interpreter exits, that process
  is then automatically killed.
* NEW: Support for inequality operators in the operator interface.
* NEW: The Sgn() function can be implemented by the operator interface.
* NEW: GB.System.Debug() is a new API that allows to know if the
  interpreter is run in debugging mode.
* NEW: Updated Spanish translation.
* NEW: Application.Priority is a new property that allows to define the
  scheduling priority of the current process (or task). See it as an
  interface to the nice() system call.
* NEW: Date() and Time() now takes the milliseconds as an extra optional
* NEW: Date() and Time() now always check the range validity of their
* NEW: Allow some error messages to be untranslatable by using a void macro
  named '$(...)' around the string.

* BUG: Functions now can have up to 65536 byte-code operations instead of
* BUG: Now a FOR loop with no loop variable correctly raises a syntax
* BUG: Correctly handle public string constants larger than 255 characters.
* BUG: Generate correct information files for components having string
  constants with newline inside.
* BUG: Correctly raise a syntax error if the FOR EACH variable is not
  immediately followed by the IN keyword.
* NEW: Support for the Parent property of WebPage.
* NEW: WebPage markups attributes can use the <%...%> syntax.
* NEW: Add a new MATCH operator.
* NEW: The ".[xxx]" syntax now can be used inside a WITH <object> ...
  END WITH control structure. It is a synonymous for "<object>[xxx]".
* NEW: Implement the "!xxx" syntax for the WITH ... END WITH control

* BUG: Be able to create the executable file if /tmp and the target
  directory are not on the same device.

* BUG: The value of  Float constants is now correctly dumped in *.info
* BUG: Write boolean constants in information files as "T" and "", not
  "True" and "False". It breaks things.

* NEW: Update Czech translation.

* BUG: Cairo.ImagePattern() now internally keeps a reference to the source
  image so that the image data is not unexpectedly freed before the

* NEW: This a new component based on the "Clipper" library.
* NEW: Polygon is a new class that represents a polygon. It can be
  automatically converted to and from PointF[].

* BUG: Abs() on a Complex returns a Float.
* NEW: Implement the same Complex.ToString() method as in gb.gsl.

* BUG: Fix stream implementation.

* BUG: Fix the stream implementation.

* BUG: Fix difficult-to-spot List.Take() bugs due to difficulties with the
  former internal data structures. The class now survives all my test cases
  (without misbehavior under valgrind).
* BUG: List.Take() never raises "Out of bounds" anymore if the list is empty
  because that's an inappropriate error for a *circular* list. It raises an
  error if an attempt is made to Take() an invalid Current which includes
  the case that the List is empty.
* BUG: Fix possible bugs when updating an invalid Current.
* BUG: Really erase old elements instead of just marking them as Null to
  prevent (potential) information leaks.
* BUG: Remove inclusion of c_avltree.h which is not yet versioned.
* BUG: List: Fix two false positive compiler warnings on some systems.
* BUG: AvlTree: Don't forward-declare a typedef. It bothers some compilers.
* BUG: Also update Key from AvlTree_get().
* BUG: Invalidate the enumerators in AvlTree.Clear()
* NEW: Fix memory leaks from Circular cleanup.
* NEW: Expose List.Current as a virtual object representing the current list
  element which has Append() and Prepend() methods to manipulate the list
  not only around its head. This breaks backwards compatibility.
* NEW: List.Value is what List.Current has meant formerly.
* NEW: Add List.Current.Index and List.Index which are an absolute index of
  the current element into the list. These are guaranteed to be in bounds of
  [-List.Count; List.Count - 1]. Note that each non-negative index has an
  associated negative equivalent and vice versa. They work like the indices
  given to List._get().
* NEW: Add a List.AutoNormalize property which instructs the list to
  automatically make indices (like resulting from a calculation) fit into
  the List bounds preserving the sign of the given index. This effectively
  prevents any "Out of bounds" errors.
* NEW: Add List.MoveTo() to point Current to an index.
* NEW: List.Current.Is{First,Last,Valid} can be used to determine if Current
  is the first or last element of the list or if it is valid, respectively.
* NEW: Update copyright years.
* NEW: Have a stripped-down version of gb_common_string_temp.h to provide
  STRING_compare() without producing compilation problems.
* NEW: AvlTree is a new Collection-like class implementing a balanced
  binary search tree. It does _not_ utilise hashing in order to maintain
  an order of the literal key strings given by the user (For Each thus
  traverses from smallest to greatest key).
* NEW: Carry in a stripped-down version of Bob Jenkins' lookup3 hash
  algorithm from the Public Domain. It was a last-minute decision to not use
  it in AvlTree to maintain the literal key order.
* NEW: Mark component as stable
* OPT: Shrink internal data structures and adjust algorithms likely
  improving performance (noticably for the 'random' case of my stress test -
  the 'best' case is almost on a par with Variant[] now).
* OPT: Current and the enumerators (internally) carry list global indices
  (LGI) which can be used as anchor points together with List.Count to speed
  up traversals (always taking the shortest way through the list).
* OPT: Remove workaround code related to an enumerator bug fixed in #5749.

* BUG: Using a database URL in the Connection constructor works now.
* BUG: Fix a possible memory corruption in blob management.

* NEW: Update Czech translation.
* NEW: The DataView control can edit blob fields now.
* NEW: DataControl can handle blob fields now.
* NEW: Highlight the byte under the mouse in blob editor.
* NEW: DataCheckBox is a new data control that displays a checkbox for a
  boolean database field.
* NEW: DataControl does not change the background of mandatory field and
  the font of primary key fields anymore.
* NEW: DataControl.Control is a new property that returns the underlying
  control used for editing the field data.

* NEW: Retrieve row count just after running the query.

* BUG: Handle SQLITE_BUSY error for all requests, even SELECT queries.
* BUG: VARYING CHARACTER() is taken as a text type now, not a boolean.
* NEW: Connection.Timeout is now the maximum duration of request retries
  when the database is busy. By default, this is 120 seconds.

* BUG: The debugger now correctly displays and modifies arguments of
  functions having a variable number of arguments.
* NEW: The debugger tells the IDE when its prompt is the first one.

* BUG: Desktop.SendMail() does not quote the "-" character in e-mail
  addresses anymore.
* BUG: Fix the dependencies of the component project.
* BUG: Replace internal call XKeycodeToKeysym() with XkbKeycodeToKeysym()
  This fixes the deprecation warning at compilation.
* BUG: Fix a possible crash when searching a mimetype from the file
* BUG: Correctly use the XDG data directories in DesktopFile and
  DesktopMime classes.
* BUG: Correctly search mime icons in DesktopMime.GetIcon().
* NEW: Try to use gnome keyring on XFCE.
* NEW: Desktop.DataDir is a new property that returns the directory where
  the application must store its user-specific data.
* NEW: Desktop.ConfigDir is a new property that returns the directory where
  the application must store its user-specific configuration.
* NEW: Desktop.CacheDir is a new property that returns the directory where
  the application must store its user-specific cached data.
* NEW: Desktop.RuntimeDir is a new property that returns the directory
  where the application must store its temporary runtime files.
* NEW: DesktopMime.GetIcon() now can stretch installed icons to the
  requested size.
* NEW: DesktopFile.Run() method now returns the created process object.
* NEW: Desktop.Passwords.Enabled is a new property that returns if storing
  passwords is possible on the current desktop.

* BUG: Fix a stupid typo. The PointF class now works correctly!
* BUG: The PaintMatrix class is now really autonomous. It can be used
  without a current drawing device.
* NEW: Remove geometry classes and put them in the gb.geom component.
* NEW: PaintMatrix.Copy() is a new method that copies a matrix.
* NEW: PaintMatrix.Map() is a new method that applies a matrix to a point
  and returns the result.

* BUG: In HTML highlighting, highlighting inside <script> and <style>
  markups works correctly now.
* BUG: Some fixes in HTML highlighting.
* BUG: JavaScript: Fix regular expression highlighting.
* NEW: HTML highlighting has be rewritten. <%...%> markups are taken into
  account inside <style> and <script> markups.
* NEW: Add 'transition' to the CSS keywords.

* BUG: Regular expressions of a file filter are splitted by the ";"
  character only now. Not the comma anymore.
* BUG: Setting the TabPanel.Border property now correctly refreshes its
* BUG: The directory contents size task does not abort anymore when
  accessing an unreadable files or directory. It now ignore them.
* BUG: Balloon: Fix the bubble drawing routine.
* BUG: Add the 'linux' and 'gnu' icon in the stock icon list.
* BUG: DirChooser should not crash anymore when it cannot access a
* BUG: Fix a possible infinite loop in TabBar layout management.
* BUG: ButtonBox border is now drawn correctly with QtCurve.
* BUG: The status of FileChooser and DirChooser toolbar icons is correctly
  initialized now.
* BUG: Reading the FileChooser.ShowPreview property does not crash anymore.
* NEW: FileView: The IconView grid size takes the icon size into account
  automatically now.
* NEW: Add text fields to enter the time in the calendar popup. Add an
  apply button too.
* NEW: FileView and DirView now display hidden files lightly, and symbolic
  links in italic.
* NEW: File properties dialog in FileChooser and DirChooser.
* NEW: Update czech translation.
* NEW: FileProperties is a new control that displays the properties of a
  specific file or directory. It automatically computes the size of
  directory contents through a background task.
* NEW: The stock icon map now can declare specific icons for specific
  widget themes.
* NEW: Add a detailed view toggle button to the FileChooser and DirChooser
* NEW: When errors are raised while browsing the contents of a directory,
  the file properties dialog display them in a new tab.
* NEW: The file properties dialog has an automatic preview tab for image
* NEW: ButtonBox.Pos is a new property that returns the cursor position of
  its inner TextBox.
* NEW: The GB_STOCK_DEBUG environment variable must be used now instead of
  the GB_STOCK variable.
* NEW: ImageView is a new control that allows to view an image inside a
  scrolled view, at different zoom levels.
* NEW: SliderBox is a new control that displays a Slider and a SpinBox,
  both being synchronized.
* NEW: The SidePanel transparent handle is now smaller when the SidePanel
  is hidden.
* NEW: FileChooser: Add a tool button for displaying file properties.
* NEW: LCDLabel.Value is a new property that is a synonymous of the Text
  property for numerical values.
* NEW: DateChooser[].Text is now taken into account. It is displayed as a
  tooltip when the mouse cursor hovers the associated date.

* NEW: Update czech translation.

* BUG: ToolBar: Expander and separators are correctly visible again.
* NEW: Update Czech translation.
* NEW: Horizontal toolbar layout has been redesigned. Now they grow
  vertically if there is not enough place for all toolbar elements.
  Vertical toolbars are not done yet.

* NEW: Default icons for some mime types.
* NEW: Fix the 'tools' icon for elementary icon theme.

* NEW: New hidden component that implements all geometry classes: Point,
  PointF, Rect and RectF.

* NEW: New component based on the Gnu Multiple Precision Arithmetic
  Library. It implements BigInt and Rational numbers.

* BUG: Fix duplicate symbols issues when compiling on OSX.
* BUG: Fix Gsl.Frexp.
* BUG: Fix Gsl function signatures.
* BUG: Fix the Vector.ToString() declaration.
* BUG: Abs() on a Complex returns a Float.
* NEW: Remove useless functions from the Gsl class.
* NEW: Remove Gsl.Fcmpb and rename Gsl.Fcmpi as Gsl.Fcmp.

* BUG: Scrollbar and Slider correctly raise their Change event when their
  Value property is set manually.
* BUG: The Window.Controls property does not return invalid controls
* BUG: Fix the naming of controls. The rule is the following: by default, a
  control takes the name of its event handler prefix. If it has no such
  prefix, it takes a unique name made from an incremental integer. But the
  automatic instance of Form is named from its class name.
* BUG: Menu click event is now triggered the same way as in gb.qt4.
* BUG: Control.HasFocus() works correctly now.
* BUG: Modal windows cannot be shrunk less then their initial size
* BUG: Menus work correctly again.
* BUG: Remove deprecated call to gb_type_init().
* BUG: Drawing text alignment is taken into account when the width or
  height is specified, not only when both are. Now, the drawing text
  methods behave like in gb.qt4.
* BUG: Take the Invert property into account in vertical arrangements.
* BUG: TrayIcon now uses the Gambas 3 logo as default icon.
* BUG: Support for Ubuntu scrollbar overlays.
* BUG: Fix the name of new modifier key constants.
* BUG: Use the deprecated GDK key constants, otherwise the component does
  not compile with old GTK+ libraries.
* BUG: Remove some remaining GDK_KEY_* constant so that it compiles on old
  GTK+ libraries.
* BUG: Fix broken popup and modal dialog management.
* BUG: Patch Style properties and methods for 'oxygen-gtk' widget theme.
* BUG: Calling TrayIcon.Delete now correctly updates the internal number of
  visible tray icons.
* BUG: Fix Enabled property behaviour by just renaming a method. There is
  something weird I didn't understood. :-/
* BUG: Dialog.SaveFile() now uses the Dialog.Path property the same way as
  the gb.form.dialog component.
* BUG: Fix popup menu management for imbricated popups.
* BUG: Non-resizable modal forms are really not resizable now.
* NEW: Key.Shift, Key.Alt, Key.Ctrl and Key.Meta now always returns the
  actual state of the corresponding modifier.
* NEW: Key.ShiftKey, Key.AltKey, Key.CtrlKey and Key.MetaKey are four new
  constants that are returned by Key.Code when the corresponding key is
  pressed or released.
* NEW: Implementation of the new PaintMatrix design.
* NEW: Visible trayicons prevent the event loop from stopping.
* NEW: Printer.Default is a new property that returns the name of the
  default printer.
* NEW: Printer.List is a new property that returns the list of the names of
  all available printers.

* BUG: GridView: Don't hide selection when setting the Mode property with
  its current value.
* BUG: The default ColumnView sorting now correctly takes the column into
* BUG: Renaming an IconView item now correctly works if the IconView is
* BUG: Draw.FillStyle has been implemented.
* BUG: Fix IconView item text ellipsization routine.
* BUG: Draw.Picture() and Draw.Image() source arguments now work correctly.
* NEW: Common renaming routine for TextView, ListView, ColumnView and
* NEW: IconView.Renaming is a new property that returns if an item is being
* NEW: FileChooser and DirChooser now can rename or delete files.
* NEW: IconView, TreeView, ListView and ColumnView items now have a
  RichText property.
* NEW: Typing keys inside an IconView should not crash anymore.
* NEW: Add void constructors to HSplit and VSplit for the documentation.
* NEW: HSplit and VSplit have a new Border property that defines if the
  splitter separator is visible or not.
* NEW: HSplit and VSplit now take the Spacing property into account.
* OPT: IconView items refresh is delayed if the IconView is locked.

* BUG: The CGI "SCRIPT_NAME" variable is set to "/".
* BUG: Many fixes in CGI handling if the project is in debugging mode.
* NEW: Reset locale to "C" before running the http server.
* NEW: The default CGI time out is now 10 minutes.
* NEW: Behave accurately when run in debugging mode : only one CGI script
  at a time is allowed.
* NEW: When run in debugging mode, there is no CGI timeout.
* NEW: Replace "thttpd" strings by "gb.httpd".
* NEW: Simplify the default HTML error page.
* NEW: If the GB_HTTPD_DEBUG environment variable is set to "1", then all
  HTTP server debugging messages are printed to the standard error.
  Otherwise, nothing is printed.

* BUG: Image.Copy() now checks its arguments better, so that it never
  generates images with garbage inside.
* BUG: Image.Fuzzy() argument cannot be greater than 254.
* NEW: Image.Pixels is a new property that allows to return the image
  pixels as an integer array, and to set the image pixels from an integer
* NEW: New balance methods: Image.Brightness, Image.Contrast, Image.Gamma,
  Image.Hue, Image.Saturation, Image.Lightness.
* NEW: Image.BeginBalance() and Image.EndBalance() are two new methods that
  allow to group calls to the previous methods, so that all the balances
  are done in one shot.
* NEW: Color.Distance() is a new method that returns the RGBA distance
  between two colors as a floating point value between 0.0 and 1.0.
* OPT: Internal routines for color space conversion between HSV and RGB
  have been optimized.

* BUG: Remove deprecated call to gb_type_init(). This call is deprecated
  since glib 2.36.
* BUG: Loading an image sometimes raised false errors. This has been fixed.
* NEW: Image.Stretch() is a new method that allows to stretch an image
  without having to use a full GUI component.

* BUG: Fix compilation error.
* BUG: Fix configure with llvm 3.3
* BUG: Use another header file for configure step that is available from
  v3.1 to v3.3+, so proper include path is chosen.
* BUG: Fix building with llvm 3.3. It should still build with llvm-3.2 (not
* BUG: Try to restore building of component with llvm 3.1.

* NEW: New component to provide an easy logging interface.

* BUG: Many change in the zoom effect. I hope it is good
* BUG: correct detection of the mouse in the Viewer controls
* BUG: Now the property AllowEffect really stop effect
* BUG: The property ShowControls is now visible in the property windows
* BUG: Shape stroke is correctly drawed
* BUG: Some little corrections
* NEW: Now shapes are usables, you can use, point, multipoints,
  polylines, and polygons.
  Data Position are defined in lat/lon value.
  ex: Map["MyShape"].AddPoint(MapPoint(lat,lon))
* NEW: _MapShape.Color is a property to define the shape color on the layer
* NEW: A new static layer in the MapView give user control. It have just
  the zoom control for now. It can be disabled with the property
* NEW: A new property Bounds in Map Class give the lat/lon coord at the
  limits of the drawed map.
* NEW: Now shapes are stored directly in the ShapeLayer. It act like a
  collection. ex: Map!Shape.AddPoint("Home", MapPoint(0.05, 45))
  You can access to it with Map!Shape!Home.Data
* NEW: ShapeItem.Data become _ShapeItem.Points
* NEW: A new function refresh in _ShapeLayer allow to update the Shapes box
  and center value when points value have been changed.
* NEW: Now you can define a different point image for each Shape of
  type Point
* NEW: a new function Grab allow to get an image of a given zone at the
  given size and at the better zoom level.
  ex: PictureBox1.Picture = $Map.Grab($Map!MyShape!zone1.Bounds,
  PictureBox1.Width, PictureBox1.Height, 0).Picture
* NEW: Map Class have an event Draw()
* NEW: Map have a property Loading that allow to control if the layers have
  finished to get theire datas
* NEW: I've replaced the _ShapeItem box (RectF) by Bounds (MapBounds)
* NEW: Now ShapeItem have a property Color so each shape on a layer can have its
  own color
* NEW: Add a Max property to ShapeLayer
* NEW: Begin the support for Web Map Server.
* NEW: Grab Function return an image of the given bounds, with
  the given with and height, with the given margin arround. If
  the zoom is not defined then the better rendering zoom is used.
* NEW: In MapView, there is two new function PixelToMapPointRel
  and MapPointToPixel that convert the mouse pos in MapPoint
  and the opposite.
* NEW: In _MapTile, a new function SetCoockieFile allow to
  define the cookie file shared by all the httpsockets.
  It's usefull for using with some server that query a session.
* NEW: In _MapTile, WMSProjection allow to define the server projection
* NEW: In _MapTile, WMSARgs is a collection that allow to define the
  static args for the server (build the url)
  It miss the bbox order.
* OPT: Improve the slide inertia

* BUG: The MediaPlayer.Input property is actually read-only.
* BUG: Remove a debugging message.
* BUG: Do not crash while receiving a message associated with a GStreamer
  plugin unknown to Gambas.
* BUG: Hide warnings when reading a GStreamer date/time value.
* BUG: MediaPlayer.ConnectionSpeed will not crash anymore.
* BUG: Correctly handle GStreamer dates with year but no month and no day.
* NEW: Use GStreamer 1.0 instead of GStreamer 0.10 that is now deprecated.
* NEW: now depends on gb.image.
* NEW: MediaPlayer.Video.Image is a new property that returns a screenshot
  of the current video frame.
* NEW: MediaPlayer.Balance is a new property that allows to configure the
  image brightness, contrast, hue, saturation... It actually returns a
  virtual array of balance "channels", each one having a minimum value, a
  maximum value, a current value and a name.
* NEW: Support for properties that are enumerations. Use them like string
  properties that can only take some specific values.
* NEW: GStreamer element not created explicitely are now managed through
  the MediaControl class.
* NEW: MediaFilter is a new MediaControl that implements the 'capsfilter'
  element. It has a Filter property that understands the same syntax as the
  'gst-launch' GStreamer tool.
* NEW: MediaContaienr.Children is a new virtual property that allows to
  enumerate its children elements.

* BUG: Input: Comment all NoDelay related stuff out
* BUG: Window: PrintCenter() handles empty lines now
* BUG: The signature of Screen.Resize() allows arguments now
* NEW: Pair: Allocate all pairs at initialisation and inhibit any change to
  them. Array accessors can be used to get the pair number for a given
  fore-/background combination
* NEW: Window: Rewrite the Window class
* NEW: Remove the Insert() method
* NEW: Remove .Window.Attrs' Color property
* NEW: BorderFrame is an optional argument to the constructor (default True)
  to specify if there shall be a border frame around the window setting the
  border apart from the content
* NEW: Ask() returns the choice number to ease translation
* NEW: Ask() supports a default choice in upper case
* NEW: Make Read event work
* NEW: Screen: Rewrite it mostly (is a static class again)
* NEW: Remove Read event
* NEW: Make Resize event work
* NEW: Rename .Cols and .Lines to .Width resp. .Height
* NEW: Declare gb.ncurses "Unfinished"
* NEW: Allow to apply attributes and colours to a particular
* NEW: Change Window.Attributes into a bitmask (Integer)
* NEW: .Window.Attrs isn't anymore. The Attr static class now provides
  OR-able constants to assign to Window.Attributes. .Char.Attrs, however,
  remains a virtual object to manage attributes on a per character basis
* NEW: Provide Window.Pair to set the colour pair for all *subsequent*
  writes, as opposed to Foreground and Background which set the colours
  of all that is and will be
* NEW: Omitting the optional 'Attr' and 'Pair' parameters to Window.Print()
  now indicates to use the window settings instead of no attributes and
  default colour
* OPT: Tidy up sources
* OPT: Window: Use werase() instead of wclear() to clear

* BUG: Socket connection is not blocking anymore, like it was in Gambas 2.
* BUG: Fix DnsClient defaut event declaration.
* BUG: Socket: Reinitialize the timeout each time the blocking mode
* BUG: SocketServer: Reinitialize the timeout each time the blocking mode

* BUG: HttpClient: Allows null data when using the Post() or Put() method.
* BUG: Don't crash if FtpClient.Exec() gets a void array as commands array.
* BUG: Don't crash when FtpClient.Exec() gets an array with empty strings
* BUG: The handle of a curl object is now -1 (i.e. it is not available).
* BUG: The data received by a curl object is immediately available to the
  READ instruction.
* BUG: Initialize the HTTP data buffers before filling them.
* BUG: Don't try to raise the Read event again and again if there is no
  event handler for that event.
* BUG: FtpClient and HttpClient Progress event work as expected now.
* BUG: FtpClient: Define the file size explicitely when uploading.
* BUG: Try to make compile with old versions of libcurl.
* NEW: The FtpClient or HttpClient Read event is now called as long as
  there is something to read *and* the event handler actually read at least
  one byte.
* NEW: HttpClient.PostFile() is a new method that sends a POST request,
  taking the data from a file and not from a string.
* NEW: New Progress event raised while the FtpClient and HttpClient are
  downloading or uploading some data.
* NEW: FtpClient and HttpClient have four new read-only properties to get
  information on uploading and downloading progress: Downloaded, Uploaded,
	TotalDownloaded and TotalUploaded.
* NEW: Curl.SSL.VerifyPeer and Curl.SSL.VerifyHost are two new properties
  that allow to define the corresponding options of a CURL connection.
* NEW: FtpClient.NoEPSV is a new property that prevents the use of EPSV. In
  other words, the FtpClient will always use PASV.

* NEW: Update czech translation.
* NEW: Pop3Client has a new Remove() method to delete a message from its
  index. Pop3Client.Remove(n) is just a synonymous for

* BUG: Don't send an extra blank line in the first part.
* BUG: Fix a memory leak when specifying the mimetype charset.
* BUG: Quote the space character at the beginning of a line when sending
  quoted-printable data.
* NEW: SmtpClient.Add() now uses a void name if its third argument is
  specified and is a void string.
* NEW: SmtpClient.Body is a new property that allows to define the text
  body of the mail. That body is sent as the first part, with 'text/plain'
  datatype and UTF-8 charset.

* NEW: New component for the OpenAL 3D audio library.

* NEW: Added some new constants.
* BUG: Fix a possible crash in GL.GenTextures(). I guess that bug will have
  to be fixed in other equivalent routines.

* NEW: Experimental component with simple game engine based on MD2 format.

* NEW: New component to wrap cryptographic functions of libcrypto from the
  OpenSSL project.

* NEW: This component is now deprecated.

* BUG: Accurate error management and error messages.
* BUG: Try to not use new libpcre error constants.
* BUG: Make gb.pcre compile with old versions of libpcre.
* BUG: Fix two cases of memory leaks with CREGEXP->code: (re)compilation of
  a (new) pattern and object destruction.
* NEW: The number of matches is not limited to 66 anymore. The internal
  buffer is automatically increased as needed, so the number of matches
  should be limited by the memory only.
* NEW: RegExp.Error is a new property that returns the last error code
  returned by the libpcre library.
* NEW: Introduce the static RegExp.Check() method which works like the
  constructor but immediately returns a boolean whether the pattern could
  be applied to the subject - handy for one-line string validation.
* NEW: Rename RegExp.Check as RegExp.Match. Factorize its code a little
* NEW: Create an API interface for allowing other components to use PCRE
  regular expressions.
* NEW: RegExp.Replace() replace matched patterns by another string. The
  '&N' pattern in the replace string allows the N-th submatch to be
* NEW: RegExp.Submatches property has been deprecated. Its properties now
  directly apply to the RegExp class: RegExp.Count and RegExp[...].

* BUG: Creating a WebElement should not crash anymore.

* BUG: Fix a possible crash in the previous TextArea modification.
* BUG: The Window.Controls property does not return invalid controls
* BUG: Paint.Image() works correctly with temporary images now.
* BUG: Fix the naming of controls. The rule is the following: by default, a
  control takes the name of its event handler prefix. If it has no such
  prefix, it takes a unique name made from an incremental integer. But the
  automatic instance of Form is named from its class name.
* BUG: ShowModal() now honors the initial window state (full screen,
* BUG: Sunken and raised borders are now drawn correctly with styles like
  CleanLooks that incorrectly take the current painter brush into account.
* BUG: Take the Invert property into account in vertical arrangements.
* BUG: Paint.RichText() now takes the vertical alignment into account
* BUG: TrayIcon now uses the Gambas 3 logo as default icon.
* BUG: Fix focus style routine for QtCurve.
* BUG: Rewrite the Container.FindChild() method because the QT4 method
  excludes children outside of its geometry, and because that geometry may
  be not yet computed.
* BUG: Make gb.qt4 compiles on ARM again.
* BUG: Dialog.SaveFile() now uses the Dialog.Path property the same way as
  the gb.form.dialog component.
* NEW: TextArea inner margin is now two pixels when there is a border, and
  zero pixels when there is no border.
* NEW: TrayIcon now supports ARGB visuals - i.e. icons are really
  transparent now.
* NEW: Key.Shift, Key.Alt, Key.Ctrl and Key.Meta now always returns the
  actual state of the corresponding modifier.
* NEW: Key.ShiftKey, Key.AltKey, Key.CtrlKey and Key.MetaKey are four new
  constants that are returned by Key.Code when the corresponding key is
  pressed or released.
* NEW: Implementation of the new PaintMatrix design.
* NEW: Automatically define menu item shortcuts when a popup menu is shown.
* NEW: Visible trayicons prevent the eventloop from stopping.
* NEW: Printer.Default is a new property that returns the name of the
  default printer.
* NEW: Printer.List is a new property that returns the list of the names of
  all available printers.

* NEW: The Editor.LineOffset property has been renamed as
* NEW: Editor: jumping to the next procedure from the current one now goes
  to the end of the file.
* NEW: If nothing is selected, SHIFT+TAB unindent the current line.

* BUG: The OpenGL clear color is now taken into account when clearing the
  area before calling the Draw event handler.
* BUG: Don't use GL_LIGHTING if it is not defined. It seems to be the case
  with OpenGL ES.

* NEW: Update czech translation.
* NEW: Now ReportBrush have public method to make a ReportBrush more easily.
  Color, Image, LinearGradient, RadialGradient.

* NEW: This component is now deprecated.

* BUG: The Session timeout is correctly computed now.
* BUG: Request.Post.Contents is correctly updated if the content type is
* BUG: The Request.Fields property now can be read without reading the
  value of a request field first.
* BUG: Once the session is saved, mark it as not modified.
* NEW: WebPage.Parent property returns the parent webpage that includes the
  current webpage with the <<...>> markup.
* NEW: When Request.Debug is set, only the first 4K of a POST request is
  stored in the Request.Contents property.
* OPT: Use the gb.compress component to compress responses instead of
  running an external 'gzip' process.

* BUG: The XML parser does not complain anymore when encountering a PI.
* BUG: Error positions now start from 1 instead of 0.
* BUG: XmlTextNode now behaves correctly if a null string or zero length is
  given to its constructor.
* BUG: The XmlNode.Serialize method does not crash anymore if nothing has
  been serialized.
* BUG: The XmlNode.Serialize method now correctly handles the " (")
* BUG: The XmlNode.Serialize() method does not crashes anymore if a null
  string is given.
* BUG: Forgot some files while uploading the last revision.
* BUG: Fixed HTML5 Doctype handling.
* BUG: The "Extra root element" error is not thrown on HTML documents
* BUG: The GetChildrenByAttributeValue() method still checks the child
  nodes even if the given node is not an element.
* BUG: The XmlExplorer.ReadFlags._get() method now returns a valid value if
  the flag ID is out of bounds.
* BUG: Fixes a few memory leaks when freeing an XmlExplorer
* BUG: Fixes a crash when creating Attributes without values
* BUG: The XmlExplorer.Node property does not raises a Null Object error
  when reaching the end of the document.
* BUG: XmlReader now raises an appropriate error if an lt sign is inside a
* BUG: XmlWriter now correctly normalizes attribute values
* BUG: The XML DOM parser doesn't go beyond the string limits when looking
  for an XML prolog anymore.
* NEW: Added a new gb.xml Component API.
* NEW: The XMLElement.AppendFromText() method can now take the &1, &2 etc.
  Subst-like patterns.
* NEW: All the methods based on the parser can choose from the XML and the
  HTML parser (if loaded), depending  on the document's (or parent
  document's) type.
* NEW: Add a new XMLNode.Deserialize() method.
* OPT: Check if an element is self-closed only once when getting its string
* OPT: Does not memchr() anymore to determine if the text representation of
  an element is self-closed, allowing to improve XmlNode.ToString() (and
  similar) performance.
* OPT: The XmlNode.Serialize() now allocates a new string only if there are
  differences between the original one and the escaped one, allowing to
  improve XmlNode.ToString() (and similar) performance.
* OPT: Renamed, reorganized and cleaned up the code.
* OPT: Removed the ugly cross-including sources to communicate with the
  subcomponents, which now use the XML Component Interface.
* OPT: Remove all the unneeded includes.
* OPT: The XML serializer does not check if the elements are self-closed
  according to HTML specifications anymore. This is done only in the new
  HTML serializer.
* OPT: The XmlExplorer.Open() method now directly calls the XmlDocument
  constructor instead of using an intermediate buffer.

* BUG: HtmlDocument now correctly sends its Doctype while getting its
  string representation.
* BUG: The XmlElement.GetChildById() method is now correctly implemented.
* BUG: Does not crash anymore if the id or class properties does not exist
  when reading them.
* BUG: Loading an HTML document from a file while instanciating it
  correctly works now.
* BUG: Using the class or id CSS selector in a filter on an element that
  doesn't have these does not crashes anymore.
* BUG: The HTML tag closing is now case-unsensitive.
* BUG: Forgot to Implement the HtmlDocument.GetElementsByClassName()
* BUG: Fixed self-closed elements handling.
* BUG: Searching elements by CSS filter works correctly now.
* NEW: Added a new gb.xml.html Component API.
* NEW: Added a new (X)HTML parser, more flexible than the XML one,
  and automatically used with the HtmlDocument class.
* NEW: Generated HTML Documents now automatically use the new meta/charset
  element if the document is HTML5, and the old meta/content-type element
  only if the document is not HTML5.
* NEW: A closing tag that doesn't close any open tag, is now silently
* NEW: Malformed tags' contents are now silently ignored.

* BUG: The component should compile correctly again.
* BUG: The XmlRPCClient.Method property's return value is now coherent.
* BUG: Try to fix the RpcServer class.
* BUG: Fixes of the miniServer class from issue 449.
* BUG: Fixed that RpcClient could hang in sync mode, issue 450.
* BUG: miniServer would give an out-of-bound if content-length is wrong.
* NEW: HTTP/1.1 100-Continue support in miniServer (specially for

* NEW: Now the gb.xml Component API is used.


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