Gambas Documentation - /doc/release/3.3.0

# Gambas 3.3.0

- What's new

  - Development environment

  - Interpreter & compiler

  - Components

- ChangeLog

- Compatibility

- Compilation and installation

## What's new

This new release fixes more than 250 bugs and adds more than 250 new features.

Here are the main changes... Enjoy Gambas!

### Development environment

- A far more reliable packager.

- Automatic local variable declaration.

- TODO/FIXME/NOTE comments listing.

- Bookmarks in text and code editor.

### Interpreter & compiler

- Support for complex numbers based on a new gb.complex component.

- Arithmetic operators now can be act on number classes like Complex, Polynomial, Vector and Matrix.

- Background tasks.

- UTF-8 strings optimizations.

- Compilation warnings on unused variables, unused functions and overridden symbols.

- New WebPage syntaxes.

### Components

- gb.data is a new component that adds new container datatypes to Gambas.

- Lot of fixes in the gb.db.form component.

- Support for LXDE and Mate desktop in the gb.desktop component.

- Stock icons now can use any installed icon theme, and has support for the LXDE desktop.

- Support for tablets and pens in GUI components.

- The gb.gsl component now implements polynomials, matrices, vectors and complex numbers completely.

- gb.mime is a new component that allows to encode and decode MIME messages.

- gb.net.pop3 is a new component that implements a POP3 client.

## ChangeLog

    [CONFIGURATION]
    * BUG: When a top-level source directory actually has several components,
      compile the sub-components *after* the main components. This is
      especially important with gb.xml and gb.xml.rpc.
    * BUG: Fix configuration issue for gb.qt.ext
    * BUG: Fix the component template script.
    * BUG: Do not distribute '.action' directories in source packages.
    * NEW: Add support for the MacPorts distribution.
    * NEW: Add a search path for OS X.
    * NEW: Enable silent compilation.
    * NEW: Standardize the help text of all command-line tools.
    * NEW: Add gb.data component.

    [DEVELOPMENT ENVIRONMENT]
    * BUG: Do not apply the Ignore property in form editor.
    * BUG: In form editor and form hierarchy window, correctly ignore controls
      that are edition helpers (handles, ghost frame...).
    * BUG: Fix rectangular selection in form editor.
    * BUG: Correctly ignore ghost frame and arrangement icons when saving a
      form.
    * BUG: Ghost frame and arrangement icons are now correctly updated when the
      mouse leaves a form editor.
    * BUG: Do not crash when a component required by a library is missing.
    * BUG: Do not display spurious 'missing component' messages in the project
      property dialog.
    * BUG: Array of classes exported by a component are now correctly handled
      by the component interface analyzer.
    * BUG: In the open project dialog, the project icon on the right pane is
      correctly refreshed now.
    * BUG: Fix automatic completion of project classes that reimplements
      another class.
    * BUG: Fix a selection error when removing a container while keeping its
      children.
    * BUG: Fix symbol scan of project classes with no parent.
    * BUG: Fix some spurious errors when refreshing classes and symbols
      descriptions.
    * BUG: Fix a circular reference.
    * BUG: Fix form editor selection frame when scrolling.
    * BUG: Fix crash when hitting CTRL+A in form editor.
    * BUG: Fix some error messages and french translations.
    * BUG: Creating a component package now works correctly when the component
      project has control icons.
    * BUG: Fix insertion of predefined environment variables in the project
      property dialog.
    * BUG: If a library or a component exports a form, then the special
      properties ('_IsForm' and '_HiddenControls') are not taken into account.
    * BUG: Creating a directory in the project treeview should not segfault
      anymore.
    * BUG: Moving a source file now correctly refreshes the project treeview.
    * BUG: Project treeview popup menu now is correctly filled on directories.
    * BUG: Using drag & drop on the project treeview now correctly initializes
      folder contents.
    * BUG: Do not display a thumbnail for images too large or too high.
    * BUG: No margin for the output console.
    * BUG: Fix a possible crash in form editor arrangement icons managemnt.
    * BUG: Fix profiling of Eval() calls.
    * BUG: Packager: library executables are installed with the '.gambas'
      extension, but not the standard executables, where the extension is
      removed.
    * BUG: Packager: ArchLinux packager now compiles the project correctly.
    * BUG: The code pretty printer now preserves breakpoints and bookmarks.
    * BUG: Bookmarks do not prevent project conversion anymore.
    * BUG: Ubuntu and Debian packager now create a correct desktop file.
    * BUG: Take the Translatable virtual property into account when saving a
      MultiContainer control.
    * BUG: Signature of methods with a variable number of arguments are
      correctly generated now.
    * BUG: Moving, renaming or deleting a source file now should correctly
      refresh the search list, the breakpoint list and the task list.
    * BUG: Fix all detected warnings.
    * BUG: Function signatures now support the new syntax that allows to put
      braces around arguments to let the compiler ignore them.
    * BUG: Renaming a control now should only rename accurate symbols in source
      code.
    * BUG: Don't crash when computing the size of a project item.
    * BUG: Support for the "Unfinished" string in component description file.
    * BUG: Be more clever when searching the gambas IDE executable to launch it
      for opening a project in another window.
    * BUG: Save the ChangeLog file before creating the package.
    * BUG: Fix binary file detection that made file browsing sometimes ignore
      some text files.
    * BUG: Project 'Save as' now preserves symbolic links.
    * BUG: When saving a project with another name, the ExecPath and SourcePath
      options of the target project are reset, and the target project is
      cleaned up.
    * BUG: Indent & unindent buttons now work in text editors.
    * BUG: Opening a project in another window should work in all cases now.
    * BUG: Don't try to refresh the search list if we are closing the project.
    * BUG: Fix inheritance management in projects that are the Gambas part of
      an existed component, or a component entirely written in Gambas.
    * NEW: Draw a ghost frame around the current hovered control in the form
      editor.
    * NEW: Some redesign in the way ghost frame, red containers frame and
      arrangement icons are drawn.
    * NEW: Allow to save and open a profile file.
    * NEW: Display the signal description when the interpreter has crashed.
    * NEW: New gb.complex component.
    * NEW: Hitting ENTER in the project filter box opens the current selected
      file.
    * NEW: Using arrows keys in the project filter box now moves the project
      tree cursor.
    * NEW: CTRL+L now sets the focus back to the project filter box.
    * NEW: Hitting ESC in the project filter box now resets the filter.
    * NEW: Add support for gb.gsl component in the project creation dialog.
    * NEW: PageUp and PageDown keys now work as expected in the project filter
      box.
    * NEW: When a library is added to project dependencies, the other libraries
      it depends on are added too recursively. And a library cannot be removed
      if another one depends on it.
    * NEW: Highlight KML files with HTML highlighting.
    * NEW: Each comment anywhere in the source code beginning with 'TODO:',
      'FIXME:', or 'NOTE:' is automatically listed in a new tab named 'Tasks'
      in the bottom debugging panel.
    * NEW: Hide the search list tab when it is not useful.
    * NEW: Controls having translatable properties (like 'Text') now get a new
      virtual "Translate" property. If this property is FALSE, then the
      translatable properties will not be translated.
    * NEW: New tool menu entry that sends a source archive of the projet by
      e-mail. It is based on the Desktop.SendMail() method.
    * NEW: Unchecking a component in the project property dialog now shows a
      message box that allows to automatically uncheck all other components
      that depend on it. It does not work with libraries. You must uncheck them
      by hand.
    * NEW: Translate all parts of error messages.
    * NEW: Spanish translation updated.
    * NEW: An option for hiding editor folding symbols.
    * NEW: Make the packager wizard dialog smaller for small screens.
    * NEW: Automatic local variable declaration.
    * NEW: Automatic local variable declaration is disabled by default.
    * NEW: Support for bookmarks.
    * NEW: When opening the startup class for the first time, go directly to
      the Main function.
    * NEW: Try to avoid Application.Busy flickering in some dialogs.
    * NEW: Display the number of matches after a project browse.
    * NEW: New default project icon.
    * NEW: The welcome dialog box now has a filter for examples.
    * NEW: Remove the logo on the welcome screen, so that the dialog can be
      smaller for small screens.
    * NEW: When editing a WebPage, hitting ENTER or RETURN may automatically
      insert a closing "%>" if the cursor is inside a non-closed "<%". This
      prevents unwanted syntax highlighting of HTML with Gambas syntax.
    * NEW: Use a GridView instead of a ListContainer to display components in
      the project property dialog.
    * NEW: Some little icons in the project property component tab show the
      state of each component (stable, not finished, unstable).
    * NEW: The help comments are now interpreted with a new "Gambas markup
      syntax" inspired from markdown syntax. People that have written comments
      in the old syntax will cry...
    * NEW: Support for compiler warnings.
    * NEW: A new option for not restoring files when loading a project.
    * NEW: Pressing SHIFT with the RETURN key prevents automatic variable
      declaration.
    * NEW: Add a filter to the example tab of the open project dialog.
    * NEW: "Open with" menu now is based on the *.desktop files of applications
      that are installed on the system.
    * NEW: Display the project description in project items now.
    * NEW: Display a PDF icon for PDF files.
    * NEW: Use Terminus as default fixed font if it is installed on the system.
    * NEW: Modify the behaviour of the "Replace" command. Now the text is
      searched only if it has not been just replaced.
    * NEW: Remove the "Alternate" theme color.
    * NEW: Hide error message if the debugger is stopped.
    * NEW: Add '-h', '-v' and '-L' command-line options.
    * NEW: In the database connection editor, make the table data browser read-
      only by default, and add a button to toggle the editable state.
    * OPT: New optimizations in profile file size.
    * OPT: Project libraries analyze results are cached now.
    * OPT: Browsing the project is faster now.
    * OPT: Delay the welcome dialog project list layouting as much as possible.

    [WEB SITE MAKER]
    * BUG: Fix scrolling frames on Chrome.

    [EXAMPLES]
    * BUG: Don't use JIT compiler in NeHeTutorial example #19, it crashes.
      OpenGL LLVM 3.0 and Gambas LLVM 3.1 in the same process is not welcome!
    * BUG: Fix HighlightEditor example.
    * NEW: New Tablet event inspired by a project made by Ricardo Díaz Martín.
    * NEW: Spanish translation updated.
    * NEW: Descriptions of some examples.
    * OPT: Update the TreeView example so that it is easier to translate.

    [INTERPRETER]
    * BUG: Reading an unknown property does not crash anymore if _unknown is
      defined but not _property.
    * BUG: Raise the Kill event of a Process after having closed its I/O
      streams.
    * BUG: Allows the _unknown method to be static.
    * BUG: Now the _property special method can be static even if _unknown is
      dynamic. Anyway, if _unknown is static then all unknown properties and
      methods must be static, and if _unknown is dynamic, they all must be
      dynamic.
    * BUG: Correctly read unknown properties.
    * BUG: Do not leak memory if the _unknown method raised an error.
    * BUG: Fix exception handling for JIT functions.
    * BUG: Automatic array conversion now works with not yet loaded array
      classes.
    * BUG: Fix compilation on 32 bits platforms.
    * BUG: Make the interpreter compile when FFI has been disabled.
    * BUG: Fix conversion from pointer to structure.
    * BUG: Env[...] does not return a constant string anymore. Anyone can
      change the environment in the background!
    * BUG: Fix error handling when freeing objects.
    * BUG: Fix Error.Propagate().
    * BUG: Do not try to handle signals if there is no more signal handlers.
    * BUG: Fix compilation on Mac OS X 10.8
    * BUG: Use MAP_ANON instead of MAP_ANONYMOUS. No need to make the
      distinction between Linux and *BSD anymore!
    * BUG: The Gosub stack pointer is now correctly reset when a error has been
      intercepted by the Catch instruction.
    * BUG: The GB.GetFunction() API now correctly returns static functions.
    * BUG: Fix the GB.ReturnConvVariant() API so that it does not free the
      return value incorrectly.
    * BUG: Fix Choose() when the choice value is equal to the number of
      possible results plus one.
    * BUG: Fix how the event raising routine handle exceptions.
    * BUG: Process.Kill does not try to wait for the process completion, and
      return immediately.
    * BUG: Fix a typo in '^' operator implementation that prevented its second
      argument to be a Variant.
    * BUG: Fix possible recursion problems while freeing signal handlers.
    * BUG: The output of a process is sometimes woke up ready to read whereas
      there is nothing to read on it. Close the output immediately instead of
      calling the callback again and again.
    * BUG: Try to handle correctly errors raised during the Kill event of a
      background task. It does not work yet. :-(
    * BUG: Handle errors occuring while waiting for a process correctly now.
    * BUG: Disable the component specific event loop when starting a task. No
      way that any GUI works in a background task now, but I can't disable it
      automatically.
    * BUG: Fix the enumeration API. GB.ListEnum() has been replaced by
      GB.BeginEnum() and GB.EndEnum(), that save the state of the internal
      current enumeration.
    * BUG: Fix error handler calls.
    * BUG: Fix Classes enumeration.
    * BUG: The debugger won't crash anymore when trying to continue after an
      error has been raised inside a component.
    * NEW: Static unknown properties can be used in a dynamic context now.
    * NEW: "_operator" is a new interface that allows any native class to be
      used with most of arithmetic operators: +, -, *, /, Abs, =, <> at the
      moment.
    * NEW: The "_convert" interface now allows a class to be converted to any
      datatype, not just other classes.
    * NEW: Str() and Print uses the "_convert" interface to print a localized
      string conversion of any object.
    * NEW: The _convert interface now must handle conversions from any
      datatype.
    * NEW: When converting an instance of A to the class B, try the conversion
      interface of A first. If A has no conversion interface, or if it cannot
      handle the B class, then try the conversion interface of B if any.
    * NEW: Support for imaginary number syntax. For example, using "3i" will
      automatically load the gb.gsl component, create the corresponding complex
      number and return it.
    * NEW: Temporary hack in the GB.New() API so that we can pass a number of
      arguments in some cases.
    * NEW: Add a new API to create an object without calling the constructors.
    * NEW: Arithmetic operators now can be applied on two objects with
      different classes. One at least must implement the '_operator' interface.
    * NEW: Each class that implements the '_operator' interface has now an
      automatic priority that follows the load order. When a binary operator
      has two objects that implement two different '_operator' interface, the
      one having the highest priority is used.
    * NEW: Add a GB.FreeStringLater() API to allow components to create a new
      string with GB.NewString(), and let the interpreter frees it later.
    * NEW: Support for floating-point constants.
    * NEW: Support for new profile file format.
    * NEW: You can convert a pointer to a static structure now. It is useful
      when an extern function has a 'struct XXX **' argument.
    * NEW: Args and Env classes are now shortcuts for Application.Args and
      Application.Env properties.
    * NEW: Add an explicit error message when trying to override a class that
      has already been used as a parent for another class.
    * NEW: GB.Deprecated() is a new interpreter API that displays a warning
      message for deprecated functions at runtime. When the project is
      debugged, an error is raised instead.
    * NEW: GB.ReturnBorrow() is a new API to temporarily borrow the return
      value.
    * NEW: GB.ReturnRelease() is a new API to release the return value borrowed
      by the previous function, without releasing it.
    * NEW: Object.CanRaise() is a new method that returns if a specific object
      event has an event handler.
    * NEW: Add support for double-linked lists in the interpreter API.
    * NEW: GB.Wait() is a new API that waits for a specific number of
      milliseconds, exactly like the WAIT instruction (i.e. the event loop is
      run).
    * NEW: GB.HasForked() is a new API that warns the interpreter that fork()
      has been called (he has to do some stuff).
    * NEW: Remove the GB_POST_FUNC datatype from the API.
    * NEW: Allow components to access the interpreter API through a pointer and
      not a full structure. It is a little bit slower (one more indirection),
      but it uses less memory: one pointer instead of about 180.
    * NEW: GB.Serialize() is a new API that serializes a Gambas value to a
      file.
    * NEW: GB.UnSerialize() is a new API that unserializes a Gambas value from
      a file.
    * NEW: Task is a new class for implementing background tasks. These
      background task are run by forking.
    * NEW: There is an hard limit of simultaneous 256 background tasks now.
      That should prevent fork bombing.
    * NEW: Implement Variant comparison routine.
    * NEW: Variant[] now has an Exist() and a Find() method.
    * NEW: New API GB.CompVariant() that compares two Variant.
    * NEW: Process.Wait() now can take an optional timeout argument, in
      milliseconds.
    * NEW: String.UCaseFirst() is a new method that capitalize the first letter
      of an UTF-8 string.
    * OPT: Remove a useless test in the macro that returns the class of an
      object.
    * OPT: Some little optimization in some type checks.
    * OPT: Optimized GOSUB from an idea of Emil Lenngren.
    * OPT: Conversion between byte index and UTF-8 character index of the last
      string has been optimized when that last string is big.

    [COMPILER]
    * BUG: Like can be used in a Case expression just after the Case keyword
      only.
    * BUG: Fix compilation of WebPage having UTF-8 characters inside.
    * NEW: Support for imaginary number syntax.
    * NEW: A new compiler option '-w' to let it emit warnings.
    * NEW: Emit warnings for unused variables, arguments, functions and for
      local symbols that override global symbols. Public symbols are of course
      not taken into account.
    * NEW: If an argument is surrounded by braces, no warning will be emitted
      if the argument is not used.
    * NEW: If a function argument is enclosed with braces, then no warning is
      emitted if it overrides a global symbol.
    * NEW: New WebPage syntaxes: <<Include>>, <</Include>>, <%/%>, <<--->>.

    [GB.DATA]
    * NEW: gb.data is a new component providing new container datatypes to
      Gambas.
    * NEW: Add List and ListRoot classes for circular double-linked lists which
      can be embedded into other classes or used standalone.
    * NEW: Add Deque class as a base for new Stack, Queue and PrioQueue classes
      on top of linked lists (thus different from related Variant[] semantics).
    * NEW: Add Circular class for ring buffers.

    [GB.COMPLEX]
    * NEW: New component that implements a rudimentary management of complex
      numbers. This component is automatically loaded if a complex number
      constant is encountered and no loaded component can already handle
      complex numbers.

    [GB.CRYPT]
    * BUG: Fix bad casting of strcmp() return value to boolean. The same
      security flaw has been found in MySQL recently. See
      http://seclists.org/oss-sec/2012/q2/493
    * NEW: it is now available for Mac OS X 10.8.

    [GB.DB]
    * BUG: Correctly handle null dates.

    [GB.DB.FORM]
    * BUG: When inserting a new record in a DataView, serial fields are not
      editable anymore.
    * BUG: Correctly go to the last line of a DataView when its DataSource
      enters creation mode.
    * BUG: DataView and DataBrowser in creation mode now do not display any
      selected row, unless in editing mode. In that case the "new record" last
      row is highlighted.
    * BUG: Fix warnings.
    * BUG: Setting DataView.Editable to FALSE correctly hides the record
      creation extra line.
    * NEW: DataView now raises a new Data event that allows to format the
      contents of a cell just before it is displayed. The event receives three
      arguments: the row, the column, and the cell value directly from the
      underlying database.
    * NEW: DataBrowser propagates the Data event of its inner DataView.
    * NEW: DataControl now uses a DateBox to edit date values.
    * NEW: DataSource now raises the BeforeSave event just before writing a
      Result object to the database. The event handler receives the Result as
      argument so that you can modify it.
    * NEW: Spanish translation updated.
    * NEW: DataBrowser.CanCreate is a new property that hides or shows the
      create button.
    * NEW: DataBrowser.CanDelete is a new property that hides or shows the
      delete button.

    [GB.DB.SQLITE3]
    * BUG: 'INTEGER' fields are now assumed to be serial fields only if
      'AUTOINCREMENT' has been specified too.

    [GB.DBUS]
    * BUG: Fix some compilation warnings.
    * BUG: Remove a file that should not be under version control.
    * NEW: Add the DBus error message to the Gambas error message when
      registering or unregistering fails.

    [GB.DEBUG]
    * BUG: Fix profiling of Eval() calls.
    * NEW: Debug.GetSignal() is a new method that returns the description of a
      signal from its numeric value.
    * OPT: Now DEBUG_calc_line_from_position has logaritmic time complexity
      instead of linear. That makes profiling each line much faster for large
      functions!
    * OPT: New profile file format.

    [GB.DESKTOP]
    * BUG: Fix some warnings.
    * BUG: DesktopFile now correctly takes the current language into account
      when extracting application names.
    * BUG: Support for LXDE mime application cache.
    * BUG: $XDG_DATA_DIRS is now taken into account when browsing mime cache
      files.
    * BUG: Fix X11 client message sending routine on 64 bits OS.
    * BUG: Fix all DesktopWindow properties that read or change the state of
      the window.
    * BUG: DesktopWindow.X and Desktop.Y now return the correct window
      position, provided that the window manager follows the EWMH freedesktop
      standard of course.
    * BUG: Fix DesktopWindow.Resize() method.
    * BUG: The Gambas part of the component must not use the gb.form component.
    * NEW: Support for the Mate desktop in Desktop.Open, Desktop.OpenTerminal
      and Desktop.Passwords.
    * NEW: Better support for the LXDE desktop.
    * NEW: DesktopFile is a new class that load *.desktop application files.
    * NEW: DesktopFile.FindMime() is a static method that returns a list of
      DesktopFile that can handle a specific mime type.

    [GB.DRAW]
    * NEW: Paint.DrawImage() takes a new optional argument that defines the
      opacity of the drawing, between 0 and 1.

    [GB.EVAL]
    * NEW: Support for imaginary number syntax.
    * NEW: Highlight TODO/FIXME/NOTE commentaries like help commentaries.
    * NEW: OPTIONAL keyword is always followed by a space now when rewriting
      Gambas code.
    * NEW: Highlight.Alternate has been deprecated.

    [GB.EVAL.HIGHLIGHT]
    * BUG: HTML highlighting: Correctly detect <head>,<body> and <html> markups
      in all cases.
    * BUG: Fix WebPage highlighting.
    * BUG: Correctly rewrite the following keywords with no spurious space
      after: TRUE, FALSE, NULL, +INF, -INF.
    * NEW: Support for the new WebPage syntaxes.
    * OPT: Optimization of HTML syntax highlighting for big lines.

    [GB.FORM]
    * BUG: The Stock class now detects the Mate desktop, and use it as default
      application theme if needed.
    * BUG: Icon themes based on svg files only are correctly handled now.
    * BUG: Fix icon theme search for LXDE and XFCE.
    * BUG: TabPanel buttons are correctly refreshed when their picture change.
    * BUG: Fix LXDE icon theme support.
    * BUG: Take "~/.icons" into account in the Stock.Themes property.
    * BUG: SidePanel controls now behave correctly when they are put inside a
      TabStrip.
    * BUG: TableView: Apply a white background behind the currently edited
      cell.
    * BUG: Stock.Icons works correctly in all cases now.
    * BUG: ScrollArea computes the limits of its scrollbars correctly in all
      cases now.
    * BUG: Fix warnings.
    * BUG: Transparent SidePanel controls do not eat one pixel of their
      contents anymore.
    * BUG: Some fixes in the stock icon map file.
    * BUG: For some reason, clicking on a tab didn't give the focus to the tab
      button on gb.gtk.
    * BUG: Fix TabPanel tab closing.
    * BUG: Clicking on a TabPanel tab raises the Click event after taking the
      focus now.
    * NEW: The Stock class now prints debugging message if the environment
      variable GB_STOCK is set.
    * NEW: Try to support the Mate desktop in the Stock class.
    * NEW: The LXDE icon theme is correctly detected now.
    * NEW: Both gnome and kde icon themes should be usable with any desktop
      now.
    * NEW: Stock.Icons property now replaces Stock.List property.
    * NEW: Stock.Themes is a new property that returns the list of all icon
      themes stored in '/usr/share/icons'.
    * NEW: Stock: Test more possible configuration files for LXDE.
    * NEW: Now the Application.Theme property can be either nothing, a desktop
      name, or a icon theme name.
    * NEW: GridView: Support for column titles with multiple lines.
    * NEW: New function in GridView Rows, GetSelected, that return an integer
      array with the selected rows.
    * NEW: Replace GridView.Rows.GetSelected() method by GridView.Rows.
      Selection property.
    * NEW: Deprecate Stock.List which has been replaced by Stock.Icons.
    * NEW: TabPanel can get focus now, and handle keyboard shortcuts.
    * NEW: ScrollArea, GridView and IconView got an automatic inner shadow
      where the view area can be scrolled.
    * NEW: ScrollArea.Tablet is a new property that allows it to catch tablet
      events.
    * NEW: Draw SidePanel little arrows differently.
    * NEW: DateBox handles null dates now.
    * NEW: MaskBox hides its contents now when it is the default one and it
      does not have the focus.
    * NEW: DateChooser displays a little cursor following the mouse inside the
      calendar and the time panel.
    * NEW: ScrollArea.Shadow is a new static property to define if inner
      shadows are visible or not. By default they are not.
    * NEW: Mark all controls in test forms untranslatable.
    * NEW: ScrollArea draws a focus border when it has focus.
    * NEW: Add a new "program" stock icon.
    * NEW: In FileChooser and DirChooser, replace the little arrow that goes
      up to the parent directory by a normal button.
    * NEW: Add a PDF icon to the stock.

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

    [GB.FORM.MDI]
    * BUG: Fix warnings.
    * NEW: Little design fix in the shortcut configuration dialog.
    * NEW: Some little redesign of the toolbar configuration dialog.
    * NEW: Spanish translation updated.

    [GB.FORM.STOCK]
    * NEW: Add a "program" stock icon.
    * NEW: Add a PDF icon.

    [GB.GMP]
    * NEW: Skeleton for a new component based on the GNU "big numbers" GMP
      library.

    [GB.GSL]
    * BUG: Fix array creation in CComplexPolynomial.ComplexSolve().
    * BUG: Use the proper detection method for gsl library.
    * BUG: Fix Polynomial to string conversion.
    * BUG: Fix Complex to String conversion.
    * NEW: Use the new "_operator" interface so that complex numbers can be
      handled by standard arithmetic operators.
    * NEW: The Complex class now implements the "_convert" interface.
    * NEW: Complex class has been cleaned up.
    * NEW: Automatic conversion from numbers to Complex.
    * NEW: Vector class has been implemented.
    * NEW: Support for imaginary number syntax.
    * NEW: Vector class is now generic, and has two child classes: FloatVector
      and ComplexVector, depending on the type of its elements.
    * NEW: Add a Complex.Conj() method to return the conjugate of a complex
    number.
    * NEW: Add Complex.Neg() to return the negative of a complex number.
    * NEW: Add Complex.Inv() to return the inverse of a complex number.
    * NEW: Handle GSL errors.
    * NEW: Redesign of the Polynomial class. Now it implements a polynomial
      that can switch between real and complex coefficients transparently.
    * NEW: The ComplexPolynomial class has been removed.
    * NEW: Implement the ^ operator in the Complex class.
    * NEW: Polynomial _call() special method now is a synonymous of its Eval()
      method. That way, you can write 'P(X)' to get the value of P(X).
    * NEW: Remove the FloatVector and ComplexVector classes. Now the Vector
      class handle vector of Float or Complex transparently.
    * NEW: Matrix class built the same way as the Vector class, i.e. with the
      ability to switch transparently between Float or Complex elements.
    * NEW: Matrix arithmetic has been implemented.
    * NEW: Matrix.Determinant() method.
    * NEW: Matrix.Invert() method.
    * NEW: Matrix.Transpose() method.
    * NEW: Matrix _call special method multiplies a matrix by a vector.
    * NEW: Vector <-> Array conversion.
    * NEW: Implement Vector arithmetic operators.
    * NEW: Rename some Matrix methods.
    * NEW: Implement Polynomial arithmetic addition and substraction.
    * NEW: Complex.Handle is a new property that returns the memory address of
      the underlying complex number in memory.
    * NEW: Add a ToString() method to all classes. That method takes two
      arguments: the first one tells if number must be localized. The second
      one tells if complex numbers and polynomials are converted to a string
      that can be sent to Eval().
    * NEW: The '^' operator has been implemented in the Matrix class. Only A^N
      where N is an integer is valid.
    * NEW: Add a Matrix.Conj() method that returns the conjugate matrix.
    * NEW: Make not localized object-to-string conversions return a string that
      is readable by Eval().
    * NEW: Remove methods that are already implemented by arithmetic operators.
    * NEW: Use Float constants in the GSL class.
    * NEW: Matrix can be compared with real or complex numbers. The number is
      then multiplied by the identity matrix before doing the comparison.
    * NEW: Implement Vector arithmetic operators.
    * NEW: Rename some Matrix methods.
    * NEW: Implement Polynomial arithmetic addition and substraction.
    * NEW: Complex.Handle is a new property that returns the memory address of
      the underlying complex number in memory.
    * OPT: Optimize Complex arithmetic by avoiding unneeded object creations.
    * OPT: Optimize Matrix '^' operator.

    [GB.GTK]
    * BUG: Fix bad casting of strcmp() return value to boolean in the Font
      management.
    * BUG: Fix Drag & drop management when dragging outside of the application.
    * BUG: Fix Drag & drop management of controls that already handle Drag and
      drop, like Textbox controls.
    * BUG: Panel with an explicit background color now have their own X11
      window so that they can cover any over controls.
    * BUG: The child search method now takes clientX and clientY into account.
      Consequently, clicking on TabStrip tab buttons work correcty again.
    * BUG: Fix TreeView, ListView and ColumnView multiple selection.
    * BUG: Fix Control.Raise() and Control.Lower() method when the parent is a
      TabStrip.
    * BUG: Window.ScreenY does not take the menu bar into account anymore, as
      in gb.qt4.
    * BUG: Correctly check GTK+ version.
    * BUG: gdk_device_get_source() does not exist before GTK+ 2.22.
    * BUG: Try to activate all XInput devices when the DrawingArea.Tablet
      property is set.
    * BUG: Fix a recursion problem is color management when a control is
      inserted into its container.
    * BUG: Support for tablet events.
    * BUG: Make mouse events in gb.gtk and gb.qt3 behave the same way.
    * BUG: Better draw the background color of Button, ToolButton and
      ToggleButton controls.
    * BUG: The Font object returned by Control.Font is now correctly updated
      when the font of any of its parent changes.
    * BUG: Ensure that when a mouse button is pressed, the same control
      receives the mouse button release event.
    * BUG: Fix popup management.
    * BUG: Editable ComboBox  controls now have the right background.
    * BUG: Make gb.gtk compile with GTK+ 2.16.
    * BUG: Take Label.Padding and TextLabel.Padding properties into account
      correctly.
    * BUG: MouseDrag events are correctly raised in all cases now.
    * BUG: Activate the window correctly after a debugger restart.
    * BUG: Window should not raise useless resize events anymore.
    * BUG: Windows embedded inside a Splitter correctly raise their Resize
      events.
    * BUG: Don't try to resize the window inner container with a negative size
      when the window is too small.
    * BUG: Draw window background correctly.
    * BUG: Don't try to synchronize X11 when the debugger goes forward if there
      is no X11 connection yet!
    * BUG: Fix TreeView, ListView, ColumnView and ListBox click detection.
    * BUG: FullScreen windows correctly raise the Open event now.
    * BUG: Fix the Stock class.
    * BUG: Fix dialog modality.
    * BUG: The Window.Center() method now takes the available desktop into
      account, not the entire screen.
    * BUG: Fix filled ellipse drawing.
    * BUG: Remove a debugging message.
    * BUG: Setting Window.FullScreen does not show the window if the window was
      not visible.
    * BUG: Fix event management of modal dialogs.
    * BUG: Fix Mouse.ScreenX and Mouse.ScreenY.
    * BUG: Printer.From and Printer.To now always return zero if all pages must
      be printed.
    * BUG: Copying an image to clipboard does not corrupt the image anymore.
    * BUG: Fix how mouse events and modality are handled.
    * BUG: Windows should not receive a keyboard event twice anymore.
    * NEW: TabStrip.FindIndex() is a new method that returns the index of
      parent tab of a specific child.
    * NEW: Management of tablet events. At the moment only the DrawingArea
      control can catch them if its Tablet property is TRUE. In that case,
      standard mouse events are raised, and the properties of the tablet event
      are stored in the new Pointer class. All that is not definitive.
    * NEW: Mouse.State is a new property that return the state of all mouse
      buttons as specified by the current mouse event.
    * NEW: Mouse.Button now only returns the index of the button that triggered
      the mouse event.
    * NEW: Automatically temporarily release the keyboard and the mouse when
      the debugger stops the program.
    * NEW: Style.Name is a new property that returns the name of the current
      widget theme.
    * NEW: Use the indirect API access.
    * NEW: Fonts.Exist() is a new method that returns if a specific font family
      exists.
    * OPT: Don't arrange the parent if a move & resize operation actually
      changes nothing.
    * OPT: When showing or hiding a control, check that we actually change the
      visibility of the widget and do nothing if we don't.

    [GB.IMAGE]
    * NEW: Image.RotateLeft() and Image.RotateRight() are two new methods for
      rotating a image by 90° step.

    [GB.JIT]
    * BUG: Use correct IRBuilder.h
    * BUG: Remove some warnings.
    * BUG: Temporary fix for powi due to a bug in llvm.
    * BUG: Oops. Now functions without GoSubs don't crash anymore ...
    * BUG: Fix static _call calls.
    * BUG: Properly check stack overflow for GoSubs.
    * BUG: Fix For Each loops.
    * BUG: Local variables are not forgotten anymore after a Catch.
    * BUG: Ctrl variables in GoSubs are now properly released.
    * NEW: Implement some missing Variant features.
    * NEW: Can now profile each line of code, but beware: profiling makes the
      program much much slower.
    * NEW: Implement _unknown.
    * NEW: Use VALUE_convert instead of VALUE_convert_object.
    * NEW: SPEC_CONVERT constant has been replaced by a field in the CLASS
      structure.
    * OPT: Optimize Variants and some math functions.
    * OPT: Don't do any obvious unnecessary unref-checks.
    * OPT: Use the Gambas stack to store GoSub data instead of allocating
      new arrays all the time. Up to 10 times faster!

    [GB.LIBXML]
    * NEW: Make this component exclude gb.xml.

    [GB.MIME]
    * NEW: New component that manages MIME messages. It is based on the GMime
      library.
    * NEW: Support for Mime parts and Mime multiparts.
    * NEW: Mime.Encode() and Mime.Decode() are two new methods to encode to and
      decode from base64, quoted-printable or uuencode encoding.
    * NEW: Support for message parts. The MimePart.Message property will return
      the MimeMessage embedded inside the part.
    * NEW: Try to detect gmime-2.4 if gmime-2.6 is not available.

    [GB.NET]
    * NEW: SerialPort: Does the polling differently when detecting signal
      changes.
    * NEW: SerialPort.Open() method now takes an optional argument to define
      the polling delay in milliseconds. It is 50ms by default.
    * NEW: Add Net.CannotAuthenticate error constant for gb.net.pop3.

    [GB.NET.POP3]
    * NEW: New component that implements a POP3 client. It uses gb.mime to
      parse the messages.

    [GB.OPENGL]
    * BUG: Add synonymous starting with an underscore for constants beginning
      with a digit.

    [GB.OPENGL.GLSL]
    * BUG: Remove the "GL_" prefix in all constants.

    [GB.OPTION]
    * BUG: The component is now compatible with the new way of arguments
      handling, and does not crash anymore.

    [GB.QT4]
    * BUG: ScrollView internal visible flag is correctly set, and so the
      Hovered property returns the right value.
    * BUG: Fix detection of X11 for the control DrawingArea on Mac OS X 10.8.
    * BUG: Add a font setting routine in the gb.qt interface.
    * BUG: TreeView does not raise keyboard events anymore during renaming
      mode.
    * BUG: Fix the case of Action.Tooltip property name.
    * BUG: Get rid of an old compilation warning.
    * BUG: Make mouse events in gb.gtk and gb.qt4 behave the same way.
    * BUG: The Font object returned by Control.Font is now correctly updated
      when the font of any of its parent changes.
    * BUG: Nothing is drawn now when the clipping rectangle has a negative
      width or height.
    * BUG: Fix declaration of Desktop.HasSystemTray property.
    * BUG: Windows do not raise their Resize event if the size didn't actually
      change.
    * BUG: Fix TextArea foreground color management.
    * BUG: SpinBox Background property now works as expected.
    * BUG: If not page has to be printed, then the Print() method correctly
      returns the Printer object to an inactive state.
    * BUG: Windows should not receive a keyboard event twice anymore.
    * NEW: TabStrip.FindIndex() is a new method that returns the index of
      parent tab of a specific child.
    * NEW: Management of tablet events. At the moment only the DrawingArea
      control can catch them if its Tablet property is TRUE. In that case,
      standard mouse events are raised, and the properties of the tablet event
      are stored in the new Pointer class. All that is not definitive.
    * NEW: Mouse.State is a new property that return the state of all mouse
      buttons as specified by the current mouse event.
    * NEW: Mouse.Button now only returns the index of the button that triggered
      the mouse event.
    * NEW: Style.Name is a new property that returns the name of the current
      widget theme.
    * NEW: Use the indirect API access.
    * NEW: Fonts.Exist() is a new method that returns if a specific font family
      exists.
    * OPT: When reading the ClientX or ClientY property of a Window, arrange
      its contents only if necessary.
    * OPT: During a mouse event, Mouse.ScreenX and Mouse.ScreenY returns the
      global position stored in the received event. It does not query the X11
      server.
    * OPT: Load clipboard format list only if the clipboard has changed.

    [GB.QT4.EXT]
    * BUG: Editor: Fix how spaces at end-of-line are drawn.
    * BUG: Editor: Fix highlighting of saved lines.
    * BUG: TextEdit: Fix the TextEdit.Format.Font property.
    * NEW: Editor: The current line is now visible when using a dark highlight
      theme.
    * NEW: Editor: Highlight saved modified lines and unsaved modified lines
      differently.
    * NEW: Editor: Support for bookmarks.
    * NEW: Editor.BookmarkPicture is a new property for defining the picture
      used for displaying bookmarks.
    * NEW: Editor.FindNextBreakpoint() has been deprecated and replaced by the
      Editor.Breakpoints property, that returns an integer array of all lines
      having a breakpoint.
    * NEW: Editor.Bookmars is a new property that returns an integer array of
      all lines having a bookmark.
    * NEW: Editor.CurrentLine is a new property for defining the current
      executed line. It replaces Editor[].Current.
    * NEW: Editor[].Bookmark is a new boolean property that defines if a
      specific line has a bookmark.
    * NEW: Editor: Always display a margin wide enough to display breakpoint or
      bookmark signs.
    * NEW: Editor.Bookmarks and Editor.Breakpoints properties are now writable.
    * NEW: Editor: The alternate background is automatically computed.
    * NEW: Editor: Brace highlighting now works on alternate background.
    * NEW: Highlight.Alternate has been deprecated.
    * OPT: Editor: Do not compute the character width table each time the font
      changes. Use a cache instead.

    [GB.REPORT]
    * BUG: Now VPanel works well but experimental OnePiece is deactivated.
    * OPT: Set default value on control Width and Height (10 mm).
    * OPT: Cleanup, remove all unused variables.

    [GB.SIGNAL]
    * BUG: Remove an apparently useless type definition, and fix compilation on
      recent Linux kernels.
    * NEW: Rewrote the component to use the signal management routines included
      in the interpreter.

    [GB.V4L]
    * BUG: Fix a compilation warning.

    [GB.WEB]
    * BUG: The session cookie is now only accessible to the current CGI script.
    * BUG: Fix warnings.
    * NEW: Request.Debug is a new property to activate the debugging mode of
      the Request class.
    * NEW: Request.Post.Contents returns the contents of the last POST request,
      provided that the debugging mode has been activated.
    * NEW: Response.SendFile() can set the content-type according to the file
      extension, if no content-type has been specified.
    * NEW: Flush the output before calling Response.End if the response is not
      buffered.

    [GB.XML]
    * BUG: Solved a few bugs with the indentation in XmlWriter.
    * BUG: The encoding is now correctly specified in the document header.
    * BUG: The GetAttribute() method now correctly returns the attribute value.
    * BUG: Getting an attribute that doesn't exist doesn't crashes anymore, it
      returns a null string instead.
    * BUG: The string comparison mode argument is now correctly handled by
      XmlElement.GetAttribute().
    * BUG: The TextContent property now correctly ignores the contents of
      comment nodes, as mentioned in the W3C specifications.
    * BUG: Setting the XmlElment.TextContent property now correctly remove all
      children of an element.
    * BUG: Setting the XmlElment.TextContent with a null string has now no
      effect, as mentioned in the W3C specifications.
    * BUG: When parsing data, extra white-spaces at the beginning and the end of
      text nodes are correctly ignored.
    * BUG: When they are null, reading TagName and Prefix properties from
      XmlElement does not crash anymore.
    * BUG: The XML Declaration is now optional, as mentioned in the W3C
      specification.
    * BUG: The ChildNodes and Children properties have moved from XmlElement to
      XmlNode, as mentioned in the W3C specification.
    * BUG: The XML Error analyzer does not crashes anymore if the error has no
      defined position.
    * BUG: Doctype are now partially handled, i.e. there is no doctype interface
      yet, so they are silently ignored.
    * BUG: Moved the previousSibling and NextSibling properties from XmlElement
      to XmlNode, and added PreviousElement and NextElement, so that there is no
      confusion with the W3C standards.
    * BUG: Addef forgotten property XmlReader.Node.IsEmptyElement.
    * BUG: The document.FromString() method does not crashes anymore if no root
      element was found.
    * BUG: No more memory leak when the XmlDocument.ToString() throws an error.
    * BUG: When throwing an error, the XSLT parser returns anyway a valid (but
      empty) document.
    * BUG: Sloved a little typo error in the XmlElement.PreviousElement
      property.
    * BUG: The CDATA node now correctly handles special characters.
    * BUG: Fixed a memory leak when using XmlDocument.Save()
    * BUG: Fix the un-escape parsing method, it don't crash anymore if there the
      parsed string is less than 3 bytes length.
    * BUG: Reading Special characters in text nodes don't crash anymore.
    * BUG: Fix the XmlReader.Node.IsEmptyElement property.
    * BUG: Fix some memory errors and leaks.
    * BUG: Fix a segmentation fault in XmlReader freeing.
    * BUG: Fix the local, qualified and prefix naming, as mentioned in the W3C
      specification.
    * BUG: Fix the XmlReader.Depth property management when enumerating the
      attributes of a node.
    * BUG: Try to fix a compilation error on some systems.
    * BUG: Correctly handle prefix when parsing a document.
    * BUG: XmlWriter now correctly serializes the text and attribute values.
    * BUG: The XmlDocument constructor now correctly raises an error message
      instead of crashing with signal #6.
    * BUG: Fix prefix management on elements.
    * BUG: The XmlReader.Node.Attributes is a read-only collection.
    * BUG: Error messages are correctly shown now
    * BUG: The Base and Favicon properties do not crash anymore if the matching
      node is not found.
    * BUG: Errors that doesn't give any position in the parsed data are
      correctly raised now.
    * NEW: Added a new XmlElement.ClearChildren method, that removes all the
      children of an element.
    * NEW: Added two properties FirstChild and LastChild to XmlElement.
    * NEW: Make this component exclude gb.libxml.
    * NEW: Added user data management in nodes.
    * NEW: XmlDocument now internally inherits Node, so that they can contain
      other nodes than only a root element (that is now optional), as specified
      in the W3C specifications.
    * NEW: Adds a Serialize() static method in XmlNode that serializes the given
      text.
    * OPT: Do not use the UTF-8 string methods anymore when parsing text opened
      with the XmlReader.FromString() method, they are too slow. This also may
      solve UTF-8 chars reading problems.
    * OPT: Some optimisations in character comparison when parsing data.
    * OPT: Defined a few variables and parameters as const.
    * OPT: Some little optimizations in the ToString() (and similar) methods.

    [GB.XML.HTML]
    * BUG: Fix the XmlElement.Id property.
    * BUG: The HTML parser now correctly raises an error if the document is
      incomplete (no doctype/root element).
    * BUG: The HTML parser now really correctly raises an error if the document
      is incomplete (no doctype/root element).

    [GB.XML.RPC]
    * BUG: Some english fixes in some error messages.

## 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.2.0