doc • release • 3.12.0

Gambas 3.12.0

What's new?

The main feature of this release is the new Just-In-Time compiler, that replaces the old one based on a deprecated version of LLVM. This new JIT compiler translates the Gambas bytecode into C code at runtime, and uses the gcc or clang compiler to translate the C code into shared libraries.

The other important features are the following:

  • Local variables can now be declared anywhere in the function body.

  • FOR and FOR EACH syntax now can declare their loop variables.

  • String can now be accessed with the array syntax.

  • String searching is a lot faster for common cases.

  • The ScrollView, PictureBox and SpinBox controls are now implemented in Gambas.

  • Scrolling of scrollable controls is now smoothly animated.

  • Control animations and shadows can now be globally disabled.

  • FreeBSD and other BSD variants should now have no problem to compile Gambas.

  • The PowerPC64 and ARM64 architecture are now supported.

Compilation and installation

Read the instructions there.

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

Enjoy it !

Changelog

CONFIGURATION

  • Check if the "-flto" link time optimization flag is available.

  • Add a flag for enabling link time optimization, and disable it by default.

  • Add .jit directory to .gitignore.

  • Only use pkg-config to detect sqlite3.

  • Compilation with clang is possible.

  • Disable the old jit component, but keep the sources.

  • Fix test of -std=c++11 compilation flag.

  • If a component source directory includes more than one component, and if one of these components is disabled, the other keep being enabled.

  • Move some macro calls to fix autoconf warnings.

  • Now configure should fail only if a component is actually disabled, not just because a library search fails.

  • Install appdata files in appdata or metainfo according to which directory exists.

  • The top-level AUTHORS file now contains the list of all Gambas authors.

  • Remove the date from the copyright message defined in gb_common.h

  • Correctly detect PowerPC64 systems.

  • Optionally link to libnotify on non-Linux systems.

  • Update version to 3.12.0.

DEVELOPMENT ENVIRONMENT

Automatic completion

  • Don't crash when completing an unreadable directory.

  • Enable the inner web browser later, to workaround a QtWebKit bug that triggers spurious mouse events.

Code editor

  • Fix message labels when animations are enabled.

  • Pressing F2 on a project class name now opens its source file.

  • F2 key (find definition) works again on labels.

  • Fix spurious scrolling of procedure list.

  • "Run this class" now uses ALT+F5 shortcut, and not SHIFT+F5 that was already used.

  • Pretty printer now takes local variable declared anywhere into account.

Color chooser dialog

  • Keep the last opened tab when the dialog is used for inserting a color.

Connection editor

  • Remove the yellow background on a checkbox.

  • Store the sqlite connection paths relative to the project folder, or the user home directory, if possible.

Create project dialog

  • Correctly take the default tab size into account when creating a new project.

Debug panel

  • Do not display the "Current object" group in the variable panel if the current object has no variables.

  • Update the design of debug windows.

  • Take the language direction into account when displaying the debug panel close button.

  • Correctly refresh the debug panel contents when fonts are changed in the option dialog.

Debugger

  • Watching an expression by selecting it on the editor does not crash anymore.

  • Do not force debugging windows foreground color to black.

Form editor

  • Use text colors and not tooltip colors for information panel. Tooltip colors are sometimes unreadable.

  • Move the information tooltip to the top when the mouse cursor enters it, and move it back to the bottom if it enters it again.

  • Always read SpinBox Min, Max and Value properties.

  • Do not apply the Enabled property when the control is drawn with a DrawingArea.

  • Take the language direction into account when displaying the form editor tooltip.

Help browser

  • Fix the offline help of special methods.

  • Fix the stylesheet of the offline documentation.

  • Make the documentation on gui components work if gb.qt4 is not installed on the system. At least one GUI component must be present.

  • Use gb.gui.* components instead of gb.qt4.* components when loading the documentation related to a feature needed by the currently loading component.

Image editor

  • Use text colors and not tooltip colors for information panel.

  • Move the information tooltip to the top when the mouse cursor enters it, and move it back to the bottom if it enters it again.

  • Add steps to image effects sliders.

  • Fix view to image coordinates conversion.

  • Remove a debugging message.

  • The property sheet is now disabled when the editor is read-only.

  • correctly refresh paste selection frame.

  • The color palette is correctly updated when a color is selected in the property panel.

  • Take the language direction into account when displaying the image editor tooltip.

  • Support for automatic PNG file compression with pngquant.

Main window

  • Fix an english mistake in a menu entry.

  • Rewrite the global position history to fix it.

  • Use the menu icon for the hide menu bar action.

Menu editor

  • Don't reserve space for top-level menu icons, as they don't have any icon.

  • Always check the menu structure before saving it.

  • Add a button for inserting a separator.

  • Insert new menu after by default now.

Open project dialog

  • Always select the project filter text.

Option dialog

  • The highlighting color panel now takes the editor font size into account.

  • Add an option to enable control animations. Move the toolbar size option to the Fonts panel.

  • Support for the new dotted highlighting style.

  • Add an option to toggle shadows.

  • Some minor layout changes.

  • Configuration for help browser fonts.

  • Add a project option to enable or disable the use of pngquant, if it is available.

  • Add an option for setting the debugger font relative size.

  • Add Mate terminal to the list of external terminals.

  • Use the new DonwloadManager class to handle offline documentation download.

  • Add an option to set if strings must be automatically closed in text or code editors.

  • Add an option to close the tabs with the middle mouse button instead of using little close buttons.

  • Add an option to tell if we want the debugging panel to be displayed automatically when the debugger starts or when something is printed on the console.

Profiler window

  • Use JIT when loading a profile dump file.

Project properties dialog

  • Add icons to the left panel.

  • Add information about the status of the repository in the version control tab.

  • Some fixes in argument editor.

Project tree

  • CTRL + double-click is now triggered only on source files.

Search dialog & panel

  • New option to search data files only.

  • A word now includes the "$" character.

  • The option to highlight the search string is back. It takes "ignore case" and "word-only" options into account.

  • Compressing or uncompressing a file now correctly refreshes the search list.

  • Search result is highlighted now.

  • Activate the horizontal scrollbar of the search result grid.

Software farm

  • The "Show old versions" checkbox is now correctly taken into account when showing softwares. An old version will not be hidden if it is actually installed.

  • Display the upload age of each software.

  • Check that the sha256sum program is installed before computing a download checksum.

  • Don't crash when installing an example if its symbolic link already exists.

Syntax highlighting

  • Make the Gambas theme's selection background color darker.

  • Make the Gambas themes's highlight color a bit darker.

  • Update highlighting themes.

  • Define colors for the new color constants.

System information dialog

  • FreeBSD systems memory may be greater than 2GB.

Text editor

  • The compression message is now displayed with a balloon.

  • The paste button is now a ToolButton as it should be.

  • Javascript compression does not break return xxx; expressions anymore.

Translation dialog

  • Add menu entries for copying string to the clipboard.

  • Fix a msgfmt error that was displayed when the current language has not been yet translated.

Translations

  • Update French translation.

  • Complete German translation.

Welcome dialog

  • Add a bit of snow and some firs for between Christmas and the Feast of the Circumcision.

Version control

  • Git status interpretation now finds more modified files.

  • Fix how moves are handled by Git version control.

  • Fix file rename or move for Git version control.

  • Pushing to Git repository was crashing in some cases.

Miscellaneous

  • Don't crash when opening a Gambas source file as an external file.

  • Install AppStream in non-legacy metainfo directory.

  • Make the AppStream XML adhere to the standard.

  • Renaming an exported class in projects using non-GUI forms should not crash anymore.

  • Update Gambas fonts.

  • Update support text file.

  • Remove the authors.txt file and use a symbolic link on the toplevel AUTHORS files instead.

  • Fix the license flag spelling.

  • Add new "illusion" background.

  • Take new compiler message prefix into account.

  • Update error messages.

WIKI

  • Update wiki design.

  • Change automatic index presentation.

  • Add an index to the TODO page.

INTERPRETER

  • Support for the new JIT compiler.

  • Remove the old JIT stuff.

  • Reading a fixed number of bytes with READ does not crash anymore if an "End of file" error is raised.

  • t and tt date format now return the correct timezone.

  • Make comparison operator true functions so that they can be called by the JIT code.

  • The common static character buffer is now twice the size of the maximum symbol length, to avoid possible overflows.

  • Calls gb.jit at runtime if needed. If a fast function has no jit implementation, the bytecode version is used.

  • Strings whose length is greater than 256 now have a growth step of 256 bytes instead of 16.

  • Don't display JIT debugging message unless GB_JIT_DEBUG is set to something different from zero.

  • String routines are now compiled with -O3.

  • String searching (Instr, RInstr and Replace) has been made about 4x faster by searching the first occurence with memchr() and memrchr().

  • Fix off-by-one error in FILE_mode_from_string which couldn't read mode bits s and t

  • The NEW implementation routine takes its opcode as argument now, like other subroutines with a variable number of arguments.

  • Fix some bugs detected by clang.

  • Add a flag in Gambas functions to know if they are static or not.

  • Support for the UNSAFE keyword.

  • Take JIT code into account when displaying current position in DEBUG instruction.

  • Jit is a new static class that allows to deal with the JIT compiler.

  • Jit.Time is a new property that returns the time spent in JIT compilation, in seconds.

  • Abort if a stack mismatch is detected after a JIT function has been called.

  • The interpreter does not crash anymore when using standard streams at the end of the program whereas they have been already freed.

  • Fix thousands separator.

  • Format$ now prints the expected number of decimal digits when using exponential format.

  • Fix panic error message.

  • Val() correctly reads thousand separators again.

  • Add a -j option to the interpreter that disable the JIT compiler.

  • Fix an internal common string routine used by thousand separator management.

  • Raise a type mismatch error when converting a function to a variant. Don't panic anymore.

  • When creating a new class, set its component immediately if we know the archive it comes from.

  • Creating a NULL value now clears the object address field so that it can be freely interpreted as a Object value with a null address by the JIT compiled code.

  • If an unknown symbol is called through a parent class reference, the _unknown() method is not called and an error is raised if the unknown symbol exists in the actual child class.

  • Eof() now correctly works on file bigger than 4GB opened in direct mode.

  • The exp10() function works on all BSDs now.

  • Convert from statfs to more portable statvfs.

  • Get rid of a macro trick in gbx_eval.h header.

  • Write the name of optional libraries in the displayed warning message when not found.

  • String.InStr() starting position is correctly taken into account now.

  • Fix String.InStr() and String.RInstr() in ignore case mode, when the starting position is not specified.

  • String values can be used like object.

  • String.Len returns the length of the string.

  • String returns N characters from the position X, 0 being the first one. IF N is strictly negative, then all characters from the position X, except the last N characters are returned.

  • String returns the X-th character of the string, 0 being the first one.

  • Fix information about native classes.

  • Overriding public variables was useless, and is now forbidden to help JIT compiler optimizations.

  • Don't crash after a buffered file failed to close.

  • Fix some English mistakes in comments of various files.

  • Do not use __DATE__ and __TIME__ macros, they prevent reproducible builds.

  • Fix a panic message.

  • Add Hebrew to the list of right-to-left written languages.

  • Fix the LANGUAGE environment variable at startup, not just when System.Language is set. This is a temporary fix, as you lost the contents of LANGUAGE.

  • Fix a crash in exception management.

  • Add First and Last read-write properties to arrays.

  • Integer constants are correctly handled on little endian systems (arm, powerpc64...).

  • Process.Wait() now handles error output correctly.

  • A little optimization of integer loops. They are about 5% faster now.

  • Assert is an new instruction that raises an error as soon as its boolean argument is FALSE. Assertions are not catchable.

  • Clear environment variables set by the interpreter on exit, as they can be read by the shared libraries exit routines after main() has been terminated.

  • Correctly clear observer reference on the observed object when it is freed.

COMPILER

  • Support for the new JIT compiler.

  • Better panic errors.

  • Fix Left, Mid and Right subroutines metadata.

  • Fix Error() function metadata.

  • UNSAFE is a new keyword used in conjunction with FAST. It tells the JIT compiler not to do any safety check (null objects, division by zero, out of array bounds...). It makes the code a bit faster, but prone to segmentation fault.

  • Fix subroutine search function.

  • Fix subroutine metadata.

  • Allow compilation of structure accesses again.

  • Rename a macro constant to avoid a symbol clash when compiling the interpreter.

  • Allow the [] operator to be applied to a string.

  • The IsAlnum() function was never defined in the subroutine symbol table!

  • Do not use __DATE__ and __TIME__ macros, they prevent reproducible builds.

  • Allow local variable declaration anywhere in the function. The local symbol still has a function scope, but can be used after its declaration only.

  • Allow loop variables to be declared inside the loop syntax.

  • FOR EACH now can only use local variables.

  • Compiler messages are prefixed with gbc3:, not just gbc:.

  • Assert is an new instruction that raises an error as soon as its boolean argument is FALSE. The associated bytecode is not emitted if the -x option is specified.

ARCHIVER

  • Do not use __DATE__ and __TIME__ macros, they prevent reproducible builds.

INFORMER

  • Do not use __DATE__ and __TIME__ macros, they prevent reproducible builds.

SCRIPTER

  • Add a "-U" option to compile the script with the UNSAFE keyword.

  • Redraw the project icon.

BENCHMARKS

  • Little meaningless changes.

  • Little optimization in nbody benchmark.

  • Compute the duration of JIT Gambas code without JIT compilation time.

  • Use the unsafe flag for JIT-compiled scripts.

FARM SERVER

  • Update project icon.

GB.CHART

  • Fixed a bug in _CSerie class.

  • Fixed a bug in Chart class.

GB.COMPRESS.ZLIB

  • Find dependencies using pkg-config.

GB.CRYPT

  • No need to include anymore.

  • Do not disable the component if libcrypt is not found. Let's suppose it is located in the C system library, as on some systems.

GB.DB

  • Remove the Connection.TimeZone property, it is not used yet.

  • Connection.LastInsertId now raises an error instead of crashing when the connection is closed.

GB.DB.FORM

  • DataCheckBox: Its default value is now correctly set to NULL.

  • DataView: Clicking on the creation row now works correctly again.

GB.DB.ODBC

  • Fix some memory leaks when opening a connection fails.

  • Fix a memory leak when connecting to a database.

GB.DB.POSTGRESQL

  • Fix undefined TRUE/FALSE.

GB.DB.SQLITE2

  • Find dependencies using pkg-config.

  • Do not define TRUE/FALSE constants.

GB.DB.SQLITE3

  • Deleting a database now also deletes the possible associated sqlite temporary files that may be present.

  • Deleting a database should not crash anymore.

GB.DEBUG

  • Add explicit messages when something fails during initialization.

  • Fix a possible array overflow.

GB.DESKTOP

  • Use the correct default value for XDG_DATA_DIRS environment variable.

  • DesktopFile.FromMime() now follows the freedesktop search path specifications.

  • Update xdg-utils to 1.1.3 version.

  • Desktop.OpenTerminal now handles "Ubuntu:Gnome" desktop type.

GB.EVAL

  • Highlight: Add three new color constants for syntax highlighting: Escape, Label and Constant.

  • Gambas syntax highlighter now use the three new contants for escape characters in strings, for labels, and for language contants (True, False, Null, +Inf and -Inf).

  • Rename some constants.

  • Rename some source files.

  • Fix string highlighting.

  • Fix highlighting of strings including xXX escape sequences.

GB.EVAL.HIGHLIGHT

  • C/C++ syntax highlighting: A backslash at the end of the line continues preprocessor definitions.

  • Fix a warning.

  • Take multi-line strings into account in javascript syntax highlighting.

  • Support for the new syntax highlighting color constants.

  • TextHighlighter.ToRichText() returns an highlighted text in rich text format.

  • TextHighlighter.ToHTML() replaces all space by  .

GB.FORM

  • ButtonBox: Fix some margin, according to the previous fix to Style metric properties.

  • ColorChooser: The value slider now handles mouse wheel events.

  • ColorPalette: Scroll to the color when the Current property is set.

  • ColorPalette: Ensure that the current color is visible.

  • ColorPalette: Handle mouse wheel events correctly.

  • DirView: Forbid void directory names.

  • DirView: Errors occuring during a renaming now display the balloon message on the renaming item.

  • DocumentView: Use Timer.Trigger() method to prevent 100% CPU usage with QT4.

  • FileChooser: After having uncompressed a file, calls the event loop before refreshing the views so that the possible inotify events are processed.

  • FileProperties: Don't fill the error tab if the directory size background task is aborted.

  • FileProperties: Correctly abort the directory size background task if the Path property is set.

  • FileView: Setting the Current property does nothing if the new value is the same as the old one.

  • FileView: Forbid void file names.

  • FileView: Canceling an item rename now works as expected in icon mode, and correctly refreshes the view.

  • FileView: ReloadAll() now invalidates the directory cache.

  • FileView: A directory cache is now automatically invalidated every five second.

  • FileView: Sort the files once when the view is reloaded.

  • FileView: Optimize view refresh.

  • ImageView: Fix view to image coordinates conversion.

  • MessageView: Take Application.Animations property into account.

  • SidePanel: The height is now zero when the panel is closed. Does not work completly yet.

  • SidePanel: Animate opening and closing when Application.Animations is set.

  • SidePanel: Fix resize buttons management.

  • SidePanel: Setting the Hidden property now takes the current animation into account.

  • SidePanel: Side buttons tooltips are now always correct.

  • SidePanel: Side buttons were sometimes created twice.

  • SwitchButton: Take Application.Animations property into account.

  • SwitchButton: Remove a debugging message.

  • TabPanel: The middle mouse button does not close tabs anymore. It is now a feature only implemented in the Workspace control.

  • TableView: The cell editor now takes the color and font properties of the edited cell.

  • TableView: Move the editor so that the cell border is correctly visible.

  • Wizard: Animated property is now deprecated.

  • Wizard: Take Application.Animations into account.

GB.FORM.DIALOG

  • Font dialog: dialog is now centered at startup.

GB.FORM.EDITOR

  • TextEditor: Shortcuts work again.

  • TextEditor: Entering a bracket, a brace... while part of the current line is selected now automatically encloses the selected text.

  • TextEditor: Automatic brace completion is more clever now.

  • TextEditor: Support for dotted highlighted text.

  • TextEditor: Add single quote to HTML and WebPage string delimiters.

  • TextEditor: Make the automatic insertion of string delimiters more clever.

  • TextEditor: Fix scrolling when animations are enabled.

  • TextEditor: HighlightString() is a new method that highlights a specific string everywhere.

  • TextEditor: GotoCenter() works correctly again.

  • TextEditor: Setting the editor text does not crash anymore if the cursor of one of its view is out of bounds. Finally fixed it!

  • TextEditor: Clean up the sidebar view management code, and fix its behaviour.

  • TextEditor: Matching braces are now just underlined. I find that more readable.

  • TextEditor: Setting styles multiple times now triggers only one highlight update.

  • TextEditor: Try to make automatic insertion of quotes more clever.

  • TextEditor: Prevent a possible infinite looping on displaying an incorrectly highlighted text line.

  • TextEditor: Syntax highlighting of lines including tab characters has been fixed.

  • TextEditor: Take multiline strings into account in javascript mode.

  • TextEditor: Support for the new syntax highlighting color constants.

  • TextEditor.LastColumn is a new property that returns the column position just before a cursor move.

  • TextEditor.LastLine is a new property that returns the line position just before a cursor move.

  • TextEditor.CloseStrings is a new property that tells if strings should be automatically closed.

GB.FORM.MDI

  • Toolbar: Redraw expander icon.

  • Toolbar: Drag & drop take into account the ne behaviuour of the Parent property.

  • Workspace: CloseWithMouse is a new property. If set, the workspace tabs little close buttons are hidden, and the workspace tabs can be closed with a middle mouse click.

  • Action.Add() is a new method that allows to declare a new action.

  • Action.AddFrom() is a new method that declare a new action from a control.

GB.FORM.STOCK

  • Update some icons.

  • Make 128 pixels versions of message box icons.

GB.FORM.TERMINAL

  • TerminalView: Animate scrolling when Application.Animations property is TRUE.

  • TerminalView: Fix a possible crash when inserting a line longer than the terminal width.

  • TerminalView: Fix warning messages.

  • TerminalView: String.Left() sometimes fails. Print a warning if such a case is detected.

GB.GTK

  • DrawingArea: Change is a new event that is raised when the Application.Animations or Application.Shadows property changes.

  • Frame: Fix arrangement.

  • Paint: Text should now be correctly drawn in all cases.

  • ScrollBar: Correctly raise the Change event in all cases.

  • ScrollView: Remove ScrollView control.

  • Slider: Correctly raise the Change event in all cases.

  • Fix clipboard instanciation. No more GTK+ warning at the end of the program.

  • Remove unused static cursors.

  • Don't remove a control from its parent immediately when destroying it, so that GTK+ components behave like the QT ones.

  • Add specific fixes for breeze and oxygen themes.

  • Remove the native SpinBox implementation.

  • Application.Animations is a new property that enable or disable control animations.

  • MouseWheel events are now automatically propagated to the parent control if they are not handled by the child.

  • Don't send fake configure event anymore when resizing a control... to check if it is actually needed for something.

  • Do not crash anymore when deleting a modal window during its Open event.

  • Set a cursor by trying all possible API, to be sure to find one existing.

  • Controls having a null size are now taken into by the arrangement routine, and are moved accordingly.

  • Fix Container.Children.Clear() method.

  • Container.Children.Max is a new property that returns the number of container children minus one.

  • Container.Children now returns a real object that is a read-only array of references to all container children.

  • Remove PictureBox control.

  • Mouse.State has flags for keyboard modifiers now.

  • Panels controls got a smaller default size.

  • Do not use TRUE/FALSE constants in font-parser.cpp.

  • Control._Parent is the old Parent property renamed.

  • Control.Parent now ignores the inner containers of Container controls made in Gambas.

  • Do not add spurious spaces in rich text anymore.

GB.GTK3

  • ComboBox: Use a GtkBox instead of the deprecated GtkAlignment.

  • ComboBox: Fix rendering.

  • DrawingArea: Change is a new event that is raised when the Application.Animations or Application.Shadows property changes.

  • Frame: Fix control layout and arrangement.

  • Paint: Text should now be correctly drawn in all cases.

  • ScrollBar: Correctly raise the Change event in all cases.

  • ScrollView: Remove ScrollView control.

  • Slider: Correctly raise the Change event in all cases.

  • Style: Fix some paint methods and metric properties.

  • Fix clipboard instanciation. No more GTK+ warning at the end of the program.

  • Don't remove a control from its parent immediately when destroying it, so that GTK+ components behave like the QT ones.

  • Add specific fixes for breeze and oxygen themes.

  • Remove the native SpinBox implementation.

  • Compile with GTK+ < 3.20.

  • Make gb.gtk3 compile with GTK+ < 3.14.

  • Control.Font is now implemented using GTK+ CSS.

  • Application.Animations is a new property that enable or disable control animations.

  • Get rid of most of the GtkAlignment deprecated widgets.

  • MouseWheel events are now automatically propagated to the parent control if they are not handled by the child.

  • Don't send fake configure event anymore when resizing a control. To check if it is actually needed for something.

  • Do not crash anymore when deleting a modal window during its Open event.

  • Set a cursor by trying all possible API, to be sure to find one existing.

  • Controls having a null size are now taken into by the arrangement routine, and are moved accordingly.

  • Remove a warning on deprecated API.

  • Fix Container.Children.Clear() method.

  • Container.Children.Max is a new property that returns the number of container children minus one.

  • Container.Children now returns a real object that is a read-only array of references to all container children.

  • Remove PictureBox control.

  • Mouse.State has flags for keyboard modifiers now.

  • Panels controls got a smaller default size.

  • Do not use TRUE/FALSE constants in font-parser.cpp.

  • Control._Parent is the old Parent property renamed.

  • Control.Parent now ignores the inner containers of Container controls made in Gambas.

  • Do not add spurious spaces in rich text anymore.

GB.GUI.BASE

  • GridView: Draw last column and last rows separators even if Grid is not set when the GridView is actually a TableView.

  • IconView: Always raise Click event when clicked and not only when selection changes

  • IconView: Canceling the Rename event keeps the editor opened.

  • IconView: Hitting ENTER while renaming an item does not insert a newline in the item text.

  • IconView: Selecting items with the keyboard is faster now.

  • IconView: Clicking on an item in multiple selection mode correctly makes it the current item.

  • IconView: Improve and normalize how items are draws between horizontal et vertical orientation.

  • IconView: Always raise Click event when clicked and not only when selection changes.

  • IconView: Keys is a new property that returns an array of all item keys.

  • IconView: Items highglight is correctly drawn now.

  • PictureBox: The control is now implemented in Gambas.

  • PictureBox: Mode is a new property that defines how the image fills the control.

  • PictureBox: Image is a new property that allows to display an Image instead of a Picture.

  • ProgressBar: Fix rendering with GTK+ components.

  • ProgressBar: Pulsing is now visible as soon as the ProgressBar is twice large as high, and the animation is smoother.

  • ScrollView: The control is now implemented in Gambas.

  • ScrollArea: Animate scrolling if Application.Animations is set.

  • ScrollArea: Fix the ScrollX and ScrollY properties when animations are enabled.

  • ScrollArea: Don't animate scrolling if nothing has been drawn yet.

  • ScrollArea: Scrolling is a new property that returns if the control is scrolling for animations.

  • ScrollArea: Fix behaviour when scrolling animation is enabled.

  • ScrollArea: Shadow is a new property that displays inner shadows when scrolling is possible.

  • ScrollArea: ContentsHeight and ContentsH are two new synonymous of the ScrollHeight property.

  • ScrollArea: ContentsWidth and ContentsW are two new synonymous of the ScrollWidth property.

  • ScrollArea: NoShadow is a new property, that disable shadows if it has been globally set by Application.Shadows.

  • ScrollArea: Correctly raise Scroll events.

  • ScrollView: Arrangement should be correctly done now.

  • ScrollView: Take the Margin property into account correctly.

  • ScrollView: Fix a possible infinite loop in contents arrangement routine.

  • ScrollView: Correctly propagate focus events.

  • ScrollView: Automatic layout is now done before and after arrangement.

  • SpinBox: The control is now implemented in Gambas.

  • TreeView: Canceling the Rename event keeps the editor opened.

  • TreeView: Don't mess up multiple selection when automatic sorting is enabled.

  • TreeView: Define the default row size, so that adding items is faster.

  • TreeView: BeforeSort is a new event that allows a caller to prepare its custom view sort.

  • TreeView: Allows the view to be locked while a lot of items are added.

  • TreeView: The space between the icon and the item text is now bigger, and proportional to the desktop font size.

  • TreeView: Setting an item font has no side effect anymore.

  • TreeView: Keys is a new property that returns an array of all item keys.

  • Action[].HasShortcut is a new property that returs if an action can have a shortcut.

  • Action.Keys is new static property that returns the list of all action keys.

GB.JIT

  • New JIT component. The old gb.jit is renamed as gb.jit.llvm.

GB.MAP

  • Remove function of Shape¬†Layer does nothing if the Layer did not exist.

  • Return null if the required layer does not exist.

  • Remove a public variable declared in a parent and in a child class.

  • All the object can be removed in all order now.

GB.MIME

  • Compatibility with libgmime 3.0.

GB.MYSQL

  • Fix compilation by not using global variables as loop variables.

GB.NCURSES

  • Find dependencies using pkg-config.

  • Silence compiler warnings.

  • Do not OR the window's attr_t into the background chtype in wbkgd(), the background itself has no attributes.

GB.NET

  • Fix a file descriptor leak when a socket fails to connect.

GB.NET.CURL

  • DownloadManager is a new class that allows to manage several downloads simultaneously.

  • HttpClient and FtpClient now share the same TargetFile property.

  • Progress event is now posted, because libcurl can crash if you stop a client during this event.

GB.OPENSSL

  • Replace the deprecated (as of OpenSSL 1.1.0) function RAND_pseudo_bytes with RAND_bytes.

GB.PCRE

  • Find dependencies using pkg-config.

GB.PDF

  • Add many const keywords to compile with poppler 0.64. Partial patch thanks to Tony Morehen.

  • Fix compilation with older popplers.

  • Fix compilation with poppler < 0.64.

  • Compile with C++ 11 which is needed by current poppler versions.

  • Fix compilation on old gcc, by checking if the -std=c++11 flag is available.

  • Make gb.pdf compile with poppler 0.71.

  • Make gb.pdf compile when poppler version >= 0.72.

GB.QT4

  • DrawingArea: Change is a new event that is raised when the Application.Animations or Application.Shadows property changes.

  • RadioButton: Fill the widget when the background color is set.

  • ScrollBar: Correctly handle mouse wheel events.

  • ScrollView: Remove ScrollView control.

  • Style: Fix some metric properties.

  • Don't use QFont::setStyleName() if Qt version is not at least 4.8.

  • The Move() and Resize() methods now correctly update the contents of windows.

  • Delay hooks initialization, because now socket notifiers must not be used before creating the event loop.

  • Remove the native SpinBox implementation.

  • Application.Animations is a new property that enable or disable control animations.

  • MouseWheel events are now automatically propagated to the parent control if they are not handled by the child.

  • Fix mouse wheel scrolling on native widgets.

  • Controls having a null size are now taken into account by the arrangement routine, and are moved accordingly.

  • Container.Children.Max is a new property that returns the number of container children minus one.

  • Container.Children now returns a real object that is a read-only array of references to all container children.

  • Remove the native PictureBox implementation.

  • Mouse.State has now flags for keyboard modifiers too.

  • Panel controls got a smaller default size.

  • Button automatic resize is not freezed anymore when one of its parent is in design mode.

  • Control._Parent is the old Parent property renamed.

  • Control.Parent now ignores the inner containers of Container controls made in Gambas.

  • Remove the QT4 TextBox selection bug workaround. It prevents the selection method from working in some cases.

GB.QT4.EXT

  • Make the component compile again.

GB.QT4.WEBKIT

  • WebView: Temporarily redirect stderr to /dev/null when creating the first WebView, to get rid of spurious libpng warnings on PNG files integrated inside the Qt WebKit library.

  • WebView: Correctly define the cache path.

  • Workaround a QtWebkit bug that made font size settings 3 points off.

  • WebSettings.Cache.Path now understands paths beginning with ~.

GB.QT5

  • DrawingArea: Change is a new event that is raised when the Application.Animations or Application.Shadows property changes.

  • RadioButton: Fill the widget when the background color is set.

  • ScrollBar: Correctly handle mouse wheel events.

  • ScrollView: Remove ScrollView control.

  • Style: Fix some metric properties.

  • Call QFont::setStyleName() last, as it may be buggy if Qt version is not at least 5.3.

  • The Move() and Resize() methods now correctly update the contents of windows.

  • Delay hooks initialization, because now socket notifiers must not be used before creating the event loop.

  • Remove the native SpinBox implementation.

  • Application.Animations is a new property that enable or disable control animations.

  • MouseWheel events are now automatically propagated to the parent control if they are not handled by the child.

  • Remove ScrollView link files.

  • Fix mouse wheel scrolling on native widgets.

  • Controls having a null size are now taken into by the arrangement routine, and are moved accordingly.

  • Container.Children.Max is a new property that returns the number of container children minus one.

  • Container.Children now returns a real object that is a read-only array of references to all container children.

  • Remove the native PictureBox implementation.

  • MouseWheel events on disabled controls are correctly propagated now.

  • Mouse.State has now flags for keyboard modifiers too.

  • Panels controls got a smaller default size.

  • Button automatic resize is not freezed anymore when one of its parent is in design mode.

  • Control._Parent is the old Parent property renamed.

  • Control.Parent now ignores the inner containers of Container controls made in Gambas.

  • Remove the QT4 TextBox selection bug workaround. It prevents the selection method from working in some cases.

GB.QT5.WEBKIT

  • WebView: Temporarily redirect stderr to /dev/null when creating the first WebView, to get rid of spurious libpng warnings on PNG files integrated inside the Qt WebKit library.

  • WebView: Correctly define the cache path.

  • Workaround a QtWebkit bug that made font size settings 3 points off.

  • WebSettings.Cache.Path now understands paths beginning with ~.

GB.REPORT

  • Replace Timer delay by a trigger loop in ReportView layout routine.

GB.SDL

  • Fix detection with at least pkgconf 2.4.2.

GB.SDL.SOUND

  • Find dependencies using via pkg-config.

GB.SDL2

  • Fix detection with at least pkgconf 2.4.2.

GB.SIGNAL

  • Fix an english mistake in an error message.

GB.TERM

  • Compatibility with NetBSD.

  • Compatibility with OpenBSD.

GB.UTIL

  • Shell.Move() got a new optional Force argument, that erases the destination path. The erase and the move are atomic if possible.

  • Shell.MkDir() now handles paths starting with ~/, and raises an error if creating the directory is impossible.

GB.WEB

  • Session.Exist() method now works correctly for sessions stored in sqlite databases.

  • Session.Path is a new property that returns the path of the file where the session is stored.

  • Fix the write of session values for sqlite sessions.

GB.WEB.FORM

  • WebButton: Add the Immediate property. If set, the Javascript code emitted by the Click event handler is executed immediately by the onclick button event. Use this feature when some DOM method (like clipboard copy) works only in the context of a user interaction.

  • WebTextArea: The Change event is now emitted a few milliseconds after each text change.

  • WebTextArea: Optimize Change event.

  • WebTextBox: The Change event is now emitted a few milliseconds after each text change.

  • WebTextBox: Optimize Change event.

  • WebTextArea.Copy() is a new method that copies the control text to the clipboard. Works only with https.

  • WebTextArea.Clear() is a new method that clears the control text.

  • WebTextBox.Copy() is a new method that copies the control text to the clipboard. Works only with https.

  • The ~dump request now displays the environment variables too.

  • Fix margins of WebContainer using Row or Column arrangement.

GB.XML

  • Fix returning value of XML comments.

  • Fix reading XML comments and CDATA tags when they contain characters that belong to the end tag while not forming a complete one.

  • Fix the XmlNode.GetElementsByAttributeValue() method.

GB.XML.HTML

  • Fix reading lowercase HTML doctypes.