doc • release • 3.7.0

Gambas 3.7.0

What's new

This new release fixes 267 bugs, adds 299 new features and 7 optimizations.

Note that many of these bugs have already been back-ported to the 3.6.x versions.

Here is a summary of the main changes:

General

  • A new software repository made with Gambas for Gambas. It allows to publish and install Gambas softwares. All Gambas examples will be stored there now.

Development environment

  • Projects can be published to a "farm server", and installed from there.

  • The database editor now automatically store the description of the database into a template file that can be used at runtime to initialize a new database.

  • The text editor now can handle Unix, Windows and Mac end-of-lines characters.

Interpreter & compiler

  • Array accessors are now faster.

  • Two new functions for encoding URLs: Url$ and FromUrl$.

  • The child process interface has been fixed and optimized.

  • The USE instruction of Gambas scripts is now part of the language.

Components

  • gb.db got new methods to create databases from templates generated by the IDE.

  • gb.db.mysql is now faster, as metadata requests are now cached.

  • gb.db.sqlite3 now supports common table expressions introduced in SQLite 3.8.3.

  • ListEditor is a new control that allows to edit and reorder the contents of a ListBox.

  • Completion is a new class that helps implementing automatic completion.

  • FileCompletion is a new class that implements file automatic completion.

  • DocumentView is a new control that allows to implement a viewer of any document.

  • ColorPalette is a new control that allows to select a color among a predefined list of colors.

  • MessageView is a new control that implements an embedded notification panel that is automatically hidden and shown if there is a message to display.

  • Keyboard management and input method nightmare have been fixed in gb.gtk and gb.gtk3.

  • The Border class is now creatable and allows to paint complex css-like border where you want.

  • HttpForm is a new class to help submit forms to HTTP servers.

  • gb.report2 is a new and better implementation of the reporting component.

  • gb.scanner is a new component based on SANE to help dealing with scanners.

  • gb.sdl2 and gb.sdl2.audio are two new components for using SDL2.

  • The same Settings can now be shared by several running applications.

  • gb.util is a new component written in Gambas that provides utility functions to the interpreter.

  • gb.util.web is a new component written in Gambas that provides utility functions to web applications.

ChangeLog

[CONFIGURATION]
* BUG: The gbw3 symbolic link is correctly uninstalled now.
* BUG: Remove '.gambas' directories that must not be under version control.
* BUG: Fix 'components written in Gambas' installation Makefile.am.
* BUG: Redirect to the wiki from the INSTALL file. It contained a generic
  (and not working) excerpt from the autoconf manual before.
* BUG: Remove '.settings' project files that must not be versioned.
* NEW: Examples are not installed anymore and were removed. They are now
  stored in the Gambas farm server.
* NEW: Update Chinese translations.
* NEW: Update the state of many components.
* NEW: When installing a component entirely written in Gambas,
  automatically remove possible existing old shared library files.
* NEW: Modify the installation process so that it will be able to run the
  'gbh3' tool to extract help from component source files.
* NEW: Support for GNU/Hurd.

[DEVELOPMENT ENVIRONMENT]
* BUG: Don't use "sTable" as field name for the metadata table, because
  apparently "STABLE" is a reserved word in PostgreSQL. Upgrade an already
  existing metadata table automatically.
* BUG: Don't crash when starting a search from a image or connection
  editor.
* BUG: Run packaging commands through a virtual terminal.
* BUG: Project property dialog: The component grid view now correctly keeps
  its state when filtering is applied, or if only the used components are
  displayed.
* BUG: Project property dialog: The component help viewer now works
  correctly in off-line mode.
* BUG: Don't crash when installing the Gambas font, if the
  '~/.config/fontconfig' directory does not exist.
* BUG: Workaround the behaviour of appmenu by setting the
  'APPMENU_DISPLAY_BOTH' environment variable at startup if menus are
  explicitly hidden.
* BUG: Form editor: Undo correctly resets the selection.
* BUG: Fix offline help of project classes.
* BUG: Expression analyze now works correctly when ME or SUPER is used.
* BUG: Do not remove the '.gambas' directory when compiling everything.
  Just remove its contents, and keep a possible '.svn' directory inside.
* BUG: Don't crash if the '.gambas' directory does not exist.
* BUG: Off-line help: The help time stamp is now used for detecting updates.
  File modification time is not used anymore as it is a localized time.
* BUG: Source archive files now ignore files named 'core'.
* BUG: Don't crash when trying to download the off-line help if 'wget' is
  not installed on the system.
* BUG: Opening a web page in a browser now works if the BROWSER environment
  variable is not defined.
* BUG: Fix Mageia package generation.
* BUG: Help on virtual classes (like TreeView.Item) is correctly displayed
  now.
* BUG: Ignore comment lines when completing a control structure after the
  RETURN key has been hit.
* BUG: Correctly refresh the 'Recent' tab in the open project dialog.
* BUG: Make Wizard.ActionText property translatable.
* BUG: Fix initial focus of welcome dialog.
* BUG: Fix object control properties edition.
* BUG: FMakePatch: Don't add a patch to the viewer multiple times.
* BUG: Fix project property dialog validation for component/library
  projects.
* BUG: Database editor: Support for requests beginning with "WITH" or
  "PRAGMA".
* BUG: Don't apply theme colors to the form property editor.
* BUG: Do not invert Blur and Spread.
* BUG: Opening a form using an unknown control now displays an error
  message and the form is not opened.
* BUG: Pasting an unknown control from another project now displays an
  error message and nothing is pasted.
* BUG: Fix form control check by ignoring the action part of the form file.
* BUG: Don't apply theme background to the hierarchy window.
* BUG: Image editor: Fix interaction between pasting and transformation
  tools (flip, rotate, scale).
* BUG: Don't crash if the selected background is not available.
* BUG: Packager: Really use the same package name as displayed in the first
  wizard step in all cases.
* BUG: Packager: Clean up system selection.
* BUG: Several fixes in the editor position history.
* BUG: Workaround some spurious Qt4 webkit warnings.
* BUG: Packager: Fix the use of Shell$() in Debian packaging.
* BUG: Packager: Forbid spaces in extra files for Debian systems, as they
  are not supported: this is a many years old bug in the Debian packaging
  system that has never been fixed!
* BUG: Loading a new project correctly updates the desktop component
  toolbar button.
* BUG: Fix search inside output console.
* BUG: Image editor: Don't crash when starting drawing outside of the
  image.
* BUG: Image editor: Fix color palette.
* BUG: Correctly update end-of-line menu and button visibility.
* BUG: Correctly reset Application.Busy when opening a connection fails.
* BUG: FPatch: Don't forget to decrease Application.Busy.
* BUG: Image editor: Fix a possible crash when pasting an image.
* BUG: If A picture is not on the given path then CFamilyreport crashes.
* BUG: Welcome dialog: Disable the filter when the example or recent list
  is void.
* BUG: Form editor: Always display the arrangement icon of all parents and
  grand-parents of the hovered control.
* BUG: The ".component" file is now automatically versioned.
* BUG: Form editor: When inserting a control, show the name of the control
  without setting the Text property.
* BUG: Form editor: Undo is not broken anymore by the popup menu capturing
  the MouseUp event.
* BUG: Form editor: when dropping a control from the toolbox, the position
  of the mouse cursor now gives the center of the control, not its top-left
  corner. It prevents the drop to be ignored when it occurs on the gray
  d&d frame!
* BUG: Form editor: Don't show the name of the control in buttons if a
  picture is defined.
* BUG: Correctly refresh the icons everywhere when the startup class is
  changed.
* BUG: Default IDE window size should be big enough now.
* NEW: Use the 'gb.markdown' component for converting help comments.
* NEW: Farm server client.
* NEW: A wizard for publishing a project on a farm server.
* NEW: Update German translation.
* NEW: Add a description field to the crash dialog box. This description is
  added to the mail.
* NEW: Automatic completion of event handlers if an object is declared
  globally with an event name (Private MyObject As MyClass As "event").
* NEW: The IDE now can edit *.gbs Gambas scripts. But there is no automatic
  completion.
* NEW: Use labels instead of buttons inside project items.
* NEW: Improve Cygwin System Information awareness.
* NEW: Update the offline help to the new wiki look.
* NEW: The off-line style sheet file is now a symbolic link to the style
  sheet file located in the wiki project.
* NEW: Database editor: The database structure is now written to a
  '*.template' file in the '.connection' directory.
* NEW: Add the 'blues' color theme made by Kevin Fishburne.
* NEW: Design changes in the welcome dialog.
* NEW: The project open dialog has a bookmark that points at software
  sources installed form the farm.
* NEW: Add a dark gray background.
* NEW: No gradient for drawing project or software boxes, but a solid
  background.
* NEW: Remove the examples from the welcome dialog, the open project dialog
  and the 'File' menu.
* NEW: Animate wizards.
* NEW: Project version display routine is now centralized.
* NEW: Don't force the form hierarchy to be expanded.
* NEW: Update Chinese translation.
* NEW: Add an "Examples" button in the welcome dialog that displays the
  projects installed in '~/.local/share/gambas3/src/example'. Add an help
  text if no example is installed yet.
* NEW: Add gb.sdl2 and gb.sdl2.audio to the component list.
* NEW: Translation dialog: Add an option to replace existing translations
  when importing an external translation file.
* NEW: The project property dialog now uses an IconPanel.
* NEW: New design of the component tab in the project property dialog.
* NEW: Don't display an error message when a newly inserted file cannot be
  automatically opened.
* NEW: Put the component/library properties into the project property
  dialog.
* NEW: Project properties dialog: Make component filters visible again.
* NEW: Project properties dialog: To get help on a component, you have to
  double-click on it now. It opens a embedded web browser on the help. The
  back button of the browser goes back to the component list.
* NEW: Use the new GridView cell Border property to draw the component tab
  of the project property dialog differently.
* NEW: Description of the gb.util.web component.
* NEW: A component/library project now can define if its information should
  include the information of other components. This is useful if your
  component includes another component at runtime that is hidden, or that
  it does not depend on.
* NEW: Component/Library dependencies now are chosen from a new component
  selection dialog.
* NEW: Use row borders in project property component list. But still use
  cell borders in component / library requirements!
* NEW: Use the new filter feature of the ButtonBox control.
* NEW: Use the internal ComponentChooser control to replace the previous
  component selection in the project property dialog.
* NEW: Image editor: Move tools to the property panel.
* NEW: Color selection dialog: Replace the deprecated ListContainer by a
  GridView.
* NEW: The IDE background image can be colorized.
* NEW: Add support for ReportMargin.
* NEW: New property AllowNegative in CoordBox to allow negative numbers.
* NEW: Now FamilyReport.ToPixel supports negative numbers.
* NEW: A ReportBoxShadowChooser dialog to manage the Report BoxShadow.
* NEW: Support for arguments without a datatype in function signatures.
* NEW: [ALT] + any brace character is a new editor shrotcut that add or
  remove braces around the current word. Same thing for [ALT] + [<] or [>].
* NEW: Property editor: Add a clear button. Replace the MenuButton by a
  normal ComboBox.
* NEW: New component status icons.
* NEW: Add a "run that class" button in the class editor.
* NEW: Add a "run that class" entry in the project tree popup menu.
* NEW: Remove two ugly backgrounds.
* NEW: Packager: Use a ListEditor to edit mimetypes.
* NEW: Packager: A checkbox now allows to enable or disable package
  signature. Works only for *.deb package, and only if you have correctly
  configured 'gpg'.
* NEW: The '.component' file is removed if the project type is switched
  back to "normal".
* NEW: New icon for autotools packages.
* NEW: Implement the new wiki component description and class list for the
  offline help.
* NEW: The argument editor of the project property dialog now has an
  automatic file completion.
* NEW: Use specific gray icons for the debugging panel.
* NEW: Balloon message have been replaced by the new MessageView control.
* NEW: Remove some icons that are not used anymore.
* NEW: Files including a '\r' character are not considered as binary files
  anymore.
* NEW: Text editor now can handle Unix, Windows and MAC end-of-line
  formats, through a new toolbar button and a menu.
* NEW: Add support for gb.report2 and gb.scanner.
* NEW: Project property dialog: Add management of excluded components.
* NEW: Add a popup menu on the debugger expression window that allows to
  edit or watch the selected value.
* NEW: Update support list.
* NEW: Add a menu entry in debugger windows to print the value of the
  current line on the console.
* NEW: Form editor: Selected controls do not display a frame when they are
  hovered. It is useless.
* NEW: Form editor: The hover frame is now updated when a control is
  resized.
* NEW: Form editor: Panels with no child and that have their Expand
  property set now display red hatch lines whose orientation depends on
  the arrangement of its parent container.
* NEW: Form editor: Arrangement icons have been redesigned.
* NEW: Remove the "Break on error" debugging option. It is useless, and
  leads to unexpected errors when it is forgotten.
* NEW: Allow to mark component as deprecated.
* NEW: Draw the version number the same size as the application title in
  the welcome and about dialogs.
* NEW: Use the tawhid background in the about dialog.
* NEW: Make the current procedure highlighted again in the editor procedure
  list.
* NEW: French translation updated.
* OPT: FPatch: Make hunk (un)checking behave more intuitive.
* OPT: Translation dialog: Closing the dialog is now faster.

[WIKI SERVER]
* BUG: Fix the display of page without headers.
* BUG: Fix creatable class detection.
* BUG: Take the new ".info" file format into account.
* BUG: Some style fixes for lists.
* NEW: Help comments of component classes and symbols are now automatically
  used for creating non-existing documentation pages.
* NEW: Images are clickable in editing mode. They point at the image wiki
  page.
* NEW: New look for the documentation wiki.
* NEW: Indexes are now displayed on two or more columns.
* NEW: New login panel.
* NEW: New class list design in component pages.
* NEW: Full description in component pages.
* NEW: The old wiki cgi script project has been removed.
* NEW: Take '*.help' help files into account.
* NEW: Support for babelmark markdown syntax comparison.
* NEW: Automatically use the english page if the current page has not been
  translated.
* NEW: Automatically use the parent class if possible when a symbol page
  does not exist.

[FARM SERVER]
* NEW: A new little CGI script that implements a Gambas farm server. You
  need a SQL database server too.

[BENCHMARKS]
* BUG: Use the same data table in all version of the 'sort' benchmark.
* BUG: Call python2 explicitly.
* NEW: A new bubble sort benchmark.
* NEW: A script that runs all the benchmarks and prints the result as an
  HTML table.
* NEW: Update the 'benchmark.gbs' script.
* NEW: Do less in the polynomial benchmark, so that it runs about as long as
  the other benchmarks.

[EXAMPLES]
* BUG: MoviePlayer: Use an embedder as mplayer container. It's the only
  control that has its own X11 window in all toolkits.
* BUG: Fix the GNUBoxWorld icon.
* BUG: ReportExample works again.
* BUG: BeastScroll: Fix frame rate.
* NEW: Painting: Update the example.
* NEW: Delete examples.
* NEW: Put the old examples in '/trunk/app/examples'.
* NEW: Start porting SDL examples to gb.sdl2. They are not published to the
  farm server yet.
* NEW: Update BeastScroll example to SDL2.
* NEW: LCDLabel now uses gb.sdl2.audio.
* NEW: Change the version number on the Google map.

[INTERPRETER]
* BUG: Fix array accessor optimization on multi-dimensional native arrays.
* BUG: The internal UTF-8 string position cache now works in all cases.
* BUG: Add the gb.scanner component to the build list.
* BUG: Process: Don't check end of stream before calling the Read event. I
  don't remember what this test was supposed to fix, but for sure it leads
  to data loss if some data arrives just after the test.
* BUG: SHELL now correctly resets the interpreter to '/bin/sh' if the
  System.Shell property is reset to a null string.
* BUG: Process: Don't call the Read event if there is nothing to read.
* BUG: Retrieve the child process output correctly when it has terminated.
  No data should be lost anymore.
* BUG: Read data ahead before raising a Read event (on Process, File, or
  any stream). Use the result of that read to detect EOF, as using the
  stream end-of-file detection routine is not reliable.
* BUG: Don't remove the possible watch when freeing the file. The file may
  be closed, and the file descritor may have been reused!
* BUG: The process error output callback now immediately closes its file
  descriptor as soon as read() returns zero or an error, or if the Error
  event is not handled.
* BUG: 'Exec ... To' and 'Shell ... To' work correctly again.
* BUG: Do read ahead for any watched file descriptor. It may break when
  watching special device files, depending on its internal kernel driver
  behaviour. We'll see.
* BUG: Correctly flush the output of a terminated child process.
* BUG: Release standard i/o File objects before cleaning up the classes, to
  avoid an incorrect "circular reference" message.
* BUG: "create static" classes are now taken into account when using the
  _call() special method.
* BUG: Force the interpreter to link with the system thread library,
  whatever the global linker configuration is.
* NEW: Url$() is a new function to encode an URL.
* NEW: FromUrl$() is a new function to decode an URL.
* NEW: FromBase64$() is now a synonymous for UnBase64$().
* NEW: Support for the new USE instruction.
* NEW: New GB.AllocZero() API for allocating memory and filling it with
  zeros.
* NEW: Apply the "close on exec" flag to all non-temporary file descriptors
  opened by the interpreter.
* NEW: Remove the GB.UnrefKeep() interpreter API, as it is not used
  anymore.
* NEW: The process child errors raised before the exec() system call are
  now caught in a separate function called by the compiler explicitly
  after a SHELL or EXEC assignment.
* NEW: Remove an unused internal stream method.
* NEW: Split() has a new behaviour when its escape argument has two
  characters, the second one being the first splitting character. It uses
  the first character to escape splitting characters. For example,
  Split("a;b~;c;d",";","~;") returns ["a","b;c","d"].
* NEW: String[].Join() method handle the new Split syntax.
  ["a","b;c","d"].Join(";","~;") returns "a;b~;c;d". Moreover, in the
  traditional escape syntax, the joined string are not escaped anymore if
  they are void.
* NEW: The data format 'u' displays all milliseconds digits as soon as
  there is at least two 'u' characters, and not if there is exactly two
  'u' characters only.
* NEW: Allow WAIT to raise errors.
* NEW: Do not stop watching a file descriptor that is ready to read but has
  no data.
* NEW: Sleep up to 10 ms inside the watch file descriptor read callback if
  it is called too often.
* NEW: Support for the new '*.list' file format.
* NEW: Support for GNU/Hurd.
* NEW: The Task return value is now persistent (it is stored inside the
  Task object).
* NEW: Add end-of-line format constants to the interpreter API.
* OPT: Array accessors have been optimized. The 'sort' benchmark is now 25%
  faster.

[COMPILER]
* BUG: Dump boolean constants in *.info files the same way as the informer.
* BUG: Fix a badly initialized variable in syntax tree analyze, that could
  lead to spurious "Expression too complex" errors.
* NEW: The parser now assumes that an identifier is a subroutine taking
  some arguments only if it is followed by an open brace.
* NEW: A class header now can include USE "xxxx" declarations, where "xxxx"
  is a component name. It means that the specified component will be loaded
  when the class is initialized, the first time it is loaded.
* NEW: USE can be followed by a comma-separated list of component names.
  That way the syntax is the same as what was implemented in the gambas
  scripter 'gbs3'.
* NEW: SHELL and EXEC assignments now call an hidden subroutine just after
  the assignment to immediately check for a possible child error.
* NEW: New '*.list' file format that marks classes having static elements.
* NEW: A warning is emitted when a class having static elements is
  overriden by a declaration. This is suspicious.
* NEW: A symbol in a local variable declaration, or a global variable or
  property declaration can now be surrounded by braces to prevent a
  possible warning.
* NEW: A symbol followed by a point is never interpreted as a function if
  it is used as a function name in the current class.

[INFORMER]
* NEW: Support for information included from components written in Gambas.

[SCRIPTER]
* BUG: The '-f' option now creates a usable script.
* BUG: Be more intelligent when parsing arguments. Now all arguments after
  the first non option argument are sent to the script process.
* NEW: If the script crashes, a "Segmentation fault" message is printed.
  Not perfect, as the signal was not necessarily a segmentation fault...
* NEW: New argument '-u' that allow to force the given components to be loaded.
  It is useful in some case. For example:
    gbs3  -u 'gb.scanner' -e 'dim s as string:for each s in scanners:print
    s:next'
* NEW: Update the usage files.

[HELPER]
* NEW: A new 'gbh3' tool that extracts help comments from a gambas project.

[GB.DATA]
* BUG: Don't use forward typedefs as some compilers don't seem to
  understand them.
* BUG: Silence false positive compiler warnings.
* BUG: Trie: Use sufficient bit widths in numerical constants (could cause
  data loss on 32 bit systems).
* BUG: TriePrefix: Don't drop reference counts of the Trie when the prefix
  is not found.
* BUG: Trie: Fix a memory leak when an object is replaced.
* BUG: Graph: Add the Weight property to the edge interface.
* BUG: GraphMatrix.Add() does not add identical vertices multiple times
  anymore.
* BUG: GraphMatrix: Multiple simultaneous enumerations are possible now.
* NEW: Trie: New Add() and Remove() cosmetic methods.

[GB.DB]
* BUG: Try to retrieve the connection password only if the 'gb.desktop'
  component is loaded, and only display warning messages in that case.
* BUG: Don't crash at connection opening when no database name is
  specified.
* BUG: Fix a 'not enough arguments' error in Connections.Create().
* BUG: Connections: Fix a not enough argument error.
* BUG: Don't crash when trying to open a non-existing sqlite database with
  the 'sqlite' pseudo-driver.
* BUG: Fix a crash when using the Connection.Collation property on a not
  yet opened connection.
* BUG: The timeout is now really taken into account at database opening,
  and it is 20 seconds by default as wanted initially.
* BUG: Don't crash when opening a connection if the database driver is
  unknown or not specified.
* NEW: Add support for databases like PostgreSQL that are not fully case
  insensitive.
* NEW: The Connection class has now a part written in Gambas, and the C
  part has been put in a parent hidden class named '_Connection'.
* NEW: Connection.GetTemplate() is a new method that returns the
  description of the database as a string template.
* NEW: Connection.ApplyTemplate() is a new method that takes the previous
  template to initialize the structure of the database. If a table included
  in the description already exists, it is silently ignored.
* NEW: Connections.Create() is a new static method that creates a specific
  database from a named connection and its template as saved by the IDE
  in the current project.
* NEW: More detailed error message for SQLite connections.
* NEW: Add a Connections.Count property that returns the number of
  connections defined in the current project / executable.

[GB.DB.FORM]
* BUG: Setting DataView.Editable property to FALSE and then to TRUE works
  correctly now.
* NEW: The DataSource BeforeSave event can be stopped. That cancels the
  current record save then.

[GB.DB.MYSQL]
* BUG: Try to reconnect to a lost database server when listing existing
  databases and the fields of a table.
* OPT: Cache metadata queries during 30 seconds to speed up things.

[GB.DB.POSTGRESQL]
* BUG: Automatically convert field names to lowercase when creating a
  table.
* BUG: Quote field names when creating a table, even if they are converted
  to lower cases.

[GB.DB.SQLITE2]
* NEW: Mark the component as deprecated.

[GB.DB.SQLITE3]
* BUG: Support for common table expressions ("WITH ... SELECT ..." SQL
  expressions) that appeared in 3.8.3 version.
* BUG: Remove an unused function.
* BUG: Support for PRAGMA requests. Start cleaning up the horrible C++
  classes.
* BUG: Use the official standard quoting character.
* NEW: More detailed error message for SQLite connections.

[GB.DESKTOP]
* BUG: Patch 'xdg-open' so that 'kde-open' uses its '-noninteracitve' flag.
  That way, the return value seems to be accurate in case of failure.
* BUG: Desktop.NetworkAvailable now tries to find 'ifconfig' or 'ip' in
  '/sbin' and '/usr/sbin' before relying on the PATH environment variable.
* BUG: DesktopWindow X, Y, Width and Height properties return the window
  geometry without the frame.
* BUG: Desktop.Passwords.Enabled works correctly now on Gnome-like systems.
* BUG: Fix compilation warnings.
* BUG: Change the Mime loading code so it does not fail on the first read
  glob2 file and checks all the available files.
* NEW: DesktopFile.MimeTypes is a new property corresponding to the
  'MimeType' entry of the '*.desktop' file.
* NEW: DesktopFile now can be used for creating or modifying '*.desktop'
  files.
* NEW: DesktopFile.Categories is a new property to read or set the
  categories of a desktop menu entry.
* NEW: DesktopFile: GenericName and Comment are two new properties
  corresponding to the *.desktop file fields.
* NEW: DesktopWindow.Geometry is a new property that returns the geometry
  of the window inside as a rectangle.
* NEW: DesktopWindow.Frame is a new property that returns the geometry
  of the window outside (with the frame) as a rectangle.
* NEW: DesktopWindow.GetScreenshot() is a new method that returns a
  screenshot of a window, with or without the frame.
* NEW: Support for the 'secret-tool' utility. If it is installed on the
  system, it is used instead of the 'gb.desktop.gnome.keyring' component.
* NEW: More detailed error message when the mime database cannot be read.
* NEW: Desktop.GetDesktopDirectory() is a new method that returns the
  specific desktop directory specified in its argument, that can be one of
  the following values: "DESKTOP", "DOCUMENTS", "DOWNLOAD", "MUSIC",
  "PICTURES", "TEMPLATES", "VIDEOS".

[GB.DESKTOP.GNOME.KEYRING]
* BUG: Retrieving a password now returns NULL if no password is stored in
  the keyring, instead of raising an error.
* NEW: More explicit error messages.
* NEW: Storing a NULL password now removes the password from the keyring
  instead of storing a void password.

[GB.DRAW]
* BUG: Raise an error if an immediate Paint drawing routine
  (Paint.DrawImage, Paint.DrawText...) is called while there is a current
  path, because this is not supported by gb.gtk.
* BUG: Using Paint.Begin() on an already painted device automatically calls
  Paint.Save(), and Paint.Restore() will be called with Paint.End().
* BUG: The PathExtents.Merge() method does not crash anymore.
* NEW: Paint.Begin() now takes a new optional argument that allows to
  define the painting area as a sub-rectangle of the painting device.

[GB.EVAL]
* BUG: Fix a badly initialized variable in syntax tree analyze, that could
  lead to spurious "Expression too complex" errors.
* NEW: Lines beginning with '#!' are highlighted like comments. It's the
  'shebang' of Gambas scripts.
* NEW: The parser now assumes that an identifier is a subroutine taking
  some arguments only if it is followed by an open brace.

[GB.EVAL.HIGHLIGHT]
* BUG: The '.startup' file must not be versioned.

[GB.FORM]
* BUG: DirChooser: Correctly update the toolbar according to the file view
  visibility.
* BUG: Setting Spinner.Enabled to FALSE correctly stops the animation now.
* BUG: SwitchButton: Use a "disable" look for ON and OFF state when the
  Enabled property is FALSE.
* BUG: Don't use Style.FontOf(), it has been removed.
* BUG: ValueBox: The Value property is not visible to the IDE anymore.
* BUG: ValueBox.Text can understand a void string for all ValueBox types
  now.
* BUG: ImageView: Setting the Image property to NULL correctly resets the
  control.
* BUG: FileProperties: Fix the media preview.
* BUG: FileChooser.Bookmarks and DirChooser.Bookmarks properties now have
  the 'Collection[]' datatype.
* BUG: FileChooser & DirChooser: The 'desktop' bookmark works correctly
  now.
* BUG: Remove a WAIT inside the Balloon.Hide method.
* BUG: The ToolPanel buttons now takes Style.FrameWidth into account.
* BUG: IconPanel: The mouse wheel cannot select hidden tabs anymore.
* BUG: Wizard: Remove default padding for wizards having a border.
* BUG: TabPanel[].Closable works as expected now.
* BUG: FileView: When setting the Current property, the current item is
  made visible later.
* BUG: ButtonBox.FilterNow always raises the Filter event now.
* BUG: FileView: Fix a possible crash when the current item disappears
  before begin made visible.
* BUG: MenuButton: Draw the focus state correctly.
* BUG: MaskBox: Setting the Mask property now clears the text only if it
  does not match the new mask. That allows the IDE to define the initial
  value of the Text property.
* NEW: Add a copy menu entry to the FileChooser and DirChooser controls.
* NEW: New stock icon named "download".
* NEW: ListEditor is a new control that allows to edit the contents of a
  ListBox control.
* NEW: Update German translation.
* NEW: Completion is a new class to implement automatic completion on an
  already existing TextBox.
* NEW: DirChooser & FileChooser: The popup menu is available when clicking
  on the bookmark button representing the top-level directory.
* NEW: DirChooser & FileChooser: The root button now goes to the current
  root when bookmarks are hidden.
* NEW: FileProperties: Preview of audio files, provided that the gb.media
  component has been loaded.
* NEW: New 'muted' stock icon.
* NEW: DocumentView is a new widget that allows to display documents such
  as pdf, printing previews, pictures... and so on. It allows zooming, and
  will have differents options for arranging the pages. Each page can have
  it's own size and orientation property.
* NEW: The SliderBox is now in the same change group as Slider.
* NEW: SwitchButton: Handle the keyboard and take the focus into account.
* NEW: MenuButton displays a focus rectangle now.
* NEW: URLLabel is a new control that displays a clickable URL. If the
 'gb.desktop' component is loaded, then a browser is automatically opened
  when clicking on the link.
* NEW: Wizard.ActionText and Wizard.ActionPicture are two new properties to
  define the contents of the final 'OK' wizard button.
* NEW: DirChooser & FileChooser: Draw a little arrow instead of a big arrow
  in the top directory box.
* NEW: ButtonBox: ClearButton is a new property that enabled a clear button
  besides the standard ButtonBox button. The 'Clear' event is raised when
  the clear button is clicked.
* NEW: Format files sizes with two decimals.
* NEW: Wizard.Animated is a new property that animates the wizard when
  going to the next or previous step.
* NEW: IconPanel tabs can be individually hidden, by using their Visible
  property.
* NEW: Three new stock icons: "development", "multimedia" & "office".
* NEW: Wizard.ShowButton is a new property that allows to hide the wizard
  buttons.
* NEW: ButtonBox.Filter is a new property to make it act like a filter box.
  The new Filter event is raised when filtering must be triggered.
* NEW: ButtonBox.FilterMenu is a new property that allows to define the
  popup menu associated with the filter icon.
* NEW: ColorPalette is a new control that allows to select a color among a
  predefined list of colors.
* NEW: TabPanel[].Closable is a new property that defines if a specific tab
  has a close button.
* NEW: ColorPalette.ReadOnly is a new property to prevent the palette
  contents to be modified.
* NEW: ColorPalette.AddFirst() is a new method that adds a color to the
  beginning of the palette.
* NEW: ColorPalette now has a popup menu to remove or sort colors.
* NEW: ColorPalette.Index is a new property to define or get the index of
  the current color. The current color is drawn with a big black border.
* NEW: ColorPalette.Current is a new property to define or set the current
  color.
* NEW: ColorChooser now uses a ColorPalette.
* NEW: Redraw some control icons.
* NEW: FileCompletion is a new class that implements automatic file name
  completion.
* NEW: MessageView is a new control that implements an embedded
  notification panel that is automatically hidden and shown if there is a
  message to display.
* NEW: ColorPalette.Exist() is a new method that returns if a specific
  color exists in the palette.
* NEW: Completion.Icons is a new property that allows to associate an icon
  to each completion item.
* NEW: ValueBox now raises a Change event when its content changes.
* NEW: MaskBox: The Clear() method now takes the focus into account.

[GB.FORM.MDI]
* NEW: Workspace.Picture property has been replaced by a Workspace.Image
  property that takes an Image instead of a Picture. The Workspace.Picture
  property has been deprecated.
* NEW: Workspace: Try to minimize flickering during resizing. Not very
  successful.
* NEW: Support for "huge" toolbar icons.

[GB.FORM.STOCK]
* BUG: Fix 'development.svg' that had unknown SVG urls, and consequently
  the "Could not resolve property" warnings displayed by the IDE now are
  gone.
* NEW: New default icons for "download" stock icon.
* NEW: New 'muted' stock icon.
* NEW: New stock icons.

[GB.GEOM]
* BUG: RectF: Fix the implementation of several methods and properties.

[GB.GTK]
* BUG: Correctly interpret "&#xxx;" HTML entities in rich text.
* BUG: Start fixing drag and drop.
* BUG: Clipboard.Copy() now works for all text formats.
* BUG: Use GtkSelectionData accessor function.
* BUG: Ensure that the Embedder background is painted.
* BUG: TextBox: Postpone the Change event so that replacing the selection
  raises a unique Change event.
* BUG: Ensure that Clipboard.Paste() behaves the same as in gb.qt4.
* BUG: Fix get_style function() to use GType and not integer. Fix crash
  issue with X Win in CygWin.
* BUG: Fix an uninitialized variable.
* BUG: Fix warning with Slider or SpinBox when setting a minimum value
  equal to the maximum value, or the contrary.
* BUG: Menus opened through the PopupMenu property work correctly now.
* BUG: Implement the Invert property in vertical containers.
* BUG: Redesign the keyboard event management so that it works with all
  input methods.
* BUG: Fix a possible GTK+ warning when drawing widget borders.
* BUG: Do not crash when a piece of rich text contains the "</>" string.
* BUG: Fix arrangement of ScrollView control.
* BUG: Fix crash when using read-only ComboBox.
* BUG: Closing a window now should not lose FocusOut events anymore.
* NEW: Link to the pthread library explicitly.
* NEW: WAIT inside a keybord handler now prints a warning message and does
  nothing, only if a duration is specified.
* NEW: PictureBox.Padding is a new property that defines the inner padding
  around the displayed picture.
* NEW: If the GB_X11_INIT_THREADS environment variable is defined to a non-
  null integer number, the X11 client library is initialized to support
  multithreaded applications.
* NEW: Now Frame can be replaced by any Panel-like containers in the IDE.
* NEW: Window.TakeFocus is a new property that indicates if the window will
  take the focus the first time it is mapped.

[GB.GTK3]
* BUG: Correctly interpret "&#xxx;" HTML entities in rich text.
* BUG: Start fixing drag and drop.
* BUG: Remove two symbolic links on source files that do not exist anymore.
* BUG: Clipboard.Copy() now works for all text formats.
* BUG: Use GtkSelectionData accessor function.
* BUG: Ensure that Clipboard.Paste() behaves the same as in gb.qt4.
* BUG: Correct get_style function to use GType and not integer.
       Resolves issue with X Win crash in cygwin
* BUG: Fix an uninitialized variable.
* BUG: Fix warning with Slider or SpinBox when setting a minimum value
  equal to the maximum value, or the contrary.
* BUG: Paint.Reset() now works as expected on non-cached DrawingArea.
* BUG: Menu opened through the PopupMenu property work correctly now.
* BUG: Implement the Invert property in vertical containers.
* BUG: Redesign the keyboard event management so that it works with all
  input methods.
* BUG: Fix a possible GTK+ warning when drawing widget borders.
* BUG: Do not crash when a piece of rich text contains the "</>" string.
* BUG: Fix arrangement of ScrollView control.
* BUG: Fix crash when using read-only ComboBox.
* BUG: TextArea now has a minimum size, as GTK+3 crashes when they are too
  small.
* BUG: Correctly handle widget grabs, i.e. popups, modal dialogs...
* BUG: Read-only combo-boxes do not prevent windows to shrink vertically.
* BUG: SpinBox does not expand horizontally up to the right border of its
  parent anymore.
* BUG: SpinBox: Use a larger minimum width.
* NEW: Link to the pthread library explicitly.
* NEW: WAIT inside a keybord handler now prints a warning message and does
  nothing, only if a duration is specified.
* NEW: PictureBox.Padding is a new property that defines the inner padding
  around the displayed picture.
* NEW: If the GB_X11_INIT_THREADS environment variable is defined to a non-
  null integer number, the X11 client library is initialized to support
  multithreaded applications.
* NEW: Window.TakeFocus is a new property that indicates if the window will
  take the focus the first time it is mapped.
* NEW: ComboBox height can be smaller now.

[GB.GUI.BASE]
* BUG: TreeView renaming works now if the renamed item is not visible.
* BUG: IconView item renaming does not crash anymore.
* BUG: ProgressBar now raises native control events.
* BUG: GridView.Select() with one argument now only selects one row, as
  stated by the documentation.
* BUG: GridView: Remove "Collapse" from the property list.
* BUG: GridView default row height now correctly follows font changes.
* BUG: ListBox row height and column width now correctly follow font
  changes.
* BUG: ListBox now correctly maintains its selection when items are removed
  or added.
* NEW: ProgressBar now has a flat look. And a new Border property that
  allows to hide the border.
* NEW: GridView: The background of the sorted column is now lighter.
* NEW: The Border class is now creatable, and has a lot of new properties.
  It allows to draw complex borders anywhere.
* NEW: Border.Paint() draws a border object according to the value of its
  properties: Style, Width, Radius, Color...
* NEW: Border has margin properties now.
* NEW: Border.Clip() is a new method to clip to the border inside.
* NEW: The Border constructor can take an optional style argument. That
  style follows a CSS-like syntax.
* NEW: Border.Copy() is a new method that returns a copy of a Border
  object.
* NEW: GridView: cells now have a Border property. If it points at a Border
  object, that border will be drawn in the cell.
* NEW: Border: Properties for diagonal strikes.
* NEW: Border: The Paint and Clip methods now take neighbourg borders as
  optional arguments. When a neighbourg is specified, their opposite
  margins are collapsed.
* NEW: GridView.Rows[].Border is a new property to define the border of an
  entire row.
* NEW: GridView.Rows.Border is a new property to define the default row
  border.
* NEW: Border.GetRect() is a new method that returns the available border
  inside as an integer rectangle.
* NEW: Border(...) now create a new Border object, like the constructor.
* NEW: Border.IsVoid() returns if the Border object will actually draw a
  border. The slash and backslash strokes are not taken into account.
* NEW: The GridView automatic column resizing now uses Application.Busy and
  cannot run longer than five seconds.
* NEW: ScrollArea.UseMouse is a new property. When set to FALSE, the
  mouse wheel will not automatically scroll the ScrollArea contents.
* NEW: ScrollArea now raises a Font event when its font has changed.
* NEW: ScrollArea shadows are smaller now.
* NEW: ListBox.Remove() now takes a new optional Length argument.

[GB.JIT]
* BUG: IIf generated incorrect code for the types CSTRING and STRING.
* BUG: Ensure that llvm version is between 3.1 and 3.5, as llvm 3.6 JIT has
  been replaced by a new one that is not compatible.

[GB.LOGGING]
* BUG: Added missing EXPORT.
* NEW: Use handlers so that each logger can output to multiple
  locations, and several loggers can share a handler.
* OPT: Allow anonymous ussage of the Logger class.
* OPT: Make it backwards compatible with the previous implementation of
  gb.logging.

[GB.MAP]
* BUG: Now the proj class takes and returns MapPoints convertion the right
  way.
* BUG: The WMS is really working now and _maptile layer is now able to tile
  and cache a BBoxed wms rendered map.
* NEW: An external httpserver can be instanciate to load layer maps. This
  is useful when the server queries a specific way to access to wms
  permissions.
* NEW: New property ClearCache(Optional Days) that removes files from cache
  according to the distance time in day. Or all files if they're is no days
  given as arguments.
* NEW: Upgrade the gb.map status to Not Terminated but stable.

[GB.MARKDOWN]
* BUG: Remove the useless Markdown.Root property.
* BUG: Don't forget to close the last paragraph.
* BUG: The list syntax works correctly again.
* BUG: <hr> are now only generated from lines including only '*' or '-'. No
  space is allowed anymore.
* BUG: Fix replacement of lines of dashes by '<hr/>' markup.
* NEW: Close the mismatched markup before displaying the error.
* NEW: Support for "standard" markdown ordered list syntax.

[GB.MEDIA]
* BUG: MediaPipeline.Pause() does nothing if the media is not playing. That
  avoid some GStreamer bad behaviour.

[GB.MEDIA.FORM]
* BUG: MediaView: The Control property has been renamed as ShowControl.
* BUG: MediaView: Do pause or stop the media file only if it has sense.
* BUG: MediaView: Don't crash if the internal media player is not yet
  initialized.
* NEW: MediaView: New methods: Play, Pause, Stop.
* NEW: MediaView: The URL property can receive a true URL or a file path.
  The conversion is automatically done.
* NEW: MediaView: Hide the video part if the control height is too low.

[GB.MEMCACHED]
* BUG: Fix a typo in a Memcached constant name.
* BUG: Fix compilation of the component.

[GB.MIME]
* BUG: MimePart.Data does not crash anymore if the mime part is void.
* BUG: MimePart.ContentType is actually a read-write property.

[GB.NET]
* BUG: Fix a function declaration.
* BUG: Fix the DnsClient properties description: it is synchronous by
  default.
* BUG: Fix SerialPort.DTR property.
* NEW: Support for GNU/Hurd.

[GB.NET.CURL]
* BUG: Found a workaround for having accurate upload progress data.
* BUG: HttpClient: Internal header array is now correctly managed.
* BUG: Rename CURL_CopyFrom function to CURL_copy_from as defined in
  CCurl.h and used in CHttpClient.c. Enables compilation on Cygwin.
* NEW: Add a Gambas part to the component.
* NEW: HttpForm is a new class that inherits HttpClient and that allows to
  post HTML forms easily.
* NEW: HttpClient and FtpClient now raise a 'Cancel' event when their
  Stop() method is called.
* NEW: HttpClient.CopyFrom() is a new method that allows to fill an
  HttpClient object with the configuration of another HttpClient object.
* NEW: HttpClient: Add a TargetFile property that allows to override the
  corresponding argument in Get(), Put() and Post() methods.

[GB.NET.SMTP]
* BUG: SmtpClient: Correctly detect when connection fails in SSL or TLS
  mode. Raise an error instead of eating the CPU in an infinite loop.
* NEW: Add a Content-Disposition header to attachments.

[GB.OPENSSL]
* BUG: Cipher: Fix memory leaks from returning strings.
* BUG: Cipher[...].Encrypt() now passes the three mandatory arguments when
  creating a CipherText.
* BUG: Fix memory errors from Cipher.List and Digest.List
* NEW: Return Cipher.List and Digest.List sorted without duplicates

[GB.PCRE]
* BUG: RegExp.Replace() now replaces once if the pattern starts with "^".
* BUG: MATCH operator: A void string now only matches a void string.

[GB.PDF]
* BUG: Check for the availabilty of private poppler headers.

[GB.QT4]
* BUG: Application.PreviousControl returns the expected value now.
* BUG: Sometimes assigning Paint.Font has no effect. Workaround that
  strange Qt bug.
* BUG: Fix Clipboard.Paste() when there are both a text and a qt image in
  the clipboard.
* BUG: The Menu.Checked property now returns the correct value for
  non-radio menu items.
* BUG: TextBox: Workaround a Qt4 weird behaviour that sometimes lose the
  selection. Same workaround for editable ComboBox.
* BUG: ScrollView layout algorithm now takes the margin into account
  correctly.
* BUG: Don't crash when a modal dialog is destroyed while visible.
* BUG: Close the main window explicitly during the QUIT instruction.
* BUG: Message boxes now use the current modal dialog as parent if there is
  no active window.
* BUG: Do not use 'QEventLoop::DeferredDeletion' anymore, it is deprecated.
  Use qApp->sendPostedEvents() instead.
* BUG: ScrollView: Layout is now correct if the ScrollBar property is set
  to Scroll.None.
* BUG: Don't fill the menu bar background. Let it be transparent.
* BUG: Implement the Invert property in vertical containers.
* BUG: Do delete open windows later when the event loop is finished.
  This is supported by QT, provided that you explicitly ask him to send the
  deferred deletion events.
* BUG: Paint.Dash now understands zero widths like gb.gtk.
* BUG: Fix compilation with Qt <= 4.6.
* BUG: Simplify the clipping management, because the old one was based on
  the QPainterPath::intersected() Qt method that is buggy. Clipping mixed
  with world transform matrix has still to be checked.
* BUG: Fix Border properties description.
* BUG: Setting the Border property now correctly refreshes the viewport
  size.
* BUG: Newlines characters are not ignored anymore in message boxes when
  rich text is used. The behaviour is now the same as in gb.gtk.
* NEW: Link to the pthread library explicitly.
* NEW: PictureBox.Padding is a new property that defines the inner padding
  around the displayed picture.
* NEW: If the GB_X11_INIT_THREADS environment variable is defined to a non-
  null integer number, the X11 client library is initialized to support
  multithreaded applications.
* NEW: WAIT inside a keybord handler now prints a warning message and does
  nothing, only if a duration is specified.
* NEW: A newly created control becomes visible the first time it is resized
  now, and not immediately. The goal is having almost the same behaviour as
  gb.gtk, even if it not 100% backward-compatible in a few cases.
* NEW: Now Frame can be replaced by any Panel-like containers in the IDE.
* NEW: When creating a Control, a Printer or displaying a MessageBox, check
  that the GUI has been initialized, and raise an error if not, instead of
  letting Qt abort the application.
* NEW: Window.TakeFocus is a new property that indicates if the window will
  take the focus the first time it is mapped.

[GB.QT4.EXT]
* BUG: Editor: Don't draw line numbers if the margin is hidden.
* BUG: Changing the Editor.KeywordsUseUpperCase property does not break
  syntax highlighting anymore.
* NEW: Editor.Font property now can take any font in the IDE.
* NEW: Editor.EndOfLine is a new property that defines which end-of-line
  format (gb.Unix, gb.Windows or gb.Mac) is used when retrieving text from
  the control.
* NEW: Editor: When setting the Text property, the end-of-line format is
  automatically guessed.

[GB.QT4.WEBKIT]
* BUG: WebView: Don't raise the Error event if the webview has been
  explicitly stopped by the Stop() method.
* NEW: WebView.History is a new virtual access to get the number of entries
  in the history, to set or get the current history entry index, and to get
  or set the history maximum capacity.

[GB.REPORT]
* BUG: Now you can choose a non existing file in the openbox for saving as
  pdf.
* BUG: The parsing of options now works as expected.
* BUG: Now if an element is the first listed after fixed ones and if its
  height is greater than the remaining space, its height is set to the
  remaining space and the content is clipped. So there is no more problem
  of infinite loop.
* BUG: ReportImage now takes care of strech mode for computing the needed
  size.
* BUG: The ReporView now shows all the report pages.
* BUG: Fix some errors on layout page count.
* NEW: The default autoresize size of an image is based on a standard
  resolution of 96 dpi.
* NEW: Mark component as deprecated.

[GB.REPORT2]
* NEW: This is a new reporting component that is similar (and better) than
  gb.report, but that is not fully backward compatible. Hence the new
  version. It uses the new DocumentView control for implementing the
  automatic preview of the report.

[GB.SCANNER]
* NEW: New component that provide classes to manage scanners devices via
  gambas code. It is a frontend to the 'scanimage' binary provided by the
  SANE toolkit.

[GB.SDL2]
* NEW: This is a new component that similar to gb.sdl, but that uses the
  SDL2 library instead.

[GB.SDL2.AUDIO]
* NEW: The audio part of the SDL2 component. It's the old gb.sdl.sound
  without the CD-Rom support, but with a few more features planned.
* NEW: Now Channel is creatable, and returns the first available channel
  that has never been used.
* NEW: Channel now raises the Finish event when it has finished to play its
  sound.
* NEW: Channel.Index is a new property that returns its channel number.
* NEW: Channel.Distance is a new property that defines the channel
  distance, between 0 (near) and 255 (far).
* NEW: Channel.Angle is a new property that defines the channel direction,
  0° being the front, 90° the right, 180° behind and 270° the left.
* NEW: Channel.Reverse is a new boolean property that reverses the channel
  stereo.
* NEW: Music.SoundFontPath is a new property to tell SDL the directories
  where the MIDI sound font files are stored.

[GB.SETTINGS]
* BUG: Settings.Clear() now really clears the entire settings.
* BUG: Erasing a settings is correctly saved in all cases now.
* BUG: Fix settings saving routine.
* BUG: Settings.Clear() now works correctly.
* BUG: Settings.Keys does not return a key slot if it is void.
* OPT: Settings.Save() now does not save all the keys anymore, but only the
  modified one. That allows several programs running simultaneously to
  share the same settings file.

[GB.UTIL]
* NEW: New interpreter utility routines component.
* NEW: Date.ToUnixTime() and Date.FromUnixTime() are two new methods to
  convert between Date and Unix timestamp.
* NEW: File.FormatSize() formats a file size in bytes, KiB (1000 bytes),
  MiB (1 000 000 bytes), and GiB (10^9 bytes).
* NEW: Date.EasterDay returns the Easter day of a specific year greater
  than 1583.

[GB.UTIL.WEB]
* NEW: A new component that provides useful routines for web applications.
  They were located in gb.web before.

[GB.V4L]
* BUG: Fix typo in error messages.

[GB.WEB]
* NEW: The default response content type is now HTML with UTF-8 charset.
* NEW: 'gb.util.web' is now automatically loaded, to provide
  backward-compatibility with Gambas 3.6 applications using 'gb.web'.

[GB.XML]
* BUG: Parsing errors are now correctly thrown.
* BUG: Fixed some memory leaks when an error is raised.

Compilation and installation

Read the instructions there.

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

Enjoy it !

See also