Gambas 3.15.0

What's new?

This release provides the following main features and fixes:
  • A new unit test system made by Christof Thalhofer and Tobias Boege.

  • A new diff mode in the IDE code editor.

  • The ability to save and restore custom IDE layouts.

  • Enhanced support for dark themes.

  • Many fixes in the packager.

  • A new trace mode in the interpreter.

  • A new OPEN NULL syntax for opening a null stream.

  • A new PEEK instruction.

  • A new WAIT NEXT instruction.

  • The &= operator is now hundreds of times faster.

  • New special methods that allow any object to be serialized.

  • A new faster gb.web.gui component that replaces gb.web.form.

  • A new gb.poppler component that replaces gb.pdf.

Compilation and installation

Read the instructions there.

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

Enjoy it !

Changelog

CONFIGURATION

  • Switch version to 3.15.0.

  • Switch bytecode version 3.8 to 3.15.

  • Change the order of compilation of components made in Gambas, so that gb.scanner is compiled after gb.form.print, as the project uses it.

  • Remove INSTALL.html file. It was including deprecated links that now points at spam.

  • Update mail address in appdata xml file.

  • gb.ncurses now compiles on systems which only provide wide-character versions of ncurses pkg-config files.

  • Update AUTHORS file.

  • Compile gb.form.stock before gb.form now that is it checked in the gb.form project components.

  • Fix Gambas e-mail in configuration script.

  • Fix component template generator.

  • Add man pages.

  • Update TODO file.

  • Fix gitlab CI configuration.

DEVELOPMENT ENVIRONMENT

Automatic completion

  • Add _read and _write to the list of special methods.

  • Add _ready to the list of special methods.

  • Fix completion of identifiers.

  • Automatically load gb.test for automatic completion.

Code editor

  • Add a toolbar button that toggles display of differences with last commit.

  • The automatic completion now appears at the correct position when the view is splitted.

  • Error messages now use the same background as the editor, to ensure they are always readable.

  • When inserting a color, the color dialog is now initialized with the hexadecimal value under the cursor if any.

  • The THEN keyword is now automatically inserted if missing.

  • PROPERTY ... USE is taken into account by automatic variable declaration.

  • If you use the PROPERTY ... USE syntax, you have to use the SHIFT key with the ENTER key to automatically insert property handlers.

  • Return value of CLOSE and SHELL / EXEC ... TO syntax are now taken into account by automatic variable declaration.

Database editor

  • The record count is correctly updated now, when records are removed or added.

  • Creating, renaming or removing a table now correctly updates the database template file.

Debugger

  • The stack trace list can be resized.

  • The toggle button that switches between collection or array contents and their symbols does not disappear anymore.

  • The program arguments are now defined through a specific dialog displayed when running the project.

File creation dialog

  • Remember the size of new images.

Form editor

  • Draw the control frame as soon as the Drag event is raised, to try to workaround a drag & drop bug.

  • Add a new possible size to the toolbox.

  • Replace the toolbar size option by a button on the toolbox.

  • Replace the sort properties option by a button on the property sheet.

  • Support for a diff mode that replaces the gui editor by a text editor showing the differences.

  • Fix default size of virtual controls.

  • Add a information line on the toolbox that displays the name of the current hovered toolbox control, and the component it belongs to.

  • The frame of control dropped from the toolbox should correctly disappear in all cases.

  • Draw the frame of control dropped from the toolbox bigger.

  • Fix the tab order of the control toolbox.

  • Selection of menu icons now allows stock icons again.

  • Toolbox controls icons now adapt to dark themes.

Help browser

  • Support for the new help wiki command.

  • Fix behavior of offline documentation.

  • Cancel downloading when using a custom special url.

  • Handle custom array classes in help.

Image editor

  • Fix a possible infinite recursion when refreshing the clipboard tab.

  • Use the new stock icons in the property panel.

  • Draw the grid lines with foreground color.

  • Resize the information tooltip for large coordinate values.

  • The grid configuration gets a sane default the first time it is toggled.

  • Grid configuration is now specific to each editor.

Make executable dialog

  • New design.

  • Add an option that excludes test modules from the executable.

  • The output of the command run after executable has been generated is now put in the IDE console.

  • Ask for a confirmation when making executable if no change has been detected and project version should be incremented.

Main window

  • Fix an ambiguous shortcut: opening file properties dialog is now triggered by CTRL+SHIFT+I.

  • Use a long dash to separate the application name in the IDE window title.

  • Display the current branch in the IDE window title.

  • Refresh the IDE window title only if necessary.

  • Add buttons on top of tab bars to show hidden panels.

  • Add a button to toggle sort by inheritance in the project tree.

  • Remove the show property help option.

  • Use tab bar extra buttons for showing project tree, property sheet, control tool box and property help.

  • Add a specific output tab for the unit tests result.

  • Add a test button, that run the project in test mode, using the debugger.

  • Reorder debug panel buttons.

  • Add menu entries for toggling most of the debugging environment variables.

  • Adapt the background image to dark themes automatically.

Options dialog

  • Add global interface layout save/restore ability.

  • Provide two default layouts : a default one, and a compact one.

  • Remove "Quiet external commands" option.

  • Remove "Minimize on execution" option.

  • Add a slider for defining the brightness of the background.

  • Make some combo-box a bit larger for some widget themes where their contents is cropped.

  • The invert colors option is now active only on dark themes.

Packager

  • *.deb packaging now supports spaces in package target directory name.

  • Fix ArchLinux packager.

  • Take package release number into account in rpm & deb dummy package dependencies.

  • Add distribution suffix in rpm support package dependencies.

  • Fix refresh of extra dependencies and additional files tables.

  • New option to add the project major version number to the package name.

  • Underscores are now allowed in extra dependencies package names.

  • Emit dependencies for component projects.

  • Package directory is now stored in the project configuration file.

  • Fix deb package clean directive so that it only deletes the .gambas directory and the executable.

  • Do not use compiler absolute path in packages.

  • Packaging a component with no requirements does not crash anymore.

Project open dialog

  • Do not display the file chooser toolbar when selecting a project.

Project properties dialog

  • The first column of environment table has now a minimum width.

  • Add more project statistics.

  • Add an option to add the current git branch to the project version number.

  • Remove the arguments tab.

  • Make some combo-box a bit larger for some widget themes where their contents is cropped.

  • Fix deletion in argument list when pressing Backspace.

  • Use shorter labels so that translations are visible.

Search dialog

  • The project browsing is now done through a background task.

  • Case insensitive search with words only now works correctly in all cases.

  • Support for browsing compressed files.

Text editor

  • The Compress file button tooltip now shows the actual compression ratio, not its inverse.

  • Text file compression is now transparent, and activated through a toggle button.

  • Uncompressed files are now stored in the .hidden/.uncompressed hidden directory. Files are removed from the old Uncompressed visible directory as soon as it is marked compressed again.

  • The "remove trailing spaces" formatting option has no effect on *.md or *.MD files.

Version control

  • Add a button that clears the version control terminal output.

  • The command error dialog now works correctly.

  • Correctly cancel commands when password dialogs are cancelled.

  • All local and remote branches are now available.

  • Git synchronization now updates the local list of branches.

  • Fix the height of the error dialog.

  • Do not log git branch commands.

  • Version control information and file information are now two distinct dialog boxes.

Version control dialog

  • Always open the dialog, even if there is nothing to commit.

  • Add a version control history tab.

  • Hide the modification tab if there is no changes.

Welcome dialog

  • Sound and animation on a few specific dates. :-)

  • Use a lighter version of the blue color.

Translations

  • Update German translation

  • Update French translation.

  • Update Italian translation.

  • Updated Brazilian Portuguese translation.

Miscellaneous

  • Update Gambas fonts.

  • Make Gambas 16 pixels size font less round and fix many characters.

  • Move the bytecode folder instead of copying it.

  • Add .startup, .list and .info to projet default gitignore file.

  • Update financial support list.

  • Update Zen color theme.

  • If chromium is selected as default browser, then stable Google Chrome can be used if Chromium is not installed.

  • Do not crash if the layout user directory does not exist yet.

  • Add support for test modules.

  • Use bold text instead of shadows to display project titles.

  • Relative paths on command-line are now assumed to be relative to the current working directory.

  • Ignore untranslated title and description when displaying project information.

  • The first opening of the console waits a bit so that the arrangement of its container is made.

  • Add gb.test.tap to the list of components.

  • Allow any form family to use the menu editor.

  • Support for custom stock icons sizes depending on the form family.

  • Support for gb.web.gui component.

  • Redraw the module icons.

  • Hitting ESC key when the focus is on the console immediate command textbox now always closes the console tab.

  • Change the version control synchronize icon to the download icon.

  • Use global constants for IDE blue and orange colors.

  • Use -r interpreter option to redirect standard error output.

  • Ignore hidden components specified in the project file.

  • Automatically load gb.test information.

  • Get rid of big orange panels.

  • Redraw the class symbols icons, and make them adapt to the desktop font size.

  • Start to clean up the image directory.

  • Use new stock icons.

  • Remove some useless icons.

  • Remove dark versions of many icons, now they are automatically generated.

  • Better default IDE configuration.

  • Check for duplicated class files when opening a project.

  • Do not set current project bookmark if opening the project fails.

  • Update financial support file.

  • Support for the new gb.poppler component.

  • Implement "save as" action for external files.

WIKI

  • Fix author and translator page.

  • Implement help command that inserts help defined in source code comments.

  • Use the full page width.

  • The @help command now can retrieve class help comments.

  • Undo is now possible if the page does not exist.

  • Handle custom array classes automatically.

  • Add command-line options to find or replace a string in all wiki pages.

  • Add a command-line option to print the package table.

  • The Italian translations are now complete.

WEB SITE MAKER

  • Added Brazilian Portuguese translation.

EXAMPLES

  • Add debugging messages to the Printing example and use full page to print.

INTERPRETER

  • Read-only arrays are now really read-only.

  • Add a -t option that dumps to the standard error the position of each executed line of code.

  • Floating-point number to string conversion is now 1.7 times faster.

  • System.Trace is a new property that toggles the dump of the position of each executed line.

  • Add command-line help for the -t option.

  • Do JIT compilation after class loading. Otherwise the JIT compiler may want to load the class that triggers the compilation again.

  • Remove a useless global variable.

  • Fix exponent sign printed twice in float to string conversion.

  • Fix Find() method on Float, Single, and Long arrays.

  • Fix compilation of function calls with variable arguments passing.

  • Disable some compiler warnings that generate false positives.

  • Fix static array management. They are not read-only anymore. Only methods that want to modify the size of the array are forbidden, as well as the ReadOnly property.

  • Reading a string on a memory stream now correctly skip the terminating null byte.

  • Fix serialization of NULL values.

  • Remove an old debugging message displayed when writing a pointer to a stream.

  • Stream.NullTerminatedString is a new property that tells if writing a string on the stream emits the string length first, or a null terminated zero byte. This property is TRUE by default on memory streams.

  • OPEN NULL is a new syntax that opens a null stream. Reading always returns end of file, and writing does nothing except advancing the file pointer, allowing to know how many bytes were written.

  • Rename macro that convert a Gambas stream object to the internal stream structure and add a macro that does the reverse conversion.

  • _read and _write are two new special methods that allow to make any object serializable by the READ and WRITE instructions.

  • Serializing an object is not ambiguous anymore.

  • Use one byte for writing the class name length when serializing objects.

  • Memory-mapped component archives file descriptors are now automatically closed when a child process is executed.

  • WAIT NEXT is a new instruction that waits for the next event and process it.

  • Signals are now correctly unregistered if the program exits during a signal handler.

  • Object.Count() does not fail anymore if the object is invalid.

  • A class can declare a public _invalid boolean variable. The value of that variable will indicates if the object is invalid.

  • gbx3 -L now displays the same Gambas version as gbx3 -V.

  • Error.Text, Error.Where and Error.Backtrace are now available inside the Application_Error handler.

  • Check special methods return value datatype and raise a dedicated error if it is incorrect.

  • Opening a pipe for reading does not block anymore if the pipe has not been opened for writing yet. It help synchronizing applications using the same pipe a lot!

  • Add class name in incorrect symbol declaration error message.

  • Fix possible memory leaks when reading objects or variants with the READ instruction.

  • Application.ParentHandle is a new property that returns the parent process id.

  • Fix release of return value of JIT methods called from non-JIT methods.

  • Internal name of libraries uses a point now between vendor and library name, not a slash anymore.

  • Running a process without an event name does not reference its observer for nothing anymore.

  • IsAscii(), IsLower(), IsPunct()... instructions are now a bit faster.

  • PEEK is a new instruction that peek some bytes from a stream without removing them, so that they are available to the next READ instruction.

  • VarPtr() on variants now returns a pointer to the variant contents.

  • VarPtr() on local strings are forbidden again.

  • Converting a string to a pointer returns a pointer pointing at the beginning of the string.

  • Call the event loop just after the JIT compiler has aborted, so that its processes are correctly freed.

  • &= operator optimization.

  • Strings greater than 4096 bytes are allocated by 4096 bytes steps.

  • Support for JIT &= optimization.

  • Enabling an already enabled timer has no effect anymore.

  • Use -r option now to redirect standard error output. No conflict anymore with -t.

  • Update help message and display options in alphabetic order.

  • Add -T option to run test modules.

  • Interpreter options now accept a void argument.

  • Automatically load gb.test component when the -T option is used.

  • Make READ and INPUT return void strings instead of NULL, otherwise JIT compiler fails.

  • Make a public function static.

  • Use time_t in GB.MakeDateFromTime API.

COMPILER

  • Correctly generate metadata file for events so that there is no spurious ByRef arguments anymore.

  • Remove some useless structure packing directives.

  • Fix compilation of function calls with variable arguments passing.

  • Correctly detect help comments in all cases.

  • Allow initialization of variables associated with property declaration.

  • Allow static arrays to be used with the point operator.

  • OPEN NULL is a new syntax that opens a null stream.

  • Function names can be put between parenthesis to disable possible warnings on them.

  • Support for the new WAIT NEXT instruction.

  • Workaround a gcc 8 compiler optimization bug.

  • Fix a comment typo.

  • Support for the new PEEK instruction.

  • Support for test modules.

  • Fix an uninitialized local variable.

  • Do not crash anymore by looking for help comments in form files when controls are public.

  • Support for &= operator optimization.

  • Automatically add gb.test component information when a project includes a test module.

  • Order options in displayed help.

  • Output a class flag for test modules.

  • Fix compilation of OPEN STRING instruction that sometimes failed.

  • Remove now useless structure fields.

ARCHIVER

  • Support for test modules.

  • Order options in displayed help.

INFORMER

  • Redesign verbose messages. Do not print anything if verbose mode is off, except warning messages.

  • Order options in displayed help.

  • If a component includes the information of one component among many, do not fail if the first one does not exist. Try the other ones.

SCRIPTER

  • Order options in displayed help.

AUTHORS

  • Added a new italian translator.

BENCHMARKS

  • Add a new string benchmark.

GB.ARGS

  • Updated Brazilian Portuguese translations.

GB.DB

  • Add DB.LastInsertId, the static version of Connection.LastInsertId.

  • Connection.ApplyTemplate() now updates existing tables.

  • Connection.Url is a new property that returns the URL of the connection.

GB.DB.FORM

  • DataView: Add SelectAll() and UnselectAll() methods.

  • Updated Brazilian Portuguese translations.

GB.DB.MYSQL

  • Add support for GB_DB_MYSQL_NOSSL environment variable, that allows to disable SSL connections. They are buggy in some versions of the mysql client library.

  • Make gb.db.mysql compile with older versions of MySQL.

  • Make gb.db.mysql compile with MySQL version >= 8.0.1.

  • Detect SSL_MODE_DISABLED at configure time, to make the component compile on older mysql clients.

  • Print a warning message if disabling SSL connection is not supported.

GB.DB.POSTGRESQL

  • Fix a possible buffer overflow.

  • Add license exception for OpenSSL.

  • Do not put explicit copyright holder name in the COPYING file.

GB.DB.SQLITE3

  • Fix memory leak in Connection.LastInsertId implementation.

GB.DBUS.TRAYICON

  • Use the Unity protocol on all desktops.

GB.DEBUG

  • Debug.Fifo is a new property that returns the name of the FIFO used for communication with the IDE.

GB.DESKTOP

  • DesktopFile: Fix the case of the "exist" symbol that is used as a public method name.

GB.DESKTOP.X11

  • X11Systray: System tray now works with QT5. A display glitch remains.

  • X11Systray: Show() now takes the icon background color as second optional argument. The default color is black.

GB.DRAW

  • Paint: TextHeight is a new property that returns the height of one line of text. This is not the same as Paint.Font.Height, as the device resolution is taken into account.

GB.EVAL

  • Don't highlight Null as constant inside the new OPEN NULL syntax.

  • Do not crash anymore when analyzing a line that ends with a { character.

  • Add Highlight.Added and Highlight.Removed style constants.

GB.EVAL.HIGHLIGHT

  • Fix highlighting of long lines and comments.

GB.FORM

  • ButtonBox: Settings the Filter property to FALSE correctly destroy the internal associated button, and prevent the control to crash if you set the property again.

  • ButtonBox: Custom buttons added with _AddButton() are now always between the clear button, and the standard button.

  • ButtonBox: Filter icons are now a little darker.

  • ColorChooser: Use icons instead of labels for color components.

  • DirChooser: ShowToolbar is a new property that toggles the toolbar.

  • DirChooser: Custom bookmarks are now correctly refreshed when they change.

  • DirView: Do not display an error when a directory is unreadable.

  • DocumentView: Some little design changes.

  • FileChooser: Correctly deal with & in bookmark names.

  • FileChooser: Add a separator above the bottom filters when Border property is unset.

  • FileChooser: ShowToolbar is a new property that toggles the toolbar.

  • FileChooser: Custom bookmarks are now correctly refreshed when they change.

  • FileProperties: Click is a new event that is raised when a tab is selected.

  • FileProperties: Index is a new property that returns or sets the current tab index.

  • FileProperties: Add() now returns the index of the added tab.

  • FileProperties: Adding a tab does not raise the Click event anymore.

  • FileProperties: Fix an error triggered by the preview.

  • FileView: Display a lock icon when a directory is unreadable.

  • FileView: Display a text inside the view when a directory is empty.

  • FontChooser: Initializing the font tree is now a lot faster.

  • IconPanel: Scale the panel icons so that each panel title has the same height.

  • ListEditor: Activate event is now emitted if the user clicks twice on the list.

  • ListEditor: Unique is a new property that ensures that all ListEditor elements are unique.

  • ListEditor: Add Remove() method.

  • ListEditor: Add Find() method.

  • ListEditor: Add Index property.

  • ListEditor: Text property now returns or sets the text currently edited.

  • ListEditor: The insert button text is now "Add".

  • MenuButton: Correctly deal with & shortcut character.

  • SliderBox: The default value is now applied when double-clicking on the spinbox, not the slider.

  • SliderBox: Add a Picture property.

  • Spinner: Add a Padding property.

  • Stock: Analyze icon directories in alphabetic order, so that numeric directory names are always identified first.

  • Stock: Better support of some icon themes.

  • TabPanel: Add TabBarPaddingStart and TabBarPaddingEnd properties. They allow to define space on the left and the right of the tab bar, so that you can put some widgets on top.

  • TabPanel: Fix tab bar layout routine.

  • TabPanel: The "close all" button is now drawn after the right padding.

  • TabPanel: TabBarSize is a new property that returns the height of the tab bar.

  • Use the KDE SVG version of Tux that is a lot smaller.

  • Add may new stock icons.

  • Update translations.

GB.FORM.DIALOG

  • Updated Brazilian Portuguese translation.

GB.FORM.EDITOR

  • TextEditor: Highlight the entire current line when it is wrapped.

  • TextEditor: Add support for integrated diff mode.

  • TextEditor: CTRL+F opens a simple text search field inside the editor.

  • TextEditor: Add F3 and SHIFT+F3 shortcuts for searching forward and backward in the text search popup.

  • TextEditor: TextEditor[].Purge() works as expected now.

  • TextEditor: Do not use Application.Busy in Load() and Save() methods.

  • TextEditor: String closing routine should be less stupid now.

  • TextEditor: Draw wrapped lines with little arrows at the end.

  • TextEditor: Moving down now should work as expected on wrapped lines.

  • TextEditor: Inserting a string delimiter at the beginning of the line does not crash anymore.

  • TextEditor: Bold text is made bolder when the background is dark.

GB.FORM.MDI

  • ToolBar: Draw a selected border in design mode.

  • Toolbar: SetLayout() is a new static method that defines the saved layout of a toolbar from its key.

  • Toolbar: GetLayout() is a new static method that returns the saved layout of a toolbar from its key.

  • Toolbar: Settings is a new property that allows to return or set the toolbar layout as a string.

  • Workspace: Add TabBarPaddingStart and TabBarPaddingEnd properties. They allow to define space on the left and the right of the tab bar, so that you can put some widgets on top.

  • Workspace: Add a TabPanel property that returns the inner workspace tab panel.

  • Updated Brazilian Portuguese translations.

GB.FORM.PRINT

  • You can continue to freely zoom with the mouse wheel when current zoom is at 100%.

  • The paper size is correctly refreshed when the orientation is changed.

  • Add default margin properties to the Printer class (MarginTop, MarginBottom, MarginLeft and MarginRight).

  • Add component icon.

  • Updated Brazilian Portuguese translations.

  • Update project icon.

GB.FORM.STOCK

  • Redraw some icons, and add new ones.

  • Add a 128 pixels version of the colored directory icon.

  • Add 128 pixels version of many icons.

GB.FORM.TERMINAL

  • TerminalView: ReadOnly is a new property that makes the TerminalView ignore keyboard input.

  • TerminalView: Add a 2 pixels margin around the terminal contents.

  • TerminalView: Add a new popup menu entry to select all the text.

  • TerminalView: Automatic scrolling is not smooth anymore.

  • TerminalView: Automatic scrolling is disabled when the last terminal line is hidden.

  • TerminalView: Terminal output processing is now delayed until the control is visible and has been arranged, so that the terminal width is accurate.

  • TerminalView: Better default colors.

  • TerminalView: Reserve one pixel less between characters for bold text.

  • Document the component with help comments.

  • Move XTerm files to the hidden project directory.

  • Updated Brazilian Portuguese translations.

GB.GEOM

  • Remove unnecessary PACKED directives.

  • Fix some spaces in source code.

GB.GTK

  • TextBox: Add Placeholder property. Beware that it does nothing as GTK+2 entry widget does not support placeholder text.

  • Window: Add a State event that is raised when the window is minimized, maximized or set to full screen.

  • Windows whose Utility property is set now use _NET_WM_WINDOW_TYPE_DIALOG instead of _NET_WM_WINDOW_TYPE_DIALOG.

  • Do not imbricate focus events.

  • Paint.FontScale is now "transparent". Paint.Font.Size is not changed anymore when assigning the Paint.Font property.

  • TextBox and TextArea KeyPress events cannot be stolen by other controls anymore.

  • Support for the new WAIT NEXT instruction.

  • Fix Drag() that was returning the drag frame instead of the target control.

  • Printer.Paper now works as expected.

  • The Window State event is correctly raised now, and the state properties are now correctly synchronized.

  • Application.DarkTheme is a new property that returns if the current color scheme is dark.

  • Style.Name is now lowercase.

  • Mouse.Click is a new property that returns the click index in a multi-click event.

  • Negative values are replaced by zero when setting Application.Busy.

  • Opening a popup always raises it to the pop now.

GB.GTK3

  • TextBox: Add Placeholder property.

  • Window: Add a State event that is raised when the window is minimized, maximized or set to fullscreen.

  • Windows whose Utility property is set now use _NET_WM_WINDOW_TYPE_DIALOG instead of _NET_WM_WINDOW_TYPE_DIALOG.

  • Do not imbricate focus events.

  • Paint.FontScale is now "transparent". Paint.Font.Size is not changed anymore when assigning the Paint.Font property.

  • TextBox and TextArea KeyPress events cannot be stolen by other controls anymore.

  • Support for the new WAIT NEXT instruction.

  • Fix Drag() that was returning the drag frame instead of the target control.

  • Printer.Paper now works as expected.

  • The Window State event is correctly raised now, and the state properties are now correctly synchronized.

  • Application.DarkTheme is a new property that returns if the current color scheme is dark.

  • Fix Style.PaintCheck() and Style.PaintArrow() for GTK+ >= 3.14.

  • Style.Name is now lowercase.

  • Mouse.Click is a new property that returns the click index in a multi-click event.

  • Negative values are replaced by zero when setting Application.Busy.

  • Opening a popup always raises it to the pop now.

GB.GUI

  • Fix detection of GUI components and share some code with gb.gui.qt.

GB.GUI.BASE

  • GridView: Selecting while moving the mouse cursor now raises the Select event only when the mouse button is depressed.

  • GridView: Select event is not raised twice on click anymore.

  • IconView: Fix grid height computation.

  • IconView: Do not use rounded rectangles anymore for selection frames.

  • ListBox: Click event is now raised when the Index property is modified.

  • Message: The ENTER key now selects the button having the focus, not the default one, so that message boxes behave the same with GTK+ and Qt.

  • Message: Add a button in message boxes to copy the message in the clipboard.

  • Message: Message boxes now correctly handle multi-line text in buttons.

  • Paint: Paint.Check() is a new method that draws a check mark.

  • Picture: Fix how Picture[] interprets relative paths.

  • Picture: Picture[] now automatically inverts the image for dark themes.

  • ScrollArea: Do not show the shadows in some cases when they should not be visible.

  • TreeView: ShowCheck is a new property that uses checkboxes to handle selection mode.

  • TreeView: Fix right-to-left layout management.

  • TreeView: Take padding into account when interpreting mouse events.

  • TreeView: Use radio buttons when ShowCheck property is set with single selection mode.

  • TreeView: Calling Add() or Remove() now automatically cancels the current renaming.

  • TreeView: Fix multiple selection.

  • TreeView: Setting the Key value with an unknown key now unselects the current key.

  • TreeView: The Selection property now handles single selection mode correctly.

  • Fix drag & drop frame management.

  • Prevent possible flickering of drag & drop frame.

  • The DragLeave event is now emitted reliably when the mouse leaves the drag and drop frame.

  • Default message icons are now visible when gb.form component is not used.

  • Fix Drag() that was returning the drag frame instead of the target control.

  • Use the new Application.DarkTheme property.

  • Add translations.

GB.GUI.QT

  • Fix detection of GUI components and share some code with gb.gui.

GB.HTTPD

  • Do not use __DATE__ macro for reproducible builds.

GB.IMAGE

  • Remove some surprisingly useless duplicated code in image conversion.

  • Add an API to get the luminance of a color.

  • Color.Invert() is a new method to invert a color.

  • New dark theme color inversion algorithm.

GB.JIT

  • Support for read-only arrays.

  • Implement fast unsafe compilation of Byte@, Short@... functions, that just access memory without checking anything.

  • Fix static arrays management.

  • Add support for VarPtr() on variant variables.

  • Fix VarPtr() on function arguments.

  • Compiling libraries works now.

  • Correctly handle unary minus operator.

  • Support for the &= operator optimization.

  • Cosmetic changes.

  • Fix a badly written code that crashes on 32-bits CPU.

GB.MARKDOWN

  • Allow special commands to be inserted anywhere in the line, except the index one.

  • Lines beginning with # without a space after do not make the parser crash anymore.

  • Take anchors into account correctly when generating links.

  • Add a couple of tests for common problems.

GB.MEDIA

  • MediaPipeline: Play() now takes an extra optional argument that allows not to wait for the command completion.

  • GB_MEDIA_DEBUG is a new environment variable that toggles warning messages.

GB.MEDIA.FORM

  • MediaView: Muted is a new property that defines if the audio is muted or not.

  • MediaView: Volume is a new property to return or set the audio volume.

GB.NET.SMTP

  • SmtpClient: Add _= sequence in mime part boundaries, as this sequence should not be present in encoded data.

  • SmtpClient: Fix quoted-printable encoding of headers containing e-mail addresses.

  • SmtpClient: Clear() is a new method that clears all attachments.

  • SmtpClient: Make SmtpClient able to send multiple mails correctly.

GB.OPENSSL

  • An internal routine's return value was mismatched causing HMac to return without data whenever the digest method was found. (Bug#1725)

  • Add Scrypt function.

  • Add Pbkdf2 function.

  • Unnecessary kdf.h blocking Xenial.

  • KDF Functions under OpenSSL Class.

  • Declare longs as longs instead of integers.

  • RandomBytes length limit (1 - 0x7FFFEFF7).

  • Hash incorrectly allocated by sizeof a pointer.

  • Avoid doubles in integer power-of-two test.

  • Add beginning of a test suite.

GB.PDF

  • Raise minimal supported poppler version to 0.20.

  • Fix segfault with poppler > 0.83.

  • Make gb.pdf compile with poppler >= 0.85.

  • Rely on pkg-config only to detect poppler library.

  • Correctly disable gb.pdf component if pkg-config fails.

  • Mark gb.pdf as deprecated.

GB.POPPLER

  • New gb.poppler component that will replace gb.pdf. It is based on poppler-glib, except for rendering that is based on poppler-splash.

GB.QT4

  • TextBox: Add Placeholder property.

  • Window: set the window size at creation to 1x1, so that there is no default size.

  • Window: Add a State event that is raised when the window is minimized, maximized or set to fullscreen.

  • Windows whose Utility property is set now use _NET_WM_WINDOW_TYPE_DIALOG instead of _NET_WM_WINDOW_TYPE_DIALOG.

  • Control.Next and Control.Previous now never return invalid controls.

  • Do not imbricate focus events.

  • Apply Paint.FontScale only when Paint.Font is assigned. Not when one of the Paint.Font properties changes.

  • Paint.FontScale is now "transparent". Paint.Font.Size is not changed anymore when assigning the Paint.Font property.

  • Support for the new WAIT NEXT instruction.

  • Fix Drag() that was returning the drag frame instead of the target control.

  • Drawing on a cached DrawingArea does not display a warning message anymore.

  • Application.DarkTheme is a new property that returns if the current color scheme is dark.

  • Some theme-specific workarounds for Style paint methods.

  • Style.Name is now lowercase.

  • Mouse.Click is a new property that returns the click index in a multi-click event.

  • Modal windows are now actually modal before entering their Open event.

  • Negative values are replaced by zero when setting Application.Busy.

  • A modal window can be opened on top of a popup window without breaking the event loop.

GB.QT4.WEBKIT

  • Fix incorrect declarations of special methods.

  • Raise Progress evens later on the event loop, to avoir possible crashes of WebView methods.

GB.QT5

  • TextBox: Add Placeholder property.

  • Window: set the window size at creation to 1x1, so that there is no default size.

  • Window: Add a State event that is raised when the window is minimized, maximized or set to full screen.

  • Windows whose Utility property is set now use _NET_WM_WINDOW_TYPE_DIALOG instead of _NET_WM_WINDOW_TYPE_DIALOG.

  • Control.Next and Control.Previous now never return invalid controls.

  • Do not imbricate focus events.

  • Workaround "Setting a QCompleter on non-editable QComboBox is not allowed" message

  • Apply Paint.FontScale only when Paint.Font is assigned. Not when one of the Paint.Font properties changes.

  • Utility windows now kept being in front of their parent window correctly.

  • Paint.FontScale is now "transparent". Paint.Font.Size is not changed anymore when assigning the Paint.Font property.

  • Support for the new WAIT NEXT instruction.

  • Fix Drag() that was returning the drag frame instead of the target control.

  • X11 event filter correctly handle ClientMessage events now.

  • Drawing on a cached DrawingArea does not display a warning message anymore.

  • Application.DarkTheme is a new property that returns if the current color scheme is dark.

  • Some theme-specific workarounds for Style paint methods.

  • Style.Name is now lowercase.

  • Mouse.Click is a new property that returns the click index in a multi-click event.

  • Modal windows are now actually modal before entering their Open event.

  • Negative values are replaced by zero when setting Application.Busy.

  • A modal window can be opened on top of a popup window without breaking the event loop.

GB.QT5.WEBKIT

  • Fix incorrect declarations of special methods.

  • Raise Progress events later on the event loop, to avoid possible crashes of WebView methods.

GB.REPORT2

  • Font size is now the same whatever the printer resolution.

  • Added Brazilian Portuguese translations.

GB.SCANNER

  • Fix bug on the scanimage parser to take various configurations into account.

  • An example in the source that use gb.scanner abilities.

  • Better error management with an Error event.

  • Add PageBegin and PageEnd events to manage actions between each page.

  • Support for multiple scans from the feeder.

  • Use the stock scanner icon as project icon.

GB.SDL2

  • Support for the new WAIT EVENT instruction.

GB.SETTINGS

  • Settings.Clear() now takes an extra optional boolean argument that tells to remove slots recursively.

  • Display a better error message if the settings file directory disappeared.

  • Settings.Keys.All is a new property that returns an array of all children slot keys.

  • Settings.Keys.Exist() is a new method that returns if a specific child slot exists.

  • Settings.Keys.Count is a new property that returns the number of children slots.

  • Settings.Exist() is a new method that return if a specific settings key is set.

  • Settings.Count is a new property that returns the total number of settings.

GB.TEST

  • New component for unit tests.

GB.UTIL

  • ClassStat: Add the flag for test modules.

  • CsvFile: Charset now can be specified. If not specified, the first line of the files is used to guess if it could be WINDOWS-1252, or otherwise UTF-8.

  • CsvFile: Create() is a new method for opening a CSV file for writing.

  • CsvFile: Open() is a new method for opening a CSV file for reading.

  • CsvFile: Quote() is a new method that quotes a value for the CSV format according to its separator and escape characters.

  • Class.Stat() now understands the ".../" syntax to look for classes in the current project.

  • Process: Add Expect() method that allows to answer the prompts of interactive commands running in a virtual terminal easily (think about ssh, scp...).

  • String: PadRight() is a new method that pad a string to the right up to a specified length using a string pattern.

  • String: PadLeft() is a new method that pad a string to the left up to a specified length using a string pattern.

  • Date.ToISO8601() is a new function that converts a date to ISO-8601 format.

  • String.FromHTML() has better support for <p>, <ul>, <li> and <ol> markups.

GB.UTIL.WEB

  • JSONCollection.Copy() now correctly returns a JSONCollection object.

  • Converting a collection into JSON is a now a bit faster.

  • URL.Quote() now quotes spaces as "%20" and not "+" anymore.

  • URL.UnQuote() takes a new optional argument that prevent unquoting "+" into space.

  • Fix query encoding & decoding in URLQuery class.

GB.WEB

  • Fix session abandon.

  • Compress text responses if its size is greater than 512 bytes, not 128.

  • Response.Reset() allows to send the response again.

  • Response.Begin() now takes the content-type as optional argument.

  • Use System.Language if the Accept-Language HTTP header is void.

  • Request.Reset() is a new method that reads the request contents again.

  • CGI.Reset() is a new method that resets CGI variables to their initial values.

  • Response.SendFile() now correctly deals with relative paths.

  • CGI.All is a new property that returns a collection of all CGI environment variables.

  • Do not unquote "+" into space in query strings.

GB.WEB.FORM

  • Fix management of dynamically created popups.

  • Make table headers sticky.

  • Fix window buttons.

  • Document the component.

  • Update project title.

  • Fix a typo in WebMenu properties declaration.

  • Updated Brazilian Portuguese translations.

GB.WEB.GUI

  • New component that replaces gb.web.form.

GB.XML

  • Fix incorrect declaration of _put methods.